System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a463b48529f92062dbd7e64c0803d9ed83492583:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 20 20  ing invariant,  
03d0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62  n */..        ob
04a0: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
04d0: 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20 20  perUser,        
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
0500: 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  64,             
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0520: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
0530: 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20  nMissing,       
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0550: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20    bool whatIf,  
0560: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20  ool verbose,    
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  */..        ref 
05b0: 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20 20 20 20  bool saved,     
05c0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
05d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
05e0: 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20 20  ring error      
05f0: 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
0600: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f      );....    //
0610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0660: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61   internal delega
0670: 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72  te bool Framewor
0680: 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63  kRegistryCallbac
0690: 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74  k(..        Inst
06a0: 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74  aller.MockRegist
06b0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f  ryKey rootKey, /
06c0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
06d0: 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
06e0: 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20  kName,          
06f0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0700: 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
0710: 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
0720: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0730: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0740: 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  g platformName, 
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0760: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0770: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0780: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0790: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
07a0: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
07b0: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
07c0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
07d0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
07e0: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0800: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0810: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0820: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0830: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0840: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0860: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0870: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0880: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
08a0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
08b0: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08d0: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
08e0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  );....    //////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0930: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74  /////....    int
0940: 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62  ernal delegate b
0950: 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64 69 6f  ool VisualStudio
0960: 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b  RegistryCallback
0970: 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61  (..        Insta
0980: 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72  ller.MockRegistr
0990: 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a  yKey rootKey, /*
09a0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
09b0: 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
09c0: 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n,              
09d0: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
09e0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
09f0: 69 78 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ix,             
0a00: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20 6f          /* in, o
0a10: 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20 20 20  ptional */..    
0a20: 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 50 61      Installer.Pa
0a30: 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 20 20  ckage package,  
0a40: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0a50: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
0a60: 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20  clientData,     
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0a80: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  n */..        bo
0a90: 6f 6c 20 70 65 72 55 73 65 72 2c 20 20 20 20 20  ol perUser,     
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0ac0: 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20     bool wow64,  
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0af0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
0b00: 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20  owOnMissing,    
0b10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0b20: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
0b30: 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20 20 20  l whatIf,       
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b50: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0b60: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20    bool verbose, 
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b80: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0b90: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0ba0: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0bb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
0bc0: 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 20 20 20   */..    );..   
0bd0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
0be0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0c30: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75  ..    #region Pu
0c40: 62 6c 69 63 20 45 6e 75 6d 65 72 61 74 69 6f 6e  blic Enumeration
0c50: 73 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d  s..    [Flags()]
0c60: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75  ..    public enu
0c70: 6d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a  m InstallFlags..
0c80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
0c90: 72 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 46 6c  region Normal Fl
0ca0: 61 67 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e  ags..        Non
0cb0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
0cc0: 20 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79    GlobalAssembly
0cd0: 43 61 63 68 65 20 3d 20 30 78 31 2c 0d 0a 20 20  Cache = 0x1,..  
0ce0: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 46 6f        AssemblyFo
0cf0: 6c 64 65 72 73 20 3d 20 30 78 32 2c 0d 0a 20 20  lders = 0x2,..  
0d00: 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72        DbProvider
0d10: 46 61 63 74 6f 72 79 20 3d 20 30 78 34 2c 0d 0a  Factory = 0x4,..
0d20: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
0d30: 65 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  e = 0x8,..      
0d40: 20 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61    VsPackageGloba
0d50: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d  lAssemblyCache =
0d60: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
0d70: 56 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20 30  VsDataSource = 0
0d80: 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73  x20,..        Vs
0d90: 44 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20 30  DataProvider = 0
0da0: 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65  x40,..        #e
0db0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
0dc0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0e10: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
0e20: 6f 6d 70 6f 73 69 74 65 20 46 6c 61 67 73 0d 0a  omposite Flags..
0e30: 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
0e40: 6b 20 3d 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62  k = GlobalAssemb
0e50: 6c 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d 62  lyCache | Assemb
0e60: 6c 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20 20  lyFolders |..   
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e80: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
0e90: 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ry,....        /
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0ef0: 20 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67 65    Vs = VsPackage
0f00: 20 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62   | VsPackageGlob
0f10: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0f20: 7c 20 56 73 44 61 74 61 53 6f 75 72 63 65 20 7c  | VsDataSource |
0f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 56  ..             V
0f40: 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 0d 0a  sDataProvider,..
0f50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fa0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c  /....        All
0fb0: 20 3d 20 46 72 61 6d 65 77 6f 72 6b 20 7c 20 56   = Framework | V
0fc0: 73 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s,....        //
0fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1010: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1020: 20 41 6c 6c 45 78 63 65 70 74 47 6c 6f 62 61 6c   AllExceptGlobal
1030: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
1040: 41 6c 6c 20 26 20 7e 28 47 6c 6f 62 61 6c 41 73  All & ~(GlobalAs
1050: 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d 0a 20  semblyCache |.. 
1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1080: 20 20 20 20 20 20 56 73 50 61 63 6b 61 67 65 47        VsPackageG
1090: 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
10a0: 68 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 65  he),..        #e
10b0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
10c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1110: 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d         Default =
1120: 20 41 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   All..    }.... 
1130: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1180: 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d  ..    [Flags()].
1190: 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  .    public enum
11a0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a   TracePriority..
11b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 4e      {..        N
11c0: 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20  one = 0x0,..    
11d0: 20 20 20 20 4c 6f 77 65 73 74 20 3d 20 30 78 31      Lowest = 0x1
11e0: 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 72  ,..        Lower
11f0: 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20   = 0x2,..       
1200: 20 4c 6f 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20   Low = 0x4,..   
1210: 20 20 20 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d       MediumLow =
1220: 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d   0x8,..        M
1230: 65 64 69 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20  edium = 0x10,.. 
1240: 20 20 20 20 20 20 20 4d 65 64 69 75 6d 48 69 67         MediumHig
1250: 68 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  h = 0x20,..     
1260: 20 20 20 48 69 67 68 20 3d 20 30 78 34 30 2c 0d     High = 0x40,.
1270: 0a 20 20 20 20 20 20 20 20 48 69 67 68 65 72 20  .        Higher 
1280: 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x80,..       
1290: 20 48 69 67 68 65 73 74 20 3d 20 30 78 31 30 30   Highest = 0x100
12a0: 2c 0d 0a 20 20 20 20 20 20 20 20 44 65 66 61 75  ,..        Defau
12b0: 6c 74 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20  lt = Medium..   
12c0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
12d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
1330: 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43  gion Installer C
1340: 6c 61 73 73 0d 0a 23 69 66 20 4e 45 54 5f 34 30  lass..#if NET_40
1350: 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45   || NET_45 || NE
1360: 54 5f 34 35 31 0d 0a 20 20 20 20 5b 53 65 63 75  T_451..    [Secu
1370: 72 69 74 79 43 72 69 74 69 63 61 6c 28 29 5d 0d  rityCritical()].
1380: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 5b 53 65 63  .#else..    [Sec
1390: 75 72 69 74 79 50 65 72 6d 69 73 73 69 6f 6e 28  urityPermission(
13a0: 53 65 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c  SecurityAction.L
13b0: 69 6e 6b 44 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e  inkDemand, Unman
13c0: 61 67 65 64 43 6f 64 65 20 3d 20 74 72 75 65 29  agedCode = true)
13d0: 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69  ]..#endif..    i
13e0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63  nternal static c
13f0: 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a  lass Installer..
1400: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
1410: 72 65 67 69 6f 6e 20 55 6e 73 61 66 65 20 4e 61  region Unsafe Na
1420: 74 69 76 65 20 4d 65 74 68 6f 64 73 20 43 6c 61  tive Methods Cla
1430: 73 73 0d 0a 20 20 20 20 20 20 20 20 5b 53 75 70  ss..        [Sup
1440: 70 72 65 73 73 55 6e 6d 61 6e 61 67 65 64 43 6f  pressUnmanagedCo
1450: 64 65 53 65 63 75 72 69 74 79 28 29 5d 0d 0a 20  deSecurity()].. 
1460: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1470: 65 61 6c 65 64 20 63 6c 61 73 73 20 55 6e 73 61  ealed class Unsa
1480: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 0d  feNativeMethods.
1490: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
14a0: 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20  WINDOWS..       
14b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74       #region Nat
14c0: 69 76 65 20 57 69 6e 33 32 20 43 6f 6e 73 74 61  ive Win32 Consta
14d0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
14e0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
14f0: 6e 74 20 4d 41 58 5f 50 41 54 48 20 3d 20 32 36  nt MAX_PATH = 26
1500: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
1510: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1560: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1570: 73 74 20 69 6e 74 20 43 53 49 44 4c 5f 53 59 53  st int CSIDL_SYS
1580: 54 45 4d 58 38 36 20 3d 20 30 78 30 30 32 39 3b  TEMX86 = 0x0029;
1590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
15f0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1600: 20 69 6e 74 20 53 48 47 46 50 5f 54 59 50 45 5f   int SHGFP_TYPE_
1610: 43 55 52 52 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a  CURRENT = 0;....
1620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1670: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1680: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
1690: 20 53 5f 4f 4b 20 3d 20 30 3b 20 2f 2a 20 48 52   S_OK = 0; /* HR
16a0: 45 53 55 4c 54 20 2a 2f 0d 0a 20 20 20 20 20 20  ESULT */..      
16b0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
16c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1720: 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76     #region Nativ
1730: 65 20 57 69 6e 64 6f 77 73 20 4d 65 74 68 6f 64  e Windows Method
1740: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  s..            [
1750: 44 6c 6c 49 6d 70 6f 72 74 28 22 73 68 66 6f 6c  DllImport("shfol
1760: 64 65 72 2e 64 6c 6c 22 2c 0d 0a 20 20 20 20 20  der.dll",..     
1770: 20 20 20 20 20 20 20 20 20 20 20 43 61 6c 6c 69             Calli
1780: 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 20 3d 20 43  ngConvention = C
1790: 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e  allingConvention
17a0: 2e 57 69 6e 61 70 69 2c 0d 0a 20 20 20 20 20 20  .Winapi,..      
17b0: 20 20 20 20 20 20 20 20 20 20 43 68 61 72 53 65            CharSe
17c0: 74 20 3d 20 43 68 61 72 53 65 74 2e 41 75 74 6f  t = CharSet.Auto
17d0: 2c 20 42 65 73 74 46 69 74 4d 61 70 70 69 6e 67  , BestFitMapping
17e0: 20 3d 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20   = false,..     
17f0: 20 20 20 20 20 20 20 20 20 20 20 54 68 72 6f 77             Throw
1800: 4f 6e 55 6e 6d 61 70 70 61 62 6c 65 43 68 61 72  OnUnmappableChar
1810: 20 3d 20 74 72 75 65 2c 20 53 65 74 4c 61 73 74   = true, SetLast
1820: 45 72 72 6f 72 20 3d 20 74 72 75 65 29 5d 0d 0a  Error = true)]..
1830: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1840: 61 74 65 20 73 74 61 74 69 63 20 65 78 74 65 72  ate static exter
1850: 6e 20 69 6e 74 20 53 48 47 65 74 46 6f 6c 64 65  n int SHGetFolde
1860: 72 50 61 74 68 28 0d 0a 20 20 20 20 20 20 20 20  rPath(..        
1870: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
1880: 57 6e 64 4f 77 6e 65 72 2c 20 69 6e 74 20 6e 46  WndOwner, int nF
1890: 6f 6c 64 65 72 2c 20 49 6e 74 50 74 72 20 68 54  older, IntPtr hT
18a0: 6f 6b 65 6e 2c 20 75 69 6e 74 20 66 6c 61 67 73  oken, uint flags
18b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18c0: 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 65 72     IntPtr buffer
18d0: 20 2f 2a 20 3e 3d 20 4d 41 58 5f 50 41 54 48 20   /* >= MAX_PATH 
18e0: 2a 2f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  */);..          
18f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1950: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1960: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 57 72  region Public Wr
1970: 61 70 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  apper Methods.. 
1980: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1990: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
19a0: 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f  GetSystemDirecto
19b0: 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry()..          
19c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19d0: 20 20 20 20 20 49 6e 74 50 74 72 20 62 75 66 66       IntPtr buff
19e0: 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  er = IntPtr.Zero
19f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a00: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1a10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a30: 20 62 75 66 66 65 72 20 3d 20 4d 61 72 73 68 61   buffer = Marsha
1a40: 6c 2e 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d  l.AllocCoTaskMem
1a50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a60: 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
1a70: 66 28 63 68 61 72 29 20 2a 20 28 4d 41 58 5f 50  f(char) * (MAX_P
1a80: 41 54 48 20 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20  ATH + 1));....  
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa0: 20 20 69 66 20 28 62 75 66 66 65 72 20 21 3d 20    if (buffer != 
1ab0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1af0: 28 53 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68  (SHGetFolderPath
1b00: 28 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20  (IntPtr.Zero,.. 
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1b30: 53 49 44 4c 5f 53 59 53 54 45 4d 58 38 36 2c 20  SIDL_SYSTEMX86, 
1b40: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20  IntPtr.Zero,..  
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 48                SH
1b70: 47 46 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54  GFP_TYPE_CURRENT
1b80: 2c 20 62 75 66 66 65 72 29 20 3d 3d 20 53 5f 4f  , buffer) == S_O
1b90: 4b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K)..            
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1bd0: 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53  n Marshal.PtrToS
1be0: 74 72 69 6e 67 41 75 74 6f 28 62 75 66 66 65 72  tringAuto(buffer
1bf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1c40: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
1c50: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c80: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1ca0: 54 4f 44 4f 3a 20 49 73 20 74 68 69 73 20 74 68  TODO: Is this th
1cb0: 65 20 72 69 67 68 74 20 65 72 72 6f 72 20 68 61  e right error ha
1cc0: 6e 64 6c 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d  ndling solution.
1cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
1cf0: 20 75 73 65 20 61 74 20 74 68 69 73 20 70 6f 69   use at this poi
1d00: 6e 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt?..           
1d10: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d30: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1d40: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1d50: 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
1d60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d70: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1d80: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1d90: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1da0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 22 43 6f 75 6c 64 20 6e 6f 74 20 67 65 74 20   "Could not get 
1dd0: 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
1de0: 3a 20 7b 30 7d 22 2c 20 65 29 2c 0d 0a 20 20 20  : {0}", e),..   
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e00: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1e10: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1e30: 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w;..            
1e40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e50: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e80: 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66 65         if (buffe
1e90: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
1ea0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1eb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed0: 20 20 4d 61 72 73 68 61 6c 2e 46 72 65 65 43 6f    Marshal.FreeCo
1ee0: 54 61 73 6b 4d 65 6d 28 62 75 66 66 65 72 29 3b  TaskMem(buffer);
1ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f00: 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72            buffer
1f10: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f60: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
1f70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f80: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1f90: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1fa0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
1fb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1fc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2010: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
2020: 69 76 61 74 65 20 48 65 6c 70 65 72 20 43 6c 61  ivate Helper Cla
2030: 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20 23 72  sses..        #r
2040: 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20 43 6c  egion AnyPair Cl
2050: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
2060: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
2070: 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32  s AnyPair<T1, T2
2080: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  >..        {..  
2090: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
20a0: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
20b0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
20c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
20d0: 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54     // WARNING: T
20e0: 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 20  his constructor 
20f0: 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d 6d 75  produces an immu
2100: 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20 70 61  table "empty" pa
2110: 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ir..            
2120: 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  //          obje
2130: 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct...           
2140: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2150: 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28   public AnyPair(
2160: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2170: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20     : base()..   
2180: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2190: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
21a0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
21b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2210: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2220: 69 63 20 41 6e 79 50 61 69 72 28 54 31 20 78 29  ic AnyPair(T1 x)
2230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2240: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20    : this()..    
2250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2260: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
2270: 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20 20 20  x = x;..        
2280: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2290: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
22f0: 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54 32 20  nyPair(T1 x, T2 
2300: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
2310: 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d 0a 20      : this(x).. 
2320: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2340: 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20 20 20  is.y = y;..     
2350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2360: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2370: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23d0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
23e0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
23f0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2400: 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20 20 20  e T1 x;..       
2410: 20 20 20 20 20 70 75 62 6c 69 63 20 54 31 20 58       public T1 X
2420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2440: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 78 3b   get { return x;
2450: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2460: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2470: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24c0: 20 20 20 20 70 72 69 76 61 74 65 20 54 32 20 79      private T2 y
24d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24e0: 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20 20 20  ublic T2 Y..    
24f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2500: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2510: 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a 20 20   return y; }..  
2520: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2530: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2540: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
2550: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2560: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25c0: 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 4f 70   #region TraceOp
25d0: 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  s Class..       
25e0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25f0: 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73 0d 0a  class TraceOps..
2600: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2610: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2620: 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73  rivate Constants
2630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2640: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
2650: 6e 67 20 44 65 66 61 75 6c 74 44 65 62 75 67 46  ng DefaultDebugF
2660: 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20  ormat = "#{0} @ 
2670: 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20 20  {1}: {2}";..    
2680: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2690: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66  const string Def
26a0: 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 20  aultTraceFormat 
26b0: 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b  = "#{0} @ {1}: {
26c0: 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2}";....        
26d0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
26e0: 74 20 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31  t string Iso8601
26f0: 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f  DateTimeOutputFo
2700: 72 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  rmat =..        
2710: 20 20 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d          "yyyy.MM
2720: 2e 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66  .ddTHH:mm:ss.fff
2730: 66 66 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20  ffff";..        
2740: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
27b0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
27c0: 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
27d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
27e0: 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  e static object 
27f0: 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f  syncRoot = new o
2800: 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20  bject();..      
2810: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2820: 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65  atic long nextDe
2830: 62 75 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  bugId;..        
2840: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2850: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63  ic long nextTrac
2860: 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eId;..          
2870: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2880: 20 49 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74   IList<TraceList
2890: 65 6e 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65  ener> debugListe
28a0: 6e 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ners;..         
28b0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28c0: 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
28d0: 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  debugPriority = 
28e0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65  TracePriority.De
28f0: 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  fault;..        
2900: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2910: 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
2920: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d   tracePriority =
2930: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
2940: 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  efault;..       
2950: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2960: 74 69 63 20 73 74 72 69 6e 67 20 64 65 62 75 67  tic string debug
2970: 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74  Format = Default
2980: 44 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  DebugFormat;..  
2990: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
29a0: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
29b0: 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65  traceFormat = De
29c0: 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74  faultTraceFormat
29d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
29e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2a50: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
2a60: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
2a70: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2a80: 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69   static TracePri
2a90: 6f 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72  ority DebugPrior
2aa0: 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
2ab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ac0: 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28      get { lock (
2ad0: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75  syncRoot) { retu
2ae0: 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74 79  rn debugPriority
2af0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
2b00: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63         set { loc
2b10: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64  k (syncRoot) { d
2b20: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76  ebugPriority = v
2b30: 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  alue; } }..     
2b40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ba0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2bb0: 63 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72  c static TracePr
2bc0: 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f  iority TracePrio
2bd0: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
2be0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bf0: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
2c00: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
2c10: 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
2c20: 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  y; } }..        
2c30: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f          set { lo
2c40: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
2c50: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
2c60: 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20  value; } }..    
2c70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c80: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2ce0: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
2cf0: 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20   DebugFormat..  
2d00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
2d20: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
2d30: 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75  t) { return debu
2d40: 67 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20  gFormat; } }..  
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2d60: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f  t { lock (syncRo
2d70: 6f 74 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61  ot) { debugForma
2d80: 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  t = value; } }..
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e00: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
2e10: 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74  ring TraceFormat
2e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e40: 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e   get { lock (syn
2e50: 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20  cRoot) { return 
2e60: 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d  traceFormat; } }
2e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e80: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    set { lock (sy
2e90: 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46  ncRoot) { traceF
2ea0: 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
2eb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2ec0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2ed0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2ee0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2f40: 69 6f 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20  ion Interactive 
2f50: 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d  Support Methods.
2f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
2f70: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2f80: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2f90: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2fa0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
2fb0: 69 63 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20  ic DialogResult 
2fc0: 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20  ShowMessage(..  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2fe0: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
2ff0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3000: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3010: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
3020: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
3030: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
3040: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
3050: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3060: 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
3070: 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20   assembly,..    
3080: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3090: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
30b0: 69 6e 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20  ing category,.. 
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
30d0: 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
30e0: 20 62 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20   buttons,..     
30f0: 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
3100: 67 65 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a  geBoxIcon icon..
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3120: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3140: 20 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72    DialogResult r
3150: 65 73 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65  esult = DialogRe
3160: 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20  sult.OK;....    
3170: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75              Debu
3180: 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50  gAndTrace(traceP
3190: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
31b0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
31c0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73  ceCallback, mess
31d0: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
31e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31f0: 20 20 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66     if (SystemInf
3200: 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74  ormation.UserInt
3210: 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20  eractive)..     
3220: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3240: 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d    string title =
3250: 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c   GetAssemblyTitl
3260: 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a  e(assembly);....
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d      if (title ==
3290: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b0: 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74  title = Applicat
32c0: 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b  ion.ProductName;
32d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32e0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
32f0: 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77   MessageBox.Show
3300: 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c  (message, title,
3310: 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b   buttons, icon);
3320: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3330: 20 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64          DebugAnd
3340: 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72  Trace(tracePrior
3350: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
3370: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
3380: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
3390: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b0: 20 20 20 20 22 55 73 65 72 20 63 68 6f 69 63 65      "User choice
33c0: 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69   of {0}.", ForDi
33d0: 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d  splay(result)),.
33e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33f0: 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72           categor
3400: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
3410: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3420: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
3430: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3450: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
3460: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
3490: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
34a0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 20 20 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f      "Default cho
34d0: 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f  ice of {0}.", Fo
34e0: 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29  rDisplay(result)
34f0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
3500: 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79          category
3510: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
3520: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
3530: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
3540: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3550: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
3560: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
3570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
35c0: 65 67 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75  egion Tracing Su
35d0: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
35e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
35f0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 65  c static void Se
3600: 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72  tupDebugListener
3610: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s()..           
3620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3630: 20 20 20 20 69 66 20 28 64 65 62 75 67 4c 69 73      if (debugLis
3640: 74 65 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d  teners == null).
3650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3660: 20 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e       debugListen
3670: 65 72 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54  ers = new List<T
3680: 72 61 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b  raceListener>();
3690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36a0: 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65      debugListene
36b0: 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f  rs.Add(new Conso
36c0: 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28  leTraceListener(
36d0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
36e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3740: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3750: 69 63 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75  ic long NextDebu
3760: 67 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20  gId()..         
3770: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3780: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
3790: 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65  erlocked.Increme
37a0: 6e 74 28 72 65 66 20 6e 65 78 74 44 65 62 75 67  nt(ref nextDebug
37b0: 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Id);..          
37c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
37d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3810: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3820: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3830: 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61  tic long NextTra
3840: 63 65 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20  ceId()..        
3850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
3870: 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d  terlocked.Increm
3880: 65 6e 74 28 72 65 66 20 6e 65 78 74 54 72 61 63  ent(ref nextTrac
3890: 65 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  eId);..         
38a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
38b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3900: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3910: 61 74 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65  atic string Time
3920: 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64  Stamp(DateTime d
3930: 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20  ateTime)..      
3940: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3950: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3960: 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e  dateTime.ToStrin
3970: 67 28 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d  g(Iso8601DateTim
3980: 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d  eOutputFormat);.
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
39a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3a00: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
3a10: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
3a20: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
3a30: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
3a40: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
3a50: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20  etMethodName(.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
3a70: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
3a80: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
3a90: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
3aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ab0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
3ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3ad0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
3ae0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b00: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3b10: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3b20: 20 49 66 20 61 20 76 61 6c 69 64 20 73 74 61 63   If a valid stac
3b30: 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20  k trace was not 
3b40: 73 75 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d  supplied by the.
3b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3b60: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
3b70: 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65  ller, create one
3b80: 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68   now based on th
3b90: 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20  e current..     
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3bb0: 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 69 6f  /       executio
3bc0: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20  n stack...      
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3bf0: 20 20 20 20 20 20 69 66 20 28 73 74 61 63 6b 54        if (stackT
3c00: 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  race == null).. 
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3c50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3c60: 45 3a 20 47 72 61 62 20 74 68 65 20 63 75 72 72  E: Grab the curr
3c70: 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74  ent execution st
3c80: 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ack...          
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3cb0: 20 20 20 20 20 20 20 20 20 20 73 74 61 63 6b 54            stackT
3cc0: 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b  race = new Stack
3cd0: 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  Trace();....    
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cf0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20  // NOTE: Always 
3d20: 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66  skip this call f
3d30: 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70  rame when we cap
3d40: 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..          
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3d60: 20 20 20 20 20 20 20 74 68 65 20 73 74 61 63 6b         the stack
3d70: 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20   trace...       
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d90: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76               lev
3db0: 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  el++;..         
3dc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3de0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3e00: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73 70 65  OTE: Get the spe
3e10: 63 69 66 69 65 64 20 73 74 61 63 6b 20 66 72 61  cified stack fra
3e20: 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f  me (always add o
3e30: 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ne to..         
3e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
3e50: 20 20 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65      skip this me
3e60: 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20  thod)...        
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e90: 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73      StackFrame s
3ea0: 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63  tackFrame = stac
3eb0: 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28  kTrace.GetFrame(
3ec0: 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  level);....     
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3ee0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3ef0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3f00: 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66  Get the method f
3f10: 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66 72 61  or the stack fra
3f20: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me...           
3f30: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f50: 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68   MethodBase meth
3f60: 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72  odBase = stackFr
3f70: 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b  ame.GetMethod();
3f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3f90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fb0: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
3fc0: 20 74 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65   type for the me
3fd0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
3fe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4000: 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d     Type type = m
4010: 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72  ethodBase.Declar
4020: 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  ingType;....    
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4040: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4050: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4060: 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66   Get the name of
4070: 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   the method...  
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4090: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
40a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
40b0: 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61   name = methodBa
40c0: 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  se.Name;....    
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
40f0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4100: 20 52 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70   Return the prop
4110: 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72  erly formatted r
4120: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
4130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
4160: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4180: 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20     "{0}{1}{2}", 
4190: 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e  type.Name, Type.
41a0: 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29  Delimiter, name)
41b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
41c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
41d0: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
4210: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
4220: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4230: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4240: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
4250: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4260: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
42b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
42c0: 61 74 69 63 20 76 6f 69 64 20 44 65 62 75 67 43  atic void DebugC
42d0: 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ore(..          
42e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
42f0: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
4300: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
4310: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
4320: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
4330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4340: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
4350: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
4360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
4390: 6e 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ners != null).. 
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
43d0: 72 65 61 63 68 20 28 54 72 61 63 65 4c 69 73 74  reach (TraceList
43e0: 65 6e 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e  ener listener in
43f0: 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29   debugListeners)
4400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4410: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 20 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65           listene
4440: 72 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73  r.WriteLine(mess
4450: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
4460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73               lis
4480: 74 65 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a  tener.Flush();..
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
44c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
44d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
44e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
44f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4530: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4540: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4550: 69 63 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72  ic void TraceCor
4560: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
4570: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
4580: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
4590: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
45a0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
45b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
45c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
45d0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
45e0: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
45f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4610: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4620: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4630: 20 57 72 69 74 65 20 74 68 65 20 6d 65 73 73 61   Write the messa
4640: 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63  ge to all the ac
4650: 74 69 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20  tive trace..    
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4670: 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65  //       listene
4680: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs...           
4690: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46b0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
46c0: 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f  (message, catego
46d0: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
46e0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
46f0: 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20  Flush();..      
4700: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4720: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
4780: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
4790: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
47a0: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
47b0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
47c0: 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41  ic string DebugA
47d0: 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
47e0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
47f0: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
4800: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
4810: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
4820: 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62  lback debugCallb
4830: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
4840: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
4850: 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ack traceCallbac
4860: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4870: 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78      Exception ex
4880: 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ception,..      
4890: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
48a0: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
48b0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
48c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
48e0: 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75  (exception != nu
48f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4900: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4910: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
4920: 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62  acePriority, deb
4930: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4950: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
4960: 63 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61  ck, new StackTra
4970: 63 65 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72  ce(exception, tr
4980: 75 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20  ue), 0,..       
4990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49a0: 20 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72   exception.ToStr
49b0: 69 6e 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29  ing(), category)
49c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
49d0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
49e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
49f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4a50: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
4a60: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
4a70: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
4a80: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
4a90: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
4aa0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ac0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
4ad0: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4af0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75  aceCallback debu
4b00: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4b20: 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
4b30: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4b40: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4b50: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
4b60: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4b70: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4b90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4bb0: 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61  turn DebugAndTra
4bc0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4bd0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 50 72           tracePr
4be0: 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c  iority, debugCal
4bf0: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
4c00: 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a  back, null, 1,..
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c20: 20 20 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74      message, cat
4c30: 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
4c40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4c50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4ca0: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
4cb0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
4cc0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
4cd0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
4ce0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
4cf0: 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54  string DebugAndT
4d00: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
4d10: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
4d20: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
4d30: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
4d40: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
4d50: 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
4d60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4d70: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4d80: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
4d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4da0: 20 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63   StackTrace stac
4db0: 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20  kTrace,..       
4dc0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76           int lev
4dd0: 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  el,..           
4de0: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
4df0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
4e00: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
4e10: 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
4e20: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4e30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4e40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4e60: 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69  NOTE: Always ski
4e70: 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d  p this call fram
4e80: 65 20 69 66 20 74 68 65 20 73 74 61 63 6b 20 74  e if the stack t
4e90: 72 61 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20  race is..       
4ea0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4eb0: 20 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61    going to be ca
4ec0: 70 74 75 72 65 64 20 62 79 20 47 65 74 4d 65 74  ptured by GetMet
4ed0: 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  hodName...      
4ee0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4f00: 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20   (stackTrace == 
4f10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4f20: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
4f30: 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
4f40: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4f60: 54 45 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d  TE: Format the m
4f70: 65 73 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c  essage for displ
4f80: 61 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20  ay (once)...    
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fb0: 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64  string formatted
4fc0: 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
4fd0: 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20  ("{0}: {1}",..  
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ff0: 20 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28    GetMethodName(
5000: 73 74 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65  stackTrace, leve
5010: 6c 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d  l), message);...
5020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5030: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5040: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
5050: 20 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62   the debug callb
5060: 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f  ack is invalid o
5070: 72 20 74 68 65 20 74 72 61 63 65 20 70 72 69 6f  r the trace prio
5080: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
5090: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
50a0: 66 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69  f this message i
50b0: 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74  s less than what
50c0: 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61   we currently wa
50d0: 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  nt to..         
50e0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
50f0: 64 65 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d  debug, skip it..
5100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5110: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5120: 20 20 20 20 20 69 66 20 28 28 64 65 62 75 67 43       if ((debugC
5130: 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29  allback != null)
5140: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
5150: 20 20 20 20 20 20 20 20 20 28 74 72 61 63 65 50           (traceP
5160: 72 69 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67  riority >= Debug
5170: 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20  Priority))..    
5180: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
51b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
51c0: 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64  TE: Invoke the d
51d0: 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69  ebug callback wi
51e0: 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64  th the formatted
51f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5200: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
5210: 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20 63  essage and the c
5220: 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69 65  ategory specifie
5230: 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5250: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a         caller...
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5270: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5280: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
5290: 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74  gCallback(format
52a0: 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ted, category);.
52b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
52c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
52d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
52e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
52f0: 45 3a 20 49 66 20 74 68 65 20 74 72 61 63 65 20  E: If the trace 
5300: 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61  callback is inva
5310: 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65  lid or the trace
5320: 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20   priority..     
5330: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5340: 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73      of this mess
5350: 61 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e  age is less than
5360: 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74   what we current
5370: 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20  ly want to..    
5380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5390: 20 20 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70       trace, skip
53a0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20   it...          
53b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
53c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 74            if ((t
53d0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20  raceCallback != 
53e0: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74                (t
5400: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20  racePriority >= 
5410: 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d  TracePriority)).
5420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5440: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5460: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20  // NOTE: Invoke 
5470: 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
5480: 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d  ck with the form
5490: 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  atted..         
54a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
54b0: 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20      message and 
54c0: 74 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65  the category spe
54d0: 63 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20  cified by the.. 
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54f0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
5500: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...           
5510: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5530: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66   traceCallback(f
5540: 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f  ormatted, catego
5550: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
5560: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5570: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5580: 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20  n message;..    
5590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
55a0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
55b0: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
55c0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
55d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
55e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5620: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
5630: 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73  region MockRegis
5640: 74 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  try Class..     
5650: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
5660: 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69  d class MockRegi
5670: 73 74 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62  stry : IDisposab
5680: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
5690: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
56a0: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
56b0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
56c0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
56d0: 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20  egistry()..     
56e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
56f0: 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
5700: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5710: 20 20 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e            readOn
5720: 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ly = true;..    
5730: 20 20 20 20 20 20 20 20 20 20 20 20 73 61 66 65              safe
5740: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5750: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5760: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
57b0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
57c0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a   MockRegistry(..
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20  bool whatIf..   
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5810: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
5820: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5830: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 68           this.wh
5840: 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a  atIf = whatIf;..
5850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
58c0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
58d0: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
58e0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
58f0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
5900: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
5910: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
5920: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
5930: 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 68 61        : this(wha
5940: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
5950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5960: 20 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e       this.readOn
5970: 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a  ly = readOnly;..
5980: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
59f0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
5a00: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
5a10: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
5a20: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
5a30: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
5a40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
5a50: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
5a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a80: 20 20 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c    : this(whatIf,
5a90: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
5aa0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5ab0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5ac0: 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20  safe = safe;..  
5ad0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5ae0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
5af0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
5b00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5b50: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
5b60: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
5b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
5b80: 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66  vate bool whatIf
5b90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
5ba0: 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49  ublic bool WhatI
5bb0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
5bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5bd0: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
5be0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
5bf0: 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20  whatIf; }..     
5c00: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
5c10: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5c20: 3b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65  ; whatIf = value
5c30: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5c40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5c50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5ca0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
5cb0: 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20  l readOnly;..   
5cc0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5cd0: 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20  bool ReadOnly.. 
5ce0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
5d00: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
5d10: 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64  d(); return read
5d20: 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Only; }..       
5d30: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
5d40: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5d50: 72 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65  readOnly = value
5d60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5d70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5d80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5dd0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
5de0: 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  l safe;..       
5df0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
5e00: 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   Safe..         
5e10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5e20: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
5e30: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
5e40: 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20  urn safe; }..   
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
5e60: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
5e70: 28 29 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65  (); safe = value
5e80: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5e90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5ea0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ee0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5ef0: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
5f00: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61  kRegistryKey cla
5f10: 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20  ssesRoot;..     
5f20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
5f30: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c  ckRegistryKey Cl
5f40: 61 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20  assesRoot..     
5f50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5f60: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f90: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
5fa0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5fc0: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d   (classesRoot ==
5fd0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ff0: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65  classesRoot = ne
6000: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
6010: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 52 65 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73  Registry.Classes
6040: 52 6f 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65  Root, whatIf, re
6050: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
6060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61        return cla
6080: 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20  ssesRoot;..     
6090: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
60a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
60b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6110: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
6120: 72 79 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e  ryKey currentCon
6130: 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fig;..          
6140: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
6150: 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74  istryKey Current
6160: 43 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20  Config..        
6170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6180: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6190: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
61c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
61d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
61e0: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20  urrentConfig == 
61f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6210: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e  urrentConfig = n
6220: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
6230: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6250: 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   Registry.Curren
6260: 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c  tConfig, whatIf,
6270: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
6280: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6290: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
62a0: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a  currentConfig;..
62b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
62d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
62e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6320: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6330: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6340: 65 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 65  egistryKey curre
6350: 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20  ntUser;..       
6360: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
6370: 52 65 67 69 73 74 72 79 4b 65 79 20 43 75 72 72  RegistryKey Curr
6380: 65 6e 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20  entUser..       
6390: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
63a0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63d0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
63e0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6400: 63 75 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e  currentUser == n
6410: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
6430: 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20  rrentUser = new 
6440: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6470: 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
6480: 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  er, whatIf, read
6490: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64b0: 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65      return curre
64c0: 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20  ntUser;..       
64d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
64e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
64f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6540: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6550: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
6560: 4b 65 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20  Key dynData;..  
6570: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6580: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6590: 20 44 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20   DynData..      
65a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
65b0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
65d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
65e0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
65f0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6610: 28 64 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c  (dynData == null
6620: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6630: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61             dynDa
6640: 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ta = new MockReg
6650: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6670: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6680: 44 79 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c  DynData, whatIf,
6690: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
66a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
66b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
66c0: 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  dynData;..      
66d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
66e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
66f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6750: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
6760: 79 4b 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e  yKey localMachin
6770: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6780: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6790: 74 72 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68  tryKey LocalMach
67a0: 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
67b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
67c0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
67d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
67e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67f0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6800: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6810: 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61          if (loca
6820: 6c 4d 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c  lMachine == null
6830: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6840: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c             local
6850: 4d 61 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f  Machine = new Mo
6860: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6880: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6890: 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
68a0: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
68b0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20  nly, safe);.... 
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68d0: 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d     return localM
68e0: 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20  achine;..       
68f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6900: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6910: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6960: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6970: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
6980: 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44  Key performanceD
6990: 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ata;..          
69a0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
69b0: 69 73 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d  istryKey Perform
69c0: 61 6e 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20  anceData..      
69d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
69e0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a10: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6a20: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6a40: 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61  (performanceData
6a50: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a70: 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61     performanceDa
6a80: 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ta = new MockReg
6a90: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ab0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6ac0: 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c  PerformanceData,
6ad0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6ae0: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b00: 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61   return performa
6b10: 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  nceData;..      
6b20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6ba0: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
6bb0: 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20  yKey users;..   
6bc0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6bd0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
6be0: 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  Users..         
6bf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6c00: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6c10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c30: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
6c40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6c50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73            if (us
6c60: 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ers == null)..  
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c80: 20 20 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65        users = ne
6c90: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
6ca0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cc0: 52 65 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20  Registry.Users, 
6cd0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
6ce0: 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20  , safe);....    
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d00: 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20  return users;.. 
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
6d40: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6d50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6da0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
6db0: 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69 73 74  n Public "Regist
6dc0: 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ry" Methods..   
6dd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6de0: 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28  object GetValue(
6df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e00: 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
6e10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
6e20: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e     string valueN
6e30: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
6e40: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66        object def
6e50: 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20  aultValue..     
6e60: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
6e70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
6e90: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
6ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6eb0: 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79   return Registry
6ec0: 2e 47 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d  .GetValue(keyNam
6ed0: 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65  e, valueName, de
6ee0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20  faultValue);..  
6ef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6f00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6f60: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
6f70: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
6f80: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
6f90: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
6fa0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
6fb0: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
6fc0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
6fd0: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
6fe0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
6ff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7000: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
7010: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
7020: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
7030: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
7040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7050: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
7060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7070: 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c   Registry.SetVal
7080: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75  ue(keyName, valu
7090: 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  eName, value);..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
70b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
70c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7110: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56  public void SetV
7120: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
7130: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
7140: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
7150: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
7160: 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alueName,..     
7170: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
7180: 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20  t value,..      
7190: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
71a0: 72 79 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75  ryValueKind valu
71b0: 65 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  eKind..         
71c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
71d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
71e0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
71f0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
7200: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
7210: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7230: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7250: 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c   Registry.SetVal
7260: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75  ue(keyName, valu
7270: 65 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61  eName, value, va
7280: 6c 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  lueKind);..     
7290: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
72a0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
72b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
72c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7300: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7310: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
7320: 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  te Methods..    
7330: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7340: 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e  void CheckReadOn
7350: 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ly()..          
7360: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7370: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
7380: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
7390: 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22  : In "read-only"
73a0: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c   mode, we disall
73b0: 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63  ow all write acc
73c0: 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...          
73d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
73e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72            if (!r
73f0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
7400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7410: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
7420: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
7430: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
7440: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
7450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7460: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
7470: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
7480: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
74d0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
74e0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
74f0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
7500: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
7510: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
7520: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
7530: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
7540: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
7550: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
7560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7570: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
7580: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
75a0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
75b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
75c0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
75d0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73  typeof(MockRegis
7600: 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20  try).Name);..   
7610: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7620: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7680: 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65  vate /* protecte
7690: 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69  d virtual */ voi
76a0: 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20  d Dispose(..    
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
76c0: 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20   disposing..    
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
76e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7700: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7730: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 69       if (disposi
7740: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
7750: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7770: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77b0: 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
77c0: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
77d0: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7810: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7830: 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20  if (classesRoot 
7840: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7860: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7880: 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f   classesRoot.Clo
7890: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78b0: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d     classesRoot =
78c0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7900: 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21  (currentConfig !
7910: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7950: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c  currentConfig.Cl
7960: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69      currentConfi
7990: 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  g = null;..     
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79d0: 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72 20  if (currentUser 
79e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a20: 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f   currentUser.Clo
7a30: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d     currentUser =
7a60: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7aa0: 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c  (dynData != null
7ab0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7ac0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
7af0: 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  a.Close();..    
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b10: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 20          dynData 
7b20: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7b60: 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21   (localMachine !
7b70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f  localMachine.Clo
7bc0: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20     localMachine 
7bf0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7c30: 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74   (performanceDat
7c40: 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  a != null)..    
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c80: 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61     performanceDa
7c90: 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ta.Close();..   
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d           perform
7cc0: 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b  anceData = null;
7cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ce0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d00: 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72 73         if (users
7d10: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d50: 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b    users.Close();
7d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
7d80: 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ers = null;..   
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7da0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7dd0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
7e20: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
7e30: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
7e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e70: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7e80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ea0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
7eb0: 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64   object is now d
7ec0: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ef0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
7f00: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
7f10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7f20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7f30: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7f40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7fa0: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
7fb0: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7fd0: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
7fe0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8000: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8020: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
8030: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
8040: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8050: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
8060: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
8070: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
80c0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
80d0: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
80e0: 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73        ~MockRegis
80f0: 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  try()..         
8100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8110: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
8120: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
8130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8140: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
8150: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8160: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
8170: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
81c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
81d0: 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  n MockRegistryKe
81e0: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
81f0: 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64   internal sealed
8200: 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73   class MockRegis
8210: 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73  tryKey : IDispos
8220: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
8230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
8240: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
8250: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
8260: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
8270: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29  ockRegistryKey()
8280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
82a0: 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d   whatIf = true;.
82b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
82c0: 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65   readOnly = true
82d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
82e0: 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d     safe = true;.
82f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8300: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
8310: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8320: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8370: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
8380: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
8390: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
83a0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
83b0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
83c0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
83d0: 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20  tryKey key..    
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
8400: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20   this()..       
8410: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8420: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79          this.key
8430: 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20   = key;..       
8440: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8450: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
84a0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
84b0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
84c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
84d0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
84e0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
84f0: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
8500: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
8510: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8520: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
8530: 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20  (key)..         
8540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8550: 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65        this.subKe
8560: 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61  yName = subKeyNa
8570: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
8580: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8590: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
85a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
85e0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
85f0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8610: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8630: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
8640: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8650: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
8660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8670: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
8680: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
8690: 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20  subKeyName)..   
86a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
86c0: 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
86d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
86e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
86f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8730: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8740: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8750: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8760: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8770: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8790: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
87a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
87b0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87d0: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20  bool readOnly.. 
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
87f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8800: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
8810: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
8820: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8840: 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20    this.readOnly 
8850: 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20  = readOnly;..   
8860: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8870: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
88c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
88d0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
88e0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
88f0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8900: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
8910: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
8920: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
8930: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
8940: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
8950: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
8960: 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20  eadOnly,..      
8970: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
8980: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
8990: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
89a0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
89b0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
89c0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
89d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
89e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
89f0: 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61    this.safe = sa
8a00: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
8a10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8a20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8a70: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
8a80: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8aa0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ac0: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20  bool whatIf..   
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8af0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
8b00: 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  , whatIf)..     
8b10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8b20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
8b30: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
8b40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8b50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8ba0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8bb0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8bc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8bd0: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8be0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8bf0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
8c00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8c10: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
8c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8c40: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
8c50: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72   null, whatIf, r
8c60: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
8c70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8c80: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
8c90: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
8ca0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8cb0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8d00: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8d10: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d30: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8d40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
8d50: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
8d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d70: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
8d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d90: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dc0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
8dd0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
8de0: 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20  ly, safe)..     
8df0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8e00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
8e10: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
8e20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8e30: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
8e40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
8e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
8ea0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
8eb0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
8ec0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
8ed0: 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20  d Close()..     
8ee0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8ef0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8f10: 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73   NOTE: No dispos
8f20: 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62 65  ed check here be
8f30: 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68  cause calling th
8f40: 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20  is method..     
8f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
8f60: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75      should be ju
8f70: 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20  st like calling 
8f80: 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20  Dispose...      
8f90: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
8fb0: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
8fc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8fd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9030: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
9040: 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65  yKey CreateSubKe
9050: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9060: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
9070: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
9080: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9090: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
90a0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
90b0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
90c0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
90d0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
90f0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
9100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9110: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
9120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9130: 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29       if (whatIf)
9140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9150: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9160: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9180: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70   // HACK: Attemp
9190: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70  t to open the sp
91a0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e  ecified sub-key.
91b0: 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20    If this..     
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
91d0: 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77  /       fails, w
91e0: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65  e will simply re
91f0: 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65 64  turn the wrapped
9200: 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20   root key..     
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9220: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 73  /       itself s
9230: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61  ince no writes a
9240: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77  re allowed in 'w
9250: 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20  hat-if'..       
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9270: 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f        mode anyho
9280: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w...            
9290: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
92c0: 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62  ey = key.OpenSub
92d0: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  Key(subKeyName);
92e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
92f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
9300: 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  subKey != null) 
9310: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
9320: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d             new M
9330: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
9340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9360: 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c   subKey, whatIf,
9370: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
9380: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
9390: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
93a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
93e0: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
93f0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20  nly, safe);..   
9400: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
9430: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9450: 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  urn new MockRegi
9460: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
9470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9480: 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b    key.CreateSubK
9490: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
94a0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
94b0: 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20  , safe);..      
94c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
94d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
94e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9540: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  lic void DeleteS
9550: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9560: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9570: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
9580: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9590: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d   throwOnMissing.
95a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
95b0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
95c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
95d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
95e0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
95f0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
9600: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
9610: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
9620: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9640: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
9650: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
9660: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
9670: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
9680: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62  DeleteSubKey(sub
9690: 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e  KeyName, throwOn
96a0: 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20  Missing);..     
96b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
96c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9710: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9720: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
9730: 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
9740: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9750: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9770: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9790: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
97a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
97b0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
97c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
97d0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
97e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
97f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9800: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
9810: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
9820: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
9830: 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65          key.Dele
9840: 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75 62  teSubKeyTree(sub
9850: 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  KeyName);..     
9860: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9870: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
98c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
98d0: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c  c void DeleteVal
98e0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
98f0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
9900: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9910: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
9920: 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  issing..        
9930: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9950: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9960: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9970: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9980: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
99b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
99c0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
99d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99e0: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a00: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c     key.DeleteVal
9a10: 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e  ue(name, throwOn
9a20: 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20  Missing);..     
9a30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9a40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9a90: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9aa0: 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75  c string[] GetSu
9ab0: 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20  bKeyNames()..   
9ac0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9ae0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
9b30: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
9b40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
9b50: 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28  .GetSubKeyNames(
9b60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9b70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9b80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bc0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9bd0: 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63      public objec
9be0: 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  t GetValue(..   
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9c00: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
9c10: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
9c20: 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a  t defaultValue..
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9c60: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9c70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9c80: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9c90: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9cb0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9cd0: 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28  rn key.GetValue(
9ce0: 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c  name, defaultVal
9cf0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
9d00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9d10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9d60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
9d70: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65  kRegistryKey Ope
9d80: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
9d90: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9da0: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9de0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
9df0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9e00: 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75     return OpenSu
9e10: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
9e20: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
9e30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9e40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9e90: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9ea0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
9eb0: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
9ed0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
9ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ef0: 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d    bool writable.
9f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f10: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9f20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9f30: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9f40: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9f50: 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74 61         if (writa
9f60: 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ble)..          
9f70: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
9f80: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9fa0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9fd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9fe0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
9ff0: 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65  subKey = key.Ope
a000: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
a020: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
a030: 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61   ? false : writa
a040: 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ble);....       
a050: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a060: 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29  (subKey != null)
a070: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
a080: 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b          new Mock
a090: 52 65 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b  RegistryKey(subK
a0a0: 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ey, whatIf, read
a0b0: 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75  Only, safe) : nu
a0c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
a0d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a0e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a130: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
a140: 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   SetValue(..    
a150: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a160: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
a170: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
a180: 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
a190: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
a1a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a1b0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
a1c0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
a1e0: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a200: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
a210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a220: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
a230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a240: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a260: 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28     key.SetValue(
a270: 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  name, value);.. 
a280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a290: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
a2a0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
a2b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a300: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
a310: 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
a320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a330: 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65  blic string Name
a340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a360: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
a370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a390: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
a3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a3b0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
a3c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
a3e0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a400: 20 20 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e     return !Strin
a410: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
a420: 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20  subKeyName) ?.. 
a430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a440: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
a450: 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c  rmat("{0}\\{1}",
a460: 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65   key.Name, subKe
a470: 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20  yName) :..      
a480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a490: 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20    key.Name;..   
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a520: 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72 79  private Registry
a530: 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20  Key key;..      
a540: 20 20 20 20 20 20 70 75 62 6c 69 63 20 52 65 67        public Reg
a550: 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20  istryKey Key..  
a560: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
a580: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
a590: 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b  (); CheckSafe();
a5a0: 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a   return key; }..
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a5c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a610: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a620: 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 73  private string s
a630: 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  ubKeyName;..    
a640: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
a650: 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65  tring SubKeyName
a660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a680: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a690: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73  osed(); return s
a6a0: 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20  ubKeyName; }..  
a6b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a6c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a720: 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49  ivate bool whatI
a730: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
a740: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74  public bool What
a750: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
a760: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a770: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a780: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a790: 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20   whatIf; }..    
a7a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a7b0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a800: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a810: 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c  ate bool readOnl
a820: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
a830: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64  public bool Read
a840: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
a850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a860: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
a870: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
a880: 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a  rn readOnly; }..
a890: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a900: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65  public bool safe
a910: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
a920: 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d  ublic bool Safe.
a930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a950: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
a960: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61  sed(); return sa
a970: 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  fe; }..         
a980: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a990: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a9f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
aa00: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d  region Private M
aa10: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
aa20: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
aa30: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
aa40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
aa50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aa60: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
aa70: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
aa80: 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64   "read-only" mod
aa90: 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61  e, we disallow a
aaa0: 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73 73 2e  ll write access.
aab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aac0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
aad0: 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64 4f        if (!readO
aae0: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
aaf0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ab00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ab10: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
ab20: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
ab30: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20  xception();..   
ab40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ab50: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ab60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
abb0: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53  vate void CheckS
abc0: 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  afe()..         
abd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
abe0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
abf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
ac00: 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64  E: In "safe" mod
ac10: 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61  e, we disallow a
ac20: 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65 73 73  ll direct access
ac30: 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
ac40: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
ac50: 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69    contained regi
ac60: 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20  stry key...     
ac70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
ac90: 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20  f (!safe)..     
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
acb0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
acc0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
acd0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
ace0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
acf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ad00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
ad10: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
ad20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ad70: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
ad80: 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20  n System.Object 
ad90: 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20  Overrides..     
ada0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
adb0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f  erride string To
adc0: 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20  String()..      
add0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ade0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
adf0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ae10: 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a  urn this.Name;..
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ae30: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
ae40: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
ae50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae90: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
aea0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
aeb0: 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73  Implicit Convers
aec0: 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20  ion Operators.. 
aed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
aee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55             // BU
aef0: 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f  GBUG: Remove me?
af00: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65    This should be
af10: 20 73 61 66 65 20 62 65 63 61 75 73 65 20 69 6e   safe because in
af20: 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20   'what-if'..    
af30: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
af40: 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73     mode all keys
af50: 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64   are opened read
af60: 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  -only...        
af70: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
af80: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
af90: 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61  c implicit opera
afa0: 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79 28  tor RegistryKey(
afb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afc0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
afd0: 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  y key..         
afe0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
aff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b000: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b010: 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (key != null) ? 
b020: 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d  key.Key : null;.
b030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b040: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b050: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b060: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b0b0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b0c0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
b0d0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
b0f0: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
b100: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
b110: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
b120: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
b130: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
b140: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b150: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
b160: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
b180: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
b190: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
b1a0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
b1b0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1d0: 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73  typeof(MockRegis
b1e0: 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a  tryKey).Name);..
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b260: 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65  private /* prote
b270: 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20  cted virtual */ 
b280: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20  void Dispose(.. 
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
b2a0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20  ool disposing.. 
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
b2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b2e0: 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d   if (!disposed).
b2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b310: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
b320: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
b330: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b350: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20       // dispose 
b3a0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
b3b0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75     if (key != nu
b420: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
b430: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b450: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
b460: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b480: 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c        key = null
b490: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b4a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
b4d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b510: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
b520: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
b530: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b590: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
b5a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
b5b0: 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73  : This object is
b5c0: 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a   now disposed...
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5e0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
b600: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  osed = true;..  
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b630: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b640: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b650: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b6a0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b6b0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d   IDisposable Mem
b6c0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
b6d0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69    public void Di
b6e0: 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  spose()..       
b6f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b700: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
b710: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
b720: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72          GC.Suppr
b730: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73  essFinalize(this
b740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b750: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
b760: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
b770: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
b7d0: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63              ~Moc
b7f0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
b800: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
b820: 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a  ispose(false);..
b830: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b840: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
b850: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
b860: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
b870: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b8d0: 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73     #region Regis
b8e0: 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d  tryHelper Class.
b8f0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
b900: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65   static class Re
b910: 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20  gistryHelper..  
b920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b930: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
b940: 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f 70 65  lic Static Prope
b950: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
b960: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
b970: 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65  c int subKeysCre
b980: 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ated;..         
b990: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
b9a0: 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61   int SubKeysCrea
b9b0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
b9c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b9d0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
b9e0: 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b   subKeysCreated;
b9f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ba00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ba10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ba20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ba60: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
ba70: 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65  ic int subKeysDe
ba80: 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  leted;..        
ba90: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
baa0: 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c  c int SubKeysDel
bab0: 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  eted..          
bac0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bad0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
bae0: 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64  n subKeysDeleted
baf0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
bb00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bb10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bb60: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
bb70: 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65  tic int keyValue
bb80: 73 53 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  sSet;..         
bb90: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
bba0: 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65   int KeyValuesSe
bbb0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
bbc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bbd0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b    get { return k
bbe0: 65 79 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a  eyValuesSet; }..
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
bc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bc60: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
bc70: 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65  nt keyValuesDele
bc80: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
bc90: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bca0: 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c  int KeyValuesDel
bcb0: 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  eted..          
bcc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bcd0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
bce0: 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  n keyValuesDelet
bcf0: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
bd00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
bd10: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
bd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
bd70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
bd80: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74  region Public St
bd90: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
bda0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
bdb0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
bdc0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
bdd0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
bde0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bdf0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
be00: 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
be10: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
be20: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
be30: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
be40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
be50: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
be60: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
be70: 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  writable,..     
be80: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
be90: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
bea0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
beb0: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
bec0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
bed0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bee0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
bef0: 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf10: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
bf20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bf30: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
bf40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf50: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
bf60: 62 75 67 41 6e 64 54 72 61 63 65 28 77 72 69 74  bugAndTrace(writ
bf70: 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20  able ?..        
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf90: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
bfa0: 67 68 65 73 74 20 3a 20 54 72 61 63 65 50 72 69  ghest : TracePri
bfb0: 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20  ority.Higher,.. 
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfd0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
bfe0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
bff0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
c000: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f               "ro
c020: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62  otKey = {0}, sub
c030: 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77  KeyName = {1}, w
c040: 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d  ritable = {2}",.
c050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c060: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
c070: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f  lay(rootKey), Fo
c080: 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e  rDisplay(subKeyN
c090: 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
c0b0: 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74 61 62  orDisplay(writab
c0c0: 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  le)), traceCateg
c0d0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
c0e0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c100: 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72  HACK: Always for
c110: 62 69 64 20 77 72 69 74 61 62 6c 65 20 61 63 63  bid writable acc
c120: 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69  ess when operati
c130: 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20  ng in..         
c140: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
c150: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d  'what-if' mode..
c160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c170: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c180: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
c190: 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b  yKey key = rootK
c1a0: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey.OpenSubKey(..
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1c0: 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20      subKeyName, 
c1d0: 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a  whatIf ? false :
c1e0: 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20   writable);.... 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c200: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75  eturn (key != nu
c210: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
c220: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d             new M
c230: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b  ockRegistryKey(k
c240: 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73  ey, whatIf, fals
c250: 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c  e, false) : null
c260: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
c270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
c2d0: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
c2e0: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
c2f0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
c300: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c310: 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67  c static MockReg
c320: 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65 53  istryKey CreateS
c330: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
c340: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
c350: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
c360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c370: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
c380: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
c390: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
c3a0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
c3b0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
c3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c3d0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c3e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c3f0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
c400: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c420: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c440: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c460: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
c470: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
c480: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
c4b0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
c4c0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
c4d0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f               "ro
c4f0: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62  otKey = {0}, sub
c500: 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d  KeyName = {1}",.
c510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c520: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
c530: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f  lay(rootKey), Fo
c540: 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e  rDisplay(subKeyN
c550: 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
c580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c590: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
c5a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c5d0: 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20         // HACK: 
c5e0: 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65  Always open a ke
c5f0: 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  y, rather than c
c600: 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e  reating one when
c610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c620: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
c630: 70 65 72 61 74 69 6e 67 20 69 6e 20 27 77 68 61  perating in 'wha
c640: 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20  t-if' mode...   
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c660: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c670: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68 61           if (wha
c680: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
c690: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70   // HACK: Attemp
c6e0: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70  t to open the sp
c6f0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e  ecified sub-key.
c700: 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20    If..          
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c720: 20 20 20 20 20 20 20 74 68 69 73 20 66 61 69 6c         this fail
c730: 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c  s, we will simpl
c740: 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f  y return the roo
c750: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
c760: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
c770: 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73      key itself s
c780: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61  ince no writes a
c790: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20  re allowed in.. 
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
c7c0: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 61  'what-if' mode a
c7d0: 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  nyhow...        
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
c800: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
c810: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
c820: 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75  = rootKey.OpenSu
c830: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
c840: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c860: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
c870: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52   key : new MockR
c8a0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
c8d0: 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  tKey, subKeyName
c8e0: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
c8f0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
c910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c920: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c950: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c960: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
c970: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74     rootKey.Creat
c9a0: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
c9b0: 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c  me), whatIf, fal
c9c0: 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
ca00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ca10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ca20: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca50: 20 20 20 20 73 75 62 4b 65 79 73 43 72 65 61 74      subKeysCreat
ca60: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
ca70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ca80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ca90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
caa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cae0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
caf0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
cb00: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
cb10: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
cb20: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
cb30: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
cb40: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
cb50: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
cb60: 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
cb80: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
cb90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cba0: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
cbb0: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
cbc0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
cbd0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
cbe0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
cbf0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
cc00: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
cc10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cc20: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
cc30: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
cc60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
cc70: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
cc90: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
cca0: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
ccb0: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccd0: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
cce0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
ccf0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
cd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd10: 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b            "rootK
cd20: 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79  ey = {0}, subKey
cd30: 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  Name = {1}",..  
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
cd60: 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69  (rootKey), ForDi
cd70: 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65  splay(subKeyName
cd80: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
cda0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdc0: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65    rootKey.Delete
cdf0: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
ce00: 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
ce10: 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  g);....         
ce20: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
ce30: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
ce40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ce50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ce60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cea0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
ceb0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
cec0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
ced0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
cee0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
cef0: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
cf00: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
cf10: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
cf20: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
cf30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf40: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
cf50: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
cf60: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
cf70: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
cf80: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
cf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cfa0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
cfb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cfc0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
cfd0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cff0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
d000: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
d010: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
d020: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
d030: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
d040: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
d050: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
d080: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
d090: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0b0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
d0c0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
d0d0: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
d100: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
d110: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
d120: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d130: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
d140: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d160: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75  rootKey.DeleteSu
d190: 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e  bKeyTree(subKeyN
d1a0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
d1b0: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
d1c0: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
d1d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d1e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d230: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
d240: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
d250: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
d260: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
d270: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
d280: 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75  c string[] GetSu
d290: 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20  bKeyNames(..    
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
d2b0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
d2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d2d0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d330: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d350: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
d360: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
d370: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d380: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d390: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d3a0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d3b0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d3c0: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d3e0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d3f0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d400: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46    "key = {0}", F
d430: 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c  orDisplay(key)),
d440: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
d450: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d460: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
d470: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
d480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
d4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
d4f0: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
d500: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
d510: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
d520: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d530: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47   static object G
d540: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
d550: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d560: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
d5a0: 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75  ject defaultValu
d5b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d5c0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
d5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5e0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d620: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
d630: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d640: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
d650: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
d660: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
d670: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
d680: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
d690: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
d6a0: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
d6b0: 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
d6d0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
d6e0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
d6f0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d710: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20      "key = {0}, 
d720: 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61  name = {1}, defa
d730: 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c  ultValue = {2}",
d740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d750: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
d760: 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69  play(key), ForDi
d770: 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20  splay(name),..  
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d790: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
d7a0: 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c  (defaultValue)),
d7b0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
d7c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d7d0: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
d7e0: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65  etValue(name, de
d7f0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20  faultValue);..  
d800: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
d810: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
d820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
d870: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
d880: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
d890: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
d8a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
d8b0: 74 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75  tic void SetValu
d8c0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d8d0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
d8e0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
d8f0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d900: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
d910: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
d920: 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alue,..         
d930: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
d940: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
d950: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
d960: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d970: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
d980: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d990: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
d9a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
d9b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d9c0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
d9d0: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d9e0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d9f0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
da00: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
da10: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
da20: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
da30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
da40: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
da50: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
da60: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da80: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
da90: 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c   name = {1}, val
daa0: 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  ue = {2}",..    
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dac0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b      ForDisplay(k
dad0: 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ey), ForDisplay(
dae0: 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61  name), ForDispla
daf0: 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20  y(value)),..    
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
db20: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
db30: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
db40: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
db50: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74           key.Set
db60: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75  Value(name, valu
db70: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
db80: 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73         keyValues
db90: 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  Set++;..        
dba0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
dbb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
dc00: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
dc10: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
dc20: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
dc30: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
dc40: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
dc50: 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d  id DeleteValue(.
dc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc70: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
dc80: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
dc90: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
dca0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
dcb0: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
dcc0: 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
dcd0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
dce0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
dcf0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
dd00: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
dd10: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
dd20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dd30: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
dd40: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
dd60: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
dd70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
dd80: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
dda0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
ddb0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
ddc0: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
ddf0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
de00: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
de10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de20: 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20           "key = 
de30: 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22  {0}, name = {1}"
de40: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79  , ForDisplay(key
de50: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
de60: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
de70: 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74  isplay(name)), t
de80: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
de90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dea0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61      key.DeleteVa
ded0: 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f  lue(name, throwO
dee0: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20  nMissing);....  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
df00: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b  yValuesDeleted++
df10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
df30: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
df40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
df50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
df60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
df70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
dfb0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74        #region St
dfc0: 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a  ringList Class..
dfd0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
dfe0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72  sealed class Str
dff0: 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73  ingList : List<s
e000: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
e010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
e020: 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
e030: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
e040: 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20      : base()..  
e050: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
e070: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
e080: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
e090: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
e0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e0f0: 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49  lic StringList(I
e100: 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e  Enumerable<strin
e110: 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a  g> collection)..
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f  : base(collectio
e140: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
e150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e160: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
e170: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
e180: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e190: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
e1a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
e1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
e200: 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74  egion StringDict
e210: 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20  ionary Class..  
e220: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e230: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
e240: 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69  gDictionary : Di
e250: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
e260: 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20   string>..      
e270: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e280: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69   public StringDi
e290: 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20  ctionary()..    
e2a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e2b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
e2c0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
e2d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e2e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
e2f0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
e300: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e350: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65        #region Ve
e360: 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d  rsionList Class.
e370: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
e380: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65   sealed class Ve
e390: 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74  rsionList : List
e3a0: 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20  <Version>..     
e3b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e3c0: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
e3d0: 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
e3e0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29          : base()
e3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e410: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
e420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
e440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e480: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
e490: 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
e4a0: 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c  ist(IEnumerable<
e4b0: 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74  Version> collect
e4c0: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
e4d0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c        : base(col
e4e0: 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  lection)..      
e4f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e500: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e510: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e520: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e530: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e540: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e550: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e590: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e5a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
e5b0: 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20  ionMap Class..  
e5c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e5d0: 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69  aled class Versi
e5e0: 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61  onMap : Dictiona
e5f0: 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69  ry<string, Versi
e600: 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20  onList>..       
e610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e620: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61  public VersionMa
e630: 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  p()..           
e640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e650: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
e660: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
e670: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
e680: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
e690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
e6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
e6f0: 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43  region Package C
e700: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e  lass..        in
e710: 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c  ternal sealed cl
e720: 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20  ass Package..   
e730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e740: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
e750: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
e760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e770: 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20  lic Package().. 
e780: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e7a0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
e7b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e7c0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
e7d0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
e7e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e820: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e830: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
e840: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
e850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
e860: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
e870: 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  e assemblyName;.
e880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e890: 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  lic AssemblyName
e8a0: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20   AssemblyName.. 
e8b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
e8d0: 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d  t { return assem
e8e0: 62 6c 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  blyName; }..    
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
e900: 7b 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  { assemblyName =
e910: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
e920: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e930: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e980: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e990: 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73  te bool globalAs
e9a0: 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20  semblyCache;..  
e9b0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
e9c0: 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65   bool GlobalAsse
e9d0: 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20  mblyCache..     
e9e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e9f0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ea00: 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73  return globalAss
ea10: 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20  emblyCache; }.. 
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ea30: 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d  et { globalAssem
ea40: 62 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65  blyCache = value
ea50: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ea60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ea70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ea80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eab0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eac0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
ead0: 64 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20  d packageId;..  
eae0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
eaf0: 20 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d   Guid PackageId.
eb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63  get { return pac
eb30: 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  kageId; }..     
eb40: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
eb50: 20 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c   packageId = val
eb60: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
eb70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
eb80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
eb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ebd0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
ebe0: 75 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a  uid serviceId;..
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ec00: 69 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49  ic Guid ServiceI
ec10: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
ec20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ec30: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
ec40: 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20  erviceId; }..   
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
ec60: 20 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76   { serviceId = v
ec70: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
ec80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ec90: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ece0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ecf0: 20 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65   Guid dataSource
ed00: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
ed10: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
ed20: 61 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  aSourceId..     
ed30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ed40: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ed50: 72 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63  return dataSourc
ed60: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
ed70: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61          set { da
ed80: 74 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c  taSourceId = val
ed90: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
eda0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
edb0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
edc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ee00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
ee10: 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72  uid dataProvider
ee20: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
ee30: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
ee40: 61 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20  aProviderId..   
ee50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
ee70: 7b 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f  { return dataPro
ee80: 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20  viderId; }..    
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
eea0: 7b 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  { dataProviderId
eeb0: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
eec0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
eed0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
eee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ef20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ef30: 76 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74  vate Guid adoNet
ef40: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20  TechnologyId;.. 
ef50: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
ef60: 63 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63  c Guid AdoNetTec
ef70: 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20  hnologyId..     
ef80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef90: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
efa0: 72 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63  return adoNetTec
efb0: 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20  hnologyId; }..  
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
efd0: 74 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  t { adoNetTechno
efe0: 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20  logyId = value; 
eff0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
f010: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
f020: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
f030: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
f040: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f090: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
f0a0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73  nfiguration Clas
f0b0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
f0c0: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
f0d0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  Configuration.. 
f0e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f0f0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
f100: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
f110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f120: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
f130: 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20  Switch = '-';.. 
f140: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f150: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c  te const char Al
f160: 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a  tSwitch = '/';..
f170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f1d0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
f1e0: 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20  readonly char[] 
f1f0: 53 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d  SwitchChars = {.
f200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f210: 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74   Switch, AltSwit
f220: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
f230: 7d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  };..            
f240: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
f250: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f2a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
f2b0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
f2c0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
f2d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 43         private C
f2e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20  onfiguration(.. 
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
f300: 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
f310: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f320: 20 20 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c     string logFil
f330: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
f340: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
f350: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
f360: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
f370: 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d  g coreFileName,.
f380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f390: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
f3a0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
f3b0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
f3c0: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d  signerFileName,.
f3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3e0: 20 73 74 72 69 6e 67 20 72 65 67 69 73 74 72 79   string registry
f3f0: 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
f400: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f410: 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 2c 0d   configVersion,.
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f430: 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f   string vsVersio
f440: 6e 53 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20  nSuffix,..      
f450: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f460: 20 64 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a 20   debugFormat,.. 
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f480: 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61  tring traceForma
f490: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
f4a0: 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
f4b0: 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a   installFlags,..
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
f4e0: 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  bugPriority,..  
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
f500: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
f510: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
f520: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
f530: 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
f540: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f550: 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20 20 20  install,..      
f560: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
f570: 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
f580: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75         bool noRu
f590: 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20  ntimeVersion,.. 
f5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f5b0: 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a  ool noDesktop,..
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5d0: 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d  bool noCompact,.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f5f0: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c   bool noNetFx20,
f600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f610: 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35    bool noNetFx35
f620: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f630: 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34     bool noNetFx4
f640: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
f650: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
f660: 34 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45,..           
f670: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
f680: 30 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  05,..           
f690: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
f6a0: 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08,..           
f6b0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
f6c0: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10,..           
f6d0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
f6e0: 31 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  12,..           
f6f0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
f700: 31 33 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  13,..           
f710: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63       bool noTrac
f720: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
f730: 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f      bool noConso
f740: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
f750: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c       bool noLog,
f760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f770: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
f780: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
f790: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
f7a0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
f7b0: 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67        bool debug
f7c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f7d0: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
f7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f7f0: 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a    bool confirm..
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
f820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f830: 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20    this.assembly 
f840: 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  = assembly;..   
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f860: 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  s.logFileName = 
f870: 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  logFileName;..  
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f890: 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64  is.directory = d
f8a0: 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20  irectory;..     
f8b0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f8c0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63  coreFileName = c
f8d0: 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f8f0: 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  is.linqFileName 
f900: 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  = linqFileName;.
f910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f920: 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69   this.designerFi
f930: 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65  leName = designe
f940: 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  rFileName;..    
f950: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f960: 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  .registryVersion
f970: 20 3d 20 72 65 67 69 73 74 72 79 56 65 72 73 69   = registryVersi
f980: 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
f990: 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 67       this.config
f9a0: 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67  Version = config
f9b0: 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
f9c0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76            this.v
f9d0: 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d  sVersionSuffix =
f9e0: 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
f9f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fa00: 20 20 20 74 68 69 73 2e 64 65 62 75 67 46 6f 72     this.debugFor
fa10: 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72 6d 61  mat = debugForma
fa20: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
fa30: 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 46 6f      this.traceFo
fa40: 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f 72 6d  rmat = traceForm
fa50: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
fa60: 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c       this.instal
fa70: 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c  lFlags = install
fa80: 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
fa90: 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62          this.deb
faa0: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64 65 62  ugPriority = deb
fab0: 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  ugPriority;..   
fac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fad0: 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  s.tracePriority 
fae0: 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  = tracePriority;
faf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fb00: 20 20 74 68 69 73 2e 70 65 72 55 73 65 72 20 3d    this.perUser =
fb10: 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20   perUser;..     
fb20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fb30: 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c  install = instal
fb40: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
fb50: 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d      this.wow64 =
fb60: 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20   wow64;..       
fb70: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fb80: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
fb90: 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
fba0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
fbb0: 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74      this.noDeskt
fbc0: 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  op = noDesktop;.
fbd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fbe0: 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20   this.noCompact 
fbf0: 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20  = noCompact;..  
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fc10: 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e  is.noNetFx20 = n
fc20: 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20  oNetFx20;..     
fc30: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fc40: 6e 6f 4e 65 74 46 78 33 35 20 3d 20 6e 6f 4e 65  noNetFx35 = noNe
fc50: 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx35;..        
fc60: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
fc70: 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78  etFx40 = noNetFx
fc80: 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40;..           
fc90: 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
fca0: 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34 35 3b  x45 = noNetFx45;
fcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fcc0: 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 35 20    this.noVs2005 
fcd0: 3d 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20  = noVs2005;..   
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fcf0: 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56  s.noVs2008 = noV
fd00: 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20  s2008;..        
fd10: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
fd20: 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30  s2010 = noVs2010
fd30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fd40: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 32     this.noVs2012
fd50: 20 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20   = noVs2012;..  
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fd70: 69 73 2e 6e 6f 56 73 32 30 31 33 20 3d 20 6e 6f  is.noVs2013 = no
fd80: 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20 20  Vs2013;..       
fd90: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fda0: 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65 3b  Trace = noTrace;
fdb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fdc0: 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c 65    this.noConsole
fdd0: 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20   = noConsole;.. 
fde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fdf0: 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f  his.noLog = noLo
fe00: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
fe10: 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77 4f 6e      this.throwOn
fe20: 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f 77 4f  Missing = throwO
fe30: 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20  nMissing;..     
fe40: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fe50: 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b  whatIf = whatIf;
fe60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fe70: 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d 20 64    this.debug = d
fe80: 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  ebug;..         
fe90: 20 20 20 20 20 20 20 74 68 69 73 2e 76 65 72 62         this.verb
fea0: 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a  ose = verbose;..
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fec0: 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63  this.confirm = c
fed0: 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
fee0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
fef0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
ff00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ff60: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
ff70: 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d   Static Methods.
ff80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ff90: 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
ffa0: 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e   GetDefaultFileN
ffb0: 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ames(..         
ffc0: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
ffd0: 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
fff0: 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c  f string coreFil
10000 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
10010 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
10020 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c  ng linqFileName,
10030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10040 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 65 73    ref string des
10050 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20  ignerFileName.. 
10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
10070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
10080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10090 20 69 66 20 28 74 68 69 73 41 73 73 65 6d 62 6c   if (thisAssembl
100a0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100c0 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
100d0 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
100e0 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44  tory = Path.GetD
100f0 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74 68 69  irectoryName(thi
10100 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69  sAssembly.Locati
10110 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
10120 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
10130 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
10140 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10160 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
10170 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
10180 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  eFileName = Path
10190 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
101a0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
101b0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
101c0 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  er.CoreFileName)
101d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
101e0 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d       linqFileNam
101f0 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
10200 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  (directory,..   
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10220 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46   Installer.LinqF
10230 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
10250 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
10260 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
10270 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
10290 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46  taller.DesignerF
102a0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ileName);..     
102b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
102c0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
10310 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
10320 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43  te static bool C
10330 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20  heckOption(..   
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
10350 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20 20   string arg..   
10360 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
10370 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
10390 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 61  tring result = a
103a0 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rg;....         
103b0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
103c0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
103d0 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20  (result))..     
103e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10400 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10410 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
10420 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65  E: Remove all le
10430 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68 61  ading switch cha
10440 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs...           
10450 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10470 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c 74   result = result
10480 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74 63  .TrimStart(Switc
10490 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20  hChars);....    
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
104c0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
104d0 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73 20   How many chars 
104e0 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20  were removed?.. 
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10500 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10510 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63             int c
10520 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74  ount = arg.Lengt
10530 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74  h - result.Lengt
10540 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  h;....          
10550 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74    // NOTE: Was t
10580 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f 6e  here at least on
10590 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e?..            
105a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
105b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105c0 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a  if (count > 0)..
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10600 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10610 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
10620 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20  TE: Ok, replace 
10630 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a  their original..
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10650 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
10660 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20   argument...    
10670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10680 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
10690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106a0 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d  arg = result;...
106b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
106c0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106e0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65       // NOTE: Ye
106f0 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77 69  s, this is a swi
10700 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tch...          
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10730 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10740 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
10750 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10780 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
10790 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
107a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
10800 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
10810 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69  c bool MatchOpti
10820 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
10830 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 2c       string arg,
10840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10850 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d    string option.
10860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10870 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
10880 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10890 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20 6e     if ((arg == n
108a0 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20  ull) || (option 
108b0 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
108d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
108e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108f0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f  return String.Co
10900 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f 70  mpare(arg, 0, op
10910 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20  tion, 0,..      
10920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
10930 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e 67  g.Length, String
10940 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
10950 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
10960 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
10970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10980 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
109c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
109d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
109e0 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42  tic bool? ParseB
109f0 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20 20  oolean(..       
10a00 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10a10 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20  text..          
10a20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
10a30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10a40 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
10a50 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
10a60 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
10a70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a90 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a   bool value;....
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ab0 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79      if (bool.Try
10ac0 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74 20  Parse(text, out 
10ad0 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  value))..       
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10af0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
10b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10b20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
10b30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
10b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b90 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
10ba0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
10bb0 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45 6e  c object ParseEn
10bc0 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
10bd0 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54 79       Type enumTy
10be0 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe,..           
10bf0 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
10c00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10c10 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a     bool noCase..
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
10c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c50 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65 20    if ((enumType 
10c60 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75  == null) || !enu
10c70 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20  mType.IsEnum).. 
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
10ca0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10cb0 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
10cc0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78  sNullOrEmpty(tex
10cd0 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
10ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
10d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d30 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73  return Enum.Pars
10d40 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78 74  e(enumType, text
10d50 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20  , noCase);..    
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
10d80 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10da0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10dc0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10de0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10df0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10e00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10e10 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
10e20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10e30 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
10e40 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10e90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
10ea0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74  region Public St
10eb0 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
10ec0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
10ed0 20 73 74 61 74 69 63 20 43 6f 6e 66 69 67 75 72   static Configur
10ee0 61 74 69 6f 6e 20 43 72 65 61 74 65 44 65 66 61  ation CreateDefa
10ef0 75 6c 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ult()..         
10f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10f10 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
10f20 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a  ectory = null;..
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f40 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
10f50 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ame = null;..   
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10f70 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing linqFileName
10f80 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
10f90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10fa0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
10fb0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
10fd0 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73  DefaultFileNames
10fe0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
10ff0 20 20 20 20 20 20 20 72 65 66 20 64 69 72 65 63         ref direc
11000 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69  tory, ref coreFi
11010 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71  leName, ref linq
11020 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11040 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ef designerFileN
11050 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
11060 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11070 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  new Configuratio
11080 6e 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 20  n(thisAssembly, 
11090 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c  null, directory,
110a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110b0 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
110c0 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  me, linqFileName
110d0 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  , designerFileNa
110e0 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d  me, null, null,.
110f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11100 20 20 20 20 20 6e 75 6c 6c 2c 20 54 72 61 63 65       null, Trace
11110 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c  Ops.DebugFormat,
11120 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46   TraceOps.TraceF
11130 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
11140 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
11150 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c 74  allFlags.Default
11160 2c 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  , TracePriority.
11170 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20 20 20 20  Default,..      
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
11190 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
111a0 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72 75 65  ult, false, true
111b0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
111c0 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  false,..        
111d0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
111e0 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
111f0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
11200 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
11210 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
11220 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20           false, 
11230 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
11240 6c 73 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65  lse, false, true
11250 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 0d 0a  , true, false,..
11260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11270 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65      false, false
11280 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
11290 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
112a0 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
112e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
112f0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
11300 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
11310 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
11320 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
11330 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  ic static bool F
11340 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20  romArgs(..      
11350 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
11360 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20  [] args,..      
11370 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
11380 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
11390 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66          ref Conf
113a0 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
113b0 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
113c0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
113d0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
113e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
113f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
11410 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
11420 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11430 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
11440 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  gs == null)..   
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11460 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
11470 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11480 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
11490 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
114a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
114c0 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e  figuration = Con
114d0 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74  figuration.Creat
114e0 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20  eDefault();.... 
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11500 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20     int length = 
11510 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  args.Length;....
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11530 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
11540 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
11550 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  length; index++)
11560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11570 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11590 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72   string arg = ar
115a0 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  gs[index];....  
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115e0 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20    // NOTE: Skip 
115f0 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 74 68 61  any argument tha
11600 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f 72  t is null (?) or
11610 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20   an empty..     
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11630 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69     //       stri
11640 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
11660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11670 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
11680 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
11690 79 28 61 72 67 29 29 0d 0a 20 20 20 20 20 20 20  y(arg))..       
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
116c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
116d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
11700 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 6d  e are going to m
11710 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67 69 6e  odify the origin
11720 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20  al argument..   
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11740 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79       //       by
11750 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c 65   removing any le
11760 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68 61  ading option cha
11770 72 61 63 74 65 72 73 3b 0d 0a 20 20 20 20 20 20  racters;..      
11780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11790 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65    //       there
117a0 66 6f 72 65 2c 20 77 65 20 75 73 65 20 61 20 6e  fore, we use a n
117b0 65 77 20 73 74 72 69 6e 67 20 74 6f 20 68 6f 6c  ew string to hol
117c0 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  d the..         
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
117e0 2f 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64  /       modified
117f0 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20   argument...    
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11830 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d 20  string newArg = 
11840 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  arg;....        
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11860 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
11880 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70  OTE: All the sup
11890 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
118a0 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74  ine options must
118b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
118c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
118d0 20 20 20 62 65 67 69 6e 20 77 69 74 68 20 61 6e     begin with an
118e0 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65   option characte
118f0 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73 0d  r (e.g. a minus.
11900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11910 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11920 20 20 6f 72 20 66 6f 72 77 61 72 64 20 73 6c 61    or forward sla
11930 73 68 29 3b 20 61 74 74 65 6d 70 74 20 74 6f 20  sh); attempt to 
11940 76 61 6c 69 64 61 74 65 20 74 68 61 74 0d 0a 20  validate that.. 
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11970 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c  now.  If we fail
11980 20 69 6e 20 73 74 72 69 63 74 20 6d 6f 64 65 2c   in strict mode,
11990 20 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a 20   we are done;.. 
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
119c0 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20  otherwise, just 
119d0 73 6b 69 70 20 74 68 69 73 20 61 72 67 75 6d 65  skip this argume
119e0 6e 74 20 61 6e 64 20 61 64 76 61 6e 63 65 0d 0a  nt and advance..
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
11a10 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e 65   to the next one
11a20 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11a30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a50 20 20 20 20 20 20 20 69 66 20 28 21 43 68 65 63         if (!Chec
11a60 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41  kOption(ref newA
11a70 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rg))..          
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
11ab0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
11ac0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
11af0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
11b00 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
11b10 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
11b40 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
11b50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20     "Unsupported 
11b80 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67  command line arg
11b90 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ument: {0}",..  
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
11bc0 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20  rDisplay(arg)), 
11bd0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
11be0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11c00 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11c30 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
11c60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11c70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cb0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c       // NOTE: Al
11cc0 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  l the supported 
11cd0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
11ce0 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20  ions must..     
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 76 65     //       have
11d10 20 61 20 76 61 6c 75 65 3b 20 74 68 65 72 65 66   a value; theref
11d20 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f 20  ore, attempt to 
11d30 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  advance..       
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20   //       to it 
11d60 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c  now.  If we fail
11d70 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a  , we are done...
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a      index++;....
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dd0 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65          if (inde
11de0 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20 20  x >= length)..  
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
11e30 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
11e40 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
11e70 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
11e80 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
11eb0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
11ec0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 20 20 20 20 20 20 20 20 20 20 20 22 4d 69 73 73             "Miss
11ef0 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f 70  ing value for op
11f00 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  tion: {0}",..   
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
11f30 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74  Display(arg)), t
11f40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
11f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11f70 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11fa0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fe0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
12030 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65  he textual value
12040 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64   of this command
12050 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20   line..         
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12070 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 0d  /       option..
12080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12090 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120b0 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
120c0 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d   = args[index];.
120d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
120e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12100 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
12110 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68  Figure out which
12120 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
12130 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20 20  tion this is..  
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12150 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28        //       (
12160 62 61 73 65 64 20 6f 6e 20 61 20 70 61 72 74 69  based on a parti
12170 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29 20 61  al name match) a
12180 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a 20 20 20  nd then try..   
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
121b0 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20 74   interpret the t
121c0 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20  extual value as 
121d0 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20  the correct..   
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 79       //       ty
12200 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe...           
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12230 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61 74           if (Mat
12240 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
12250 20 22 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22   "configVersion"
12260 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
12270 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
122a0 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56  guration.configV
122b0 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a  ersion = text;..
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122f0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
12300 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
12310 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20  "confirm"))..   
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
12360 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
12370 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12390 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
123a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
123f0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
12400 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
12430 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
12440 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
12450 2c 0d 0a 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 20 20 20 20                  
12470 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
12480 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
12490 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124b0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
124c0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
124d0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
124e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
12510 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
12520 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12540 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12550 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12580 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
125b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
125e0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12600 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12620 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12630 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28  tion.confirm = (
12640 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12660 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12680 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
12690 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f  tion(newArg, "co
126a0 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  reFileName")).. 
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126e0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
126f0 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.coreFileName
12700 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
12740 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
12750 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67  n(newArg, "debug
12760 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12790 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
127a0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
127b0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
127c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
127e0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
127f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
12840 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
12850 0a 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 20 20 20 20 20 20                  
12870 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
12880 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
12890 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
128c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
128d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12900 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
12910 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
12920 7d 22 2c 0d 0a 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 20 20                  
12940 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
12950 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
12960 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
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 20 20 20 20 20 20 20 20 20                  
12990 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
129a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
129b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129c0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
129d0 0d 0a 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 20 20 20 20 20                  
129f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12a00 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
12a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12a50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12a70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
12a80 75 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ug = (bool)value
12a90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12aa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ac0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
12ad0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
12ae0 67 2c 20 22 64 65 62 75 67 46 6f 72 6d 61 74 22  g, "debugFormat"
12af0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
12b00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
12b30 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f  guration.debugFo
12b40 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20  rmat = text;..  
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
12b70 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d  ps.DebugFormat =
12b80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
12b90 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bd0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
12be0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65  tion(newArg, "de
12bf0 62 75 67 50 72 69 6f 72 69 74 79 22 29 29 0d 0a  bugPriority"))..
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
12c40 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28  lue = ParseEnum(
12c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72    typeof(TracePr
12c80 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74  iority), text, t
12c90 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rue);....       
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
12cc0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
12d10 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
12d20 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
12d50 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
12d60 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
12d70 2c 0d 0a 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 20 20 20 20                  
12d90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
12da0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
12db0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
12de0 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31  id {0} value: {1
12df0 7d 22 2c 0d 0a 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 20 20                  
12e10 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
12e20 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
12e30 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
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 20 20 20 20 20 20 20 20 20                  
12e60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
12e70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
12ea0 0d 0a 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 20 20 20 20 20                  
12ec0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12ed0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
12f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12f20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12f40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
12f50 75 67 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72  ugPriority = (Tr
12f60 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75  acePriority)valu
12f70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 50 72  TraceOps.DebugPr
12fa0 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75  iority = configu
12fb0 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f  ration.debugPrio
12fc0 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
12fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ff0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
13000 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13010 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72  ewArg, "designer
13020 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13060 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
13070 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
13080 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  me = text;..    
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
130c0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
130d0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72  ion(newArg, "dir
130e0 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20  ectory"))..     
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13120 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
13130 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74  directory = text
13140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13160 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49   // NOTE: *SPECI
13190 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68  AL* Must refresh
131a0 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d   the file names.
131b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
131d0 20 20 20 20 20 20 68 65 72 65 20 62 65 63 61 75        here becau
131e0 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  se the underlyin
131f0 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  g directory..   
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
13220 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a    has changed...
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
13270 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng coreFileName 
13280 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
13290 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  coreFileName;...
132a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
132c0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
132d0 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e  rEmpty(coreFileN
132e0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e         coreFileN
13310 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
13320 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e  leName(coreFileN
13330 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
13360 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
13370 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  reFileName))..  
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
133a0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  reFileName = Ins
133b0 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e  taller.CoreFileN
133c0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
133f0 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  n.coreFileName =
13400 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
13440 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c  rectory, coreFil
13450 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
13480 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  nqFileName = con
13490 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
134a0 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
134d0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
134e0 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
134f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13510 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d    linqFileName =
13520 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
13530 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  e(linqFileName);
13540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
13570 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c  lOrEmpty(linqFil
13580 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135a0 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c           linqFil
135b0 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65  eName = Installe
135c0 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  r.LinqFileName;.
135d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
135f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e  onfiguration.lin
13600 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  qFileName = Path
13610 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
13640 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
13650 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ry, linqFileName
13660 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13680 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65    string designe
13690 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66  rFileName = conf
136a0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
136b0 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  erFileName;.... 
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
136e0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
136f0 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c  mpty(designerFil
13700 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65           designe
13730 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
13740 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73  .GetFileName(des
13750 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
13760 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13780 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
13790 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72  OrEmpty(designer
137a0 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69              desi
137d0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49  gnerFileName = I
137e0 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65  nstaller.Designe
137f0 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  rFileName;....  
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
13820 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72  uration.designer
13830 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
13840 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20  Combine(..      
13850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13860 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
13870 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
13880 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  y, designerFileN
13890 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
138a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
138b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
138c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
138d0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
138e0 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22  ewArg, "install"
138f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13900 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
13930 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
13940 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13970 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
139c0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
139d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
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 20 20 20 20 20 20 20                  
13a00 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
13a10 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
13a20 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13a50 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
13a60 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a90 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
13aa0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
13ab0 22 2c 0d 0a 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 20 20 20                  
13ad0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
13ae0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
13af0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13b30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
13b60 0a 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 20 20 20 20 20 20                  
13b80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
13b90 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bb0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
13bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13c00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74  nfiguration.inst
13c10 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  all = (bool)valu
13c20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
13c30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c50 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13c60 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13c70 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67  rg, "installFlag
13c80 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s"))..          
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
13cc0 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ect value = Pars
13cd0 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20  eEnum(..        
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 49          typeof(I
13d00 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65  nstallFlags), te
13d10 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
13d40 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
13d90 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
13da0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
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 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
13de0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
13df0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
13e20 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
13e30 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13e60 49 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20  Invalid install 
13e70 66 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d  flags value: {0}
13e80 22 2c 0d 0a 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 20 20 20                  
13ea0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
13eb0 61 79 28 74 65 78 74 29 29 2c 20 74 72 61 63 65  ay(text)), trace
13ec0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13ef0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13f20 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f50 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f90 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13fa0 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61  ation.installFla
13fb0 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61  gs = (InstallFla
13fc0 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  gs)value;..     
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
14000 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14010 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71  on(newArg, "linq
14020 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14070 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  n.linqFileName =
14080 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
140b0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
140c0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
140d0 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69 6c 65  newArg, "logFile
140e0 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f  configuration.lo
14130 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74  gFileName = text
14140 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14150 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
14180 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
14190 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29  g, "noCompact"))
141a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
141b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
141e0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
141f0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
14220 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
14270 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14280 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
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 20 20 20 20 20 20 20 20 20                  
142b0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
142c0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
142d0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14300 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
14310 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14340 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
14350 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
14360 0d 0a 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 20 20 20 20 20                  
14380 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14390 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
143a0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
143d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
143e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 20 20 20 20 20 20 20                  
14430 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
14440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14460 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14480 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
144b0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70  iguration.noComp
144c0 61 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  act = (bool)valu
144d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
144e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14500 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14510 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14520 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29  rg, "noConsole")
14530 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14540 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
14570 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
14580 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
145b0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
14600 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
14610 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
14650 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
14660 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14690 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
146a0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
146e0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
146f0 2c 0d 0a 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 20 20 20 20                  
14710 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
14720 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
14730 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14790 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
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 20 20 20 20 20 20 20                  
147c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
147d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147f0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14810 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14840 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e  figuration.noCon
14850 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  sole = (bool)val
14860 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14890 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
148a0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
148b0 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22  Arg, "noDesktop"
148c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
148d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
14900 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
14910 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14940 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14990 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
149a0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
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 20 20 20 20 20 20 20                  
149d0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
149e0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
149f0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14a20 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
14a30 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
14a70 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
14a80 22 2c 0d 0a 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 20 20 20                  
14aa0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
14ab0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
14ac0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
14b00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
14b30 0a 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 20 20 20 20 20 20                  
14b50 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
14b60 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b80 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
14b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14bd0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65  nfiguration.noDe
14be0 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61  sktop = (bool)va
14bf0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
14c30 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
14c40 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d  wArg, "noLog")).
14c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14c90 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
14ca0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
14cd0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14d20 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
14d30 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d60 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
14d70 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
14d80 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14db0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
14dc0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
14df0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
14e00 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
14e10 0a 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 20 20 20 20 20 20                  
14e30 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14e40 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14e50 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14e80 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
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 20 20 20 20 20 20 20 20 20                  
14ee0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
14ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14f60 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d  guration.noLog =
14f70 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fb0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
14fc0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
14fd0 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a 20 20  noNetFx20"))..  
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
15020 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
15030 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
15060 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
150b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
150c0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
150f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
15100 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
15110 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
15140 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
15150 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
15180 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
15190 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
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 20 20 20 20 20 20 20 20 20                  
151c0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
151d0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
151e0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15200 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15210 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15240 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15270 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152a0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152e0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
152f0 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20  ation.noNetFx20 
15300 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15320 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
15350 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
15360 22 6e 6f 4e 65 74 46 78 33 35 22 29 29 0d 0a 20  "noNetFx35")).. 
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
153b0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
153c0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
153f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15410 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15430 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
15440 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
15450 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
15480 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
15490 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
154a0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
154d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
154e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
15510 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
15520 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
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 20 20 20 20 20 20 20 20                  
15550 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
15560 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
15570 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
155a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
155d0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15670 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
15680 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35  ration.noNetFx35
15690 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
156a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
156b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
156e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
156f0 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a   "noNetFx40"))..
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15710 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
15740 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
15750 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
15780 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
15790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
157d0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
157e0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
15820 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
15830 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15850 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15860 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
15870 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
158a0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
158b0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
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 20 20 20 20 20 20 20                  
158e0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
158f0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
15900 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15930 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
15970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
159a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159c0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15a10 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
15a20 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  0 = (bool)value;
15a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15a40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
15a70 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
15a80 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d  , "noNetFx45")).
15a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15aa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ac0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
15ad0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
15ae0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
15b10 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
15b60 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
15b70 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ba0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
15bb0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
15bc0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15bf0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
15c00 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
15c30 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
15c40 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
15c50 0a 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 20 20 20 20 20 20                  
15c70 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
15c80 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
15c90 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15cc0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
15cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
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 20 20 20 20 20 20 20 20 20                  
15d20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
15d30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15da0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
15db0 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  45 = (bool)value
15dc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15dd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15df0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
15e00 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
15e10 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72  g, "noRuntimeVer
15e20 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20  sion"))..       
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
15e70 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
15e80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
15eb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
15f00 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
15f10 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f30 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
15f40 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
15f50 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
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 20 20 20 20 20 20 20 20                  
15f80 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
15f90 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
15fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fc0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
15fd0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
15fe0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16010 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
16020 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
16030 0d 0a 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 20 20 20 20 20                  
16050 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
16060 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
16090 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
160c0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
160f0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
16140 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  .noRuntimeVersio
16150 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  n = (bool)value;
16160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16190 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
161a0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
161b0 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20  , "noTrace")).. 
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
16200 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
16210 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
16240 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16260 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16290 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
162a0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
162d0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
162e0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
162f0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16320 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
16330 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
16360 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
16370 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
163b0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
163c0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
163f0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16420 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16450 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
16460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164c0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
164d0 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d  ration.noTrace =
164e0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16520 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
16530 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
16540 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20 20 20  noVs2005"))..   
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16590 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
165a0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
165d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16620 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
16630 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
16660 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16670 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16680 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
166b0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
166c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166e0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
166f0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
16700 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
16740 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
16750 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16780 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
167b0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
167e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16810 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16860 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20  tion.noVs2005 = 
16870 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
168c0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
168d0 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20  oVs2008"))..    
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
16920 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
16930 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
16960 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
169b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
169c0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
169f0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
16a00 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
16a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
16a40 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
16a50 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
16a80 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
16a90 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
16ad0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
16ae0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16b10 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16b40 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
16b70 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16ba0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
16bf0 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28  ion.noVs2008 = (
16c00 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
16c50 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
16c60 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20 20 20  Vs2010"))..     
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
16cb0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
16cc0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
16cf0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d30 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
16d40 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16d50 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d70 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
16d80 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
16d90 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
16da0 0a 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 20 20 20 20 20 20                  
16dc0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
16dd0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
16de0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
16e10 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
16e20 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
16e50 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
16e60 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
16e70 29 2c 0d 0a 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 20 20 20                  
16e90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
16ea0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
16ed0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
16f00 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16f30 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16f80 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 62  on.noVs2010 = (b
16f90 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
16fd0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
16fe0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
16ff0 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20 20 20  s2012"))..      
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
17040 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
17050 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
17080 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
170d0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
170e0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17100 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
17110 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
17120 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
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 20 20 20 20 20 20 20                  
17150 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17160 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
17170 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17190 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
171a0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
171b0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
171e0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
171f0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
17200 2c 0d 0a 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 20 20 20 20                  
17220 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17230 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
17260 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
17290 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
172c0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
17310 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28 62 6f  n.noVs2012 = (bo
17320 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17340 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
17360 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
17370 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
17380 32 30 31 33 22 29 29 0d 0a 20 20 20 20 20 20 20  2013"))..       
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
173d0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
173e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17400 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
17410 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17450 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
17460 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
17470 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
174a0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
174b0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
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 20 20 20 20 20 20 20 20                  
174e0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
174f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
17500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
17530 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
17540 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
17570 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
17580 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
17590 0d 0a 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 20 20 20 20 20                  
175b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
175c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
175f0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17610 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
17620 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
17650 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
176a0 2e 6e 6f 56 73 32 30 31 33 20 3d 20 28 62 6f 6f  .noVs2013 = (boo
176b0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
176f0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
17700 6e 28 6e 65 77 41 72 67 2c 20 22 70 65 72 55 73  n(newArg, "perUs
17710 65 72 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  er"))..         
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
17750 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
17760 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
17770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17790 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
177a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
177c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177e0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
177f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
17800 28 0d 0a 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 20 20 20 20                  
17820 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
17830 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
17840 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
17850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
17880 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
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 20 20 20 20 20 20 20                  
178b0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
178c0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
178d0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178f0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
17900 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
17910 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
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 20 20 20 20 20 20 20                  
17940 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
17950 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
17980 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
179b0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
179e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70   configuration.p
17a30 65 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29 76  erUser = (bool)v
17a40 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17a70 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
17a80 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
17a90 65 77 41 72 67 2c 20 22 72 65 67 69 73 74 72 79  ewArg, "registry
17aa0 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ac0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
17af0 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  .registryVersion
17b00 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
17b40 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
17b50 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69 63  n(newArg, "stric
17b60 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
17ba0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
17bb0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
17bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
17be0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
17bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
17c40 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
17c50 0d 0a 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 20 20 20 20 20                  
17c70 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
17c80 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
17c90 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
17cd0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
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 20 20 20 20 20 20 20 20                  
17d00 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
17d10 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
17d20 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d40 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
17d50 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17d60 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17da0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dc0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
17dd0 29 0d 0a 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 20 20 20 20                  
17df0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
17e00 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17e30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17e50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74  // NOTE: Allow t
17ea0 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
17eb0 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20  arguments to..  
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
17ee0 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20     override the 
17ef0 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74  "strictness" set
17f00 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ting..          
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 69    //       provi
17f30 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
17f40 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76  strict = (bool)v
17f90 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17fc0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
17fd0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
17fe0 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d  ewArg, "throwOnM
17ff0 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 20  issing"))..     
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18030 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
18040 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
18050 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
18080 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
180d0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
180e0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
18110 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
18120 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
18130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
18160 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
18170 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18190 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
181a0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
181b0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
181e0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
181f0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
18200 29 2c 0d 0a 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 20 20 20                  
18220 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
18230 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
18260 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18290 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
182c0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
18310 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  on.throwOnMissin
18320 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  g = (bool)value;
18330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18340 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18360 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
18370 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
18380 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29  , "traceFormat")
18390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
183a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
183d0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72  uration.traceFor
183e0 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  mat = text;..   
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18400 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
18410 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  s.TraceFormat = 
18420 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
18430 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  aceFormat;..    
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18470 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
18480 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
18490 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  cePriority")).. 
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
184c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184d0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
184e0 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
184f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69   typeof(TracePri
18520 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72  ority), text, tr
18530 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
18560 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
185b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
185c0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
185f0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
18600 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
18610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18630 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
18640 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
18650 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
18680 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d  d {0} value: {1}
18690 22 2c 0d 0a 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 20 20 20                  
186b0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
186c0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
186d0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
18710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18730 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
18740 0a 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 20 20 20 20 20 20                  
18760 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18770 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
187a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
187c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
187e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
187f0 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61  ePriority = (Tra
18800 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65  cePriority)value
18810 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
18830 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69  raceOps.TracePri
18840 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72  ority = configur
18850 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
18860 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18890 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
188a0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
188b0 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29  wArg, "verbose")
188c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
188d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
18900 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
18910 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
18940 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
18990 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
189a0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
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 20 20 20 20 20 20 20 20                  
189d0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
189e0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
189f0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18a20 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
18a30 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
18a70 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
18a80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18aa0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
18ab0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
18ac0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
18b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
18b60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18bd0 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f  figuration.verbo
18be0 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  se = (bool)value
18bf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18c00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
18c30 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
18c40 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75 66  g, "vsVersionSuf
18c50 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20 20  fix"))..        
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18c90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 56  onfiguration.vsV
18ca0 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 74  ersionSuffix = t
18cb0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ce0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
18cf0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
18d00 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 29  wArg, "whatIf"))
18d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
18d50 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
18d60 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
18d90 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
18de0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
18df0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
18e30 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
18e40 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18e70 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
18e80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
18eb0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
18ec0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
18ed0 0d 0a 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 20 20 20 20 20                  
18ef0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
18f00 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
18f10 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18f40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
18f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 20 20 20 20 20 20 20                  
18fa0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
18fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
19020 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
19030 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
19040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19050 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
19080 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
19090 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20   "wow64"))..    
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
190e0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
190f0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
19120 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19160 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
19170 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
19180 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
191b0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
191c0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
191d0 0d 0a 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 20 20 20 20 20                  
191f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
19200 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
19210 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
19240 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
19250 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
19290 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
192a0 29 29 2c 0d 0a 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 20 20                  
192c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
192d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19300 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
19330 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
19360 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
193b0 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f  ion.wow64 = (boo
193c0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
19400 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
19410 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
19440 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
19450 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19480 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
19490 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
194a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
194d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  "Unsupported com
19510 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
19520 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
19550 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
19560 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19580 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
19590 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
195c0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
195e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
195f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19610 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
19620 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19640 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
19650 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
19660 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19670 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19680 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
19690 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
196a0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
196d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
196e0 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
196f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19700 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
19710 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64  = "Failed to mod
19720 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ify configuratio
19730 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
19740 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19750 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19760 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
19770 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19780 20 20 20 20 20 20 20 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 2f  ////////////////
197c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
197d0 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
197e0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
197f0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
19800 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
19810 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
19820 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20  bool Process(.. 
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
19840 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20  tring[] args,.. 
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
19860 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
19870 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
19890 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
198a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
198b0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
198d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
198f0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
19900 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19910 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
19920 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
19930 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19940 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
19970 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
19980 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
199e0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d  embly assembly =
199f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61   configuration.a
19a00 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20  ssembly;....    
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20  if (assembly == 
19a30 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19a40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
19a70 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e  nvalid assembly.
19a80 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
19a90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19aa0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19ad0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
19ae0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61  figuration.noTra
19af0 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
19b00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
19b30 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d  ration.noLog &&.
19b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
19b60 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
19b70 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
19b80 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  logFileName)).. 
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ba0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bc0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55        // NOTE: U
19bf0 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c  se the default l
19c00 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  og file name... 
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c40 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
19c50 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
19c60 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c  Name = GetLogFil
19c70 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22 29          "trace")
19ca0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19cb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19d10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19d20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
19d30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
19d40 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20  Console)..      
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72   // NOTE: In ver
19db0 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67  bose mode, debug
19dc0 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65   output (that me
19dd0 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ets..           
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19df0 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f   //       the co
19e00 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74  nfigured priorit
19e10 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c  y criteria) will
19e20 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
19e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e40 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61   //       displa
19e50 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f  yed to the conso
19e60 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74  le; otherwise, t
19e70 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e90 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75    //       outpu
19ea0 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68  t (that meets th
19eb0 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69  e configured pri
19ec0 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74     //       crit
19ef0 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69  eria) will be di
19f00 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63  splayed to the c
19f10 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20  onsole...       
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f50 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
19f60 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20  ration.debug).. 
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74    // NOTE: Add t
19fe0 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65  he console trace
19ff0 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65   listener to the
1a000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20    //       list 
1a030 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  of trace listene
1a040 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79  rs maintained by
1a050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54    //       the T
1a080 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69  raceOps class (i
1a090 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65  .e. only message
1a0a0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 74     //       that
1a0d0 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 20   meet the debug 
1a0e0 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65  priority will be
1a0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20    //       seen 
1a120 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e  on the console).
1a130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a150 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
1a180 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65  etupDebugListene
1a190 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rs();..         
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a210 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1a240 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  TE: Add the cons
1a250 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e  ole trace listen
1a260 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  er to the..     
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a280 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1a290 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c      list of buil
1a2a0 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65  t-in trace liste
1a2b0 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20  ners (i.e...    
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a2e0 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67       only messag
1a2f0 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 65  es that meet the
1a300 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1a330 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62   priority will b
1a340 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f  e seen on the co
1a350 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20  nsole)...       
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a370 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1a3a0 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  ce.Listeners.Add
1a3b0 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63  (new ConsoleTrac
1a3c0 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20  eListener());.. 
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a420 20 20 20 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 2f  ////////////////
1a450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a470 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1a480 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26  guration.noLog &
1a490 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
1a4b0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1a4c0 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69  mpty(configurati
1a4d0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
1a4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a4f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a510 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c           Trace.L
1a520 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77  isteners.Add(new
1a530 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65   TextWriterTrace
1a540 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20  Listener(..     
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1a570 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
1a580 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name));....     
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1a5d0 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20  Technically, we 
1a5e0 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20  created the log 
1a5f0 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...         
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a630 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b     filesCreated+
1a640 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
1a650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1a680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6a0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d      // NOTE: Dum
1a6b0 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  p the configurat
1a6c0 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20  ion now in case 
1a6d0 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20  we need to..    
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6f0 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65  //       trouble
1a700 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73  shoot any issues
1a710 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a720 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a740 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
1a750 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c  .debugPriority <
1a760 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
1a770 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
1a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a790 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
1a7a0 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63  ump(debugCallbac
1a7b0 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
1a7c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1a7d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
1a7e0 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72  cePriority <= Tr
1a7f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1a800 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1a820 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28  figuration.Dump(
1a830 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d  traceCallback);.
1a840 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a850 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a870 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  / NOTE: Show whe
1a880 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  re we are runnin
1a890 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77  g from and how w
1a8a0 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20  e were..        
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a8c0 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20       invoked... 
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1a8f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1a900 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73  g location = ass
1a910 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d  embly.Location;.
1a920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a930 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1a940 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1a950 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1a960 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1a990 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1a9a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9c0 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65        "Running e
1a9d0 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30  xecutable is: {0
1a9e0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  }", ForDisplay(l
1a9f0 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  ocation)),..    
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1aa20 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1aa30 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1aa40 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1aa50 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1aa60 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa80 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1aa90 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1aaa0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1aab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aac0 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 69            "Origi
1aad0 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  nal command line
1aae0 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20   is: {0}",..    
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab00 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e      Environment.
1ab10 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72  CommandLine), tr
1ab20 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1ab30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ab40 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1ab50 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1ab60 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1ab70 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1ab90 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1aba0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1abb0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abd0 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f      "Running pro
1abe0 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49  cess is {0}.", I
1abf0 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
1ac00 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ac20 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69  64-bit" : "32-bi
1ac30 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  t"), traceCatego
1ac40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ac60 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77  !configuration.w
1ac70 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
1acd0 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61  he debugger is a
1ace0 74 74 61 63 68 65 64 20 61 6e 64 20 57 68 61 74  ttached and What
1acf0 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20 20  -If mode..      
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad10 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b 6e    //       is [n
1ad20 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73  ow] disabled, is
1ad30 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a  sue a warning...
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad50 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad70 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65 72      if (Debugger
1ad80 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20  .IsAttached)..  
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ada0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1adb0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1adc0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1add0 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1ae00 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1ae10 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae30 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63             "Forc
1ae40 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c 22  ed to disable \"
1ae50 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 77  what-if\" mode w
1ae60 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ith " +..       
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae80 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67 67           "debugg
1ae90 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20 74  er attached.", t
1aea0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1aed0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1aee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aef0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1af20 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1af30 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
1af40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1af60 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1af70 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63 74           "No act
1afa0 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c 6c  ual changes will
1afb0 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69 73   be made to this
1afc0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75 73    "system becaus
1aff0 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f  e \"what-if\" mo
1b000 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c  de is enabled.",
1b010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1b030 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b080 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
1b090 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
1b0a0 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61   has not been ma
1b0b0 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  nually..        
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b0d0 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 28       confirmed (
1b0e0 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78 70  i.e. via the exp
1b0f0 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69  licit command li
1b100 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne..            
1b110 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1b120 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73   option), then s
1b130 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20 6e  top processing n
1b140 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 0d  ow.  We enforce.
1b150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b160 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1b170 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74 20  is rule so that 
1b180 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c  simply double-cl
1b190 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  icking the..    
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1b0 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 61  //       executa
1b1c0 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73  ble will not res
1b1d0 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e 67  ult in any chang
1b1e0 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20  es being..      
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b200 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20 74         made to t
1b210 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20  he system...    
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b230 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1b240 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
1b250 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69  figuration.confi
1b260 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rm)..           
1b270 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b290 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61 6e      error = "Can
1b2a0 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68  not continue, th
1b2b0 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70  e \"confirm\" op
1b2c0 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20  tion is " +..   
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20 65 6e           "not en
1b2f0 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20  abled.";....    
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b310 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1b320 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b330 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b350 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b380 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1b390 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
1b3a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1b3c0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1b3d0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1b3e0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1b410 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1b420 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f  , e, traceCatego
1b430 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1b440 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1b450 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 70  r = "Failed to p
1b460 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72 61  rocess configura
1b470 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1b480 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1b4a0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1b4b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1b4c0 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1b510 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
1b520 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
1b530 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
1b540 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
1b550 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1b560 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e  ic bool CheckRun
1b570 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
1b590 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
1b5a0 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1b5c0 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20   strict,..      
1b5d0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1b5e0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1b600 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1b620 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1b630 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b640 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1b650 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1b660 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1b670 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b690 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e       error = "In
1b6a0 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74  valid configurat
1b6b0 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61      // NOTE: Wha
1b730 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  t version of the
1b740 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68 65   runtime was the
1b750 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29 0d   core (primary).
1b760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b770 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
1b780 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1b790 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22 76  against (e.g. "v
1b7a0 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20  2.0.50727" or.. 
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7c0 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34 2e     //       "v4.
1b7d0 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20 20  0.30319")...    
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1b800 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
1b810 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1b820 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67  ersion = GetImag
1b830 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  eRuntimeVersion(
1b840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b850 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1b860 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
1b870 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b8a0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
1b8b0 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74 75  e allow the actu
1b8c0 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  al image runtime
1b8d0 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d   checking to be.
1b8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b8f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79       //       by
1b900 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20 22  passed via the "
1b910 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  -noRuntimeVersio
1b920 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d  n" command line.
1b930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b940 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
1b950 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61  tion.  The comma
1b960 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69  nd line option i
1b970 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a  s intended for..
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70      //       exp
1b9a0 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20  ert use only... 
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b9d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1b9e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52  onfiguration.noR
1b9f0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a  untimeVersion)..
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1ba30 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1ba40 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1ba50 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20  ity.Medium,..   
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba70 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1ba80 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1ba90 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1baa0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bac0 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20     "Assembly is 
1bad0 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1bae0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1baf0 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20  {0}; " +..      
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb10 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c 20        "however, 
1bb20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73  installation res
1bb30 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64 20  trictions based 
1bb40 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20  on this " +..   
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb60 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20 68           "fact h
1bb70 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c 65  ave been disable
1bb80 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e  d via the comman
1bb90 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20  d line.",..     
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbb0 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65         coreImage
1bbc0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
1bbd0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1bbe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1bc00 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1bc20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bc30 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bc50 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74  / TODO: Restrict
1bc60 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
1bc70 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63  on based on whic
1bc80 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20  h image..       
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1bca0 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65        runtime ve
1bcb0 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f  rsions (which mo
1bcc0 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65  re-or-less corre
1bcd0 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  spond..         
1bce0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1bcf0 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d      to .NET Fram
1bd00 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20  ework versions) 
1bd10 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62 79  are supported by
1bd20 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
1bd30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1bd40 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56     versions of V
1bd50 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61  isual Studio tha
1bd60 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e  t are installed.
1bd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd80 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1bda0 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
1bdb0 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67 65  rEmpty(coreImage
1bdc0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1bdd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bde0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
1be10 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67  d core file imag
1be20 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
1be30 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1be50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1be80 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1be90 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a  String.Equals(..
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
1bec0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1bed0 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65 52  ion, CLRv2ImageR
1bee0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a  untimeVersion,..
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
1bf10 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
1bf20 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  inal))..        
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf50 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf70 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20     // NOTE: For 
1bf80 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75 6e  the CLR v2.0 run
1bf90 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
1bfa0 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20  we disable..    
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfc0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79      //       any
1bfd0 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20   attempt to use 
1bfe0 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68  it for things th
1bff0 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20  at require..    
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c010 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20      //       an 
1c020 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
1c030 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34  d for the CLR v4
1c040 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20  .0.  It is..    
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c060 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e 63      //       unc
1c070 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20 69  ertain if this i
1c080 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72 6f  s actually a pro
1c090 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20  blem in..       
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0b0 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74 69   //       practi
1c0c0 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76 34  ce as the CLR v4
1c0d0 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20  .0 can load and 
1c0e0 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  use an..        
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c100 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c  //       assembl
1c110 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  y compiled with 
1c120 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f  the CLR v2.0; ho
1c130 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  wever,..        
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c150 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20 74  //       since t
1c160 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 65  his project offe
1c170 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72  rs both configur
1c180 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  ations,..       
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1a0 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75 72   //       we cur
1c1b0 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20  rently disallow 
1c1c0 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a  this mismatch...
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1c210 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 72  n.noNetFx40 = tr
1c220 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c230 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1c240 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
1c250 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Fx45 = true;..  
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1c280 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 74  ion.noVs2010 = t
1c290 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1c2b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
1c2c0 32 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a 20 20  2012 = true;..  
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2e0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1c2f0 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d 20 74  ion.noVs2013 = t
1c300 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1c330 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1c340 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c360 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1c370 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1c380 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1c390 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3b0 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
1c3c0 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1c3d0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1c3e0 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {0}, " +..     
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c400 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20         "support 
1c410 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  for .NET Framewo
1c420 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69  rk {1} is now di
1c430 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  sabled.",..     
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c450 20 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67         CLRv2Imag
1c460 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1c470 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
1c480 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c4b0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c4e0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74       else if (St
1c4f0 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20  ring.Equals(..  
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d            coreIm
1c520 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1c530 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  n, CLRv4ImageRun
1c540 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  timeVersion,..  
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
1c570 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
1c580 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
1c590 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68   // NOTE: For th
1c5e0 65 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69  e CLR v4.0 runti
1c5f0 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65  me, make sure we
1c600 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20   disable..      
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61    //       any a
1c630 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74  ttempt to use it
1c640 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74   for things that
1c650 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20   require..      
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c670 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73    //       an as
1c680 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1c690 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
1c6a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c6b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6d0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1c6e0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  tion.noNetFx20 =
1c6f0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c710 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1c720 4e 65 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d  NetFx35 = true;.
1c730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c740 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1c750 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20  ration.noVs2005 
1c760 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c780 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1c790 6f 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d  oVs2008 = true;.
1c7a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c7b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1c7c0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1c7d0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1c7e0 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20  Medium,..       
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1c810 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1c820 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1c830 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c850 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70  Assembly is comp
1c860 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45  iled for the .NE
1c870 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c  T Framework {0},
1c880 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8a0 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 2e    "support for .
1c8b0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31  NET Framework {1
1c8c0 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65  } is now disable
1c8d0 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d.",..          
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8f0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
1c900 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
1c910 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c930 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1c940 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1c950 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  eVersion)),..   
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c980 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c9b0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1c9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c9e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1c9f0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
1ca00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
1ca20 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20  nsupported core 
1ca30 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69  file image runti
1ca40 6d 65 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a  me version " +..
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
1ca70 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72  , must be {1} or
1ca80 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {2}",..        
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caa0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
1cab0 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1cac0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1caf0 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69  (CLRv2ImageRunti
1cb00 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1cb30 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75  lay(CLRv4ImageRu
1cb40 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d  ntimeVersion));.
1cb50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cb60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1cb70 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1cb90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cba0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1cbb0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1cbc0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1cbd0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
1cbe0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1cc20 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1cc30 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
1cc40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cc50 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1cc60 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1cc70 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63  allback, e, trac
1cc80 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1cc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cca0 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
1ccb0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67  ed to check imag
1ccc0 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
1ccd0 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
1cce0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ccf0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1cd00 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1cd10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1cd20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1cd30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd80 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1cd90 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
1cda0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
1cdb0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1cdc0 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  l HasFlags(..   
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
1cde0 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61  tallFlags hasFla
1cdf0 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
1ce00 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20       bool all.. 
1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
1ce20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ce30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce40 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20   if (all)..     
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ce60 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
1ce70 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
1ce80 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cea0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1ceb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1cec0 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
1ced0 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49  & hasFlags) != I
1cee0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65  nstallFlags.None
1cef0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1cf00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1cf10 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1cf60 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1cf70 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 28  IsLinqSupported(
1cf80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1cf90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cfa0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1cfb0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
1cfc0 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
1cfd0 66 20 74 68 65 20 4c 49 4e 51 20 61 73 73 65 6d  f the LINQ assem
1cfe0 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20  bly should be.. 
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d000 2f 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 65  /       processe
1d010 64 20 64 75 72 69 6e 67 20 74 68 65 20 69 6e 73  d during the ins
1d020 74 61 6c 6c 2e 20 20 49 66 20 74 68 65 20 74 61  tall.  If the ta
1d030 72 67 65 74 20 69 73 0d 0a 20 20 20 20 20 20 20  rget is..       
1d040 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1d050 20 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20    Visual Studio 
1d060 32 30 30 35 2c 20 74 68 69 73 20 73 68 6f 75 6c  2005, this shoul
1d070 64 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a  d return zero...
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d0a0 20 20 20 20 72 65 74 75 72 6e 20 21 6e 6f 4e 65      return !noNe
1d0b0 74 46 78 33 35 20 7c 7c 20 21 6e 6f 4e 65 74 46  tFx35 || !noNetF
1d0c0 78 34 30 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34  x40 || !noNetFx4
1d0d0 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
1d0e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1d0f0 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d130 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1d140 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
1d150 44 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20  Dump(..         
1d160 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
1d170 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
1d180 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
1d190 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
1d1a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d1b0 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 43        if (traceC
1d1c0 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29  allback != null)
1d1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d1e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d1f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d200 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d210 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d220 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f    "Assembly", Fo
1d250 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c  rDisplay(assembl
1d260 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
1d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d280 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d2a0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d2b0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d2c0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d2d0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c                "L
1d2f0 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  ogFileName", For
1d300 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e  Display(logFileN
1d310 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d350 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1d360 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1d370 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1d380 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3a0 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72  "Directory", For
1d3b0 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72  Display(director
1d3c0 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d3e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d400 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d410 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d420 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d430 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
1d450 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  oreFileName", Fo
1d460 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c  rDisplay(coreFil
1d470 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d490 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d4a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d4b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d4c0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d4d0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d4e0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d500 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22    "LinqFileName"
1d510 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e  , ForDisplay(lin
1d520 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  qFileName)),..  
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d540 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1d550 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d570 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1d580 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1d590 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5b0 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 72 46        "DesignerF
1d5c0 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
1d5d0 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69 6c  play(designerFil
1d5e0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d600 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d610 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d620 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d630 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d640 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d650 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d670 20 20 22 52 65 67 69 73 74 72 79 56 65 72 73 69    "RegistryVersi
1d680 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on", ForDisplay(
1d690 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 29  registryVersion)
1d6a0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d6c0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6e0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1d6f0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1d700 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1d710 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d720 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e              "Con
1d730 66 69 67 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72  figVersion", For
1d740 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 56 65  Display(configVe
1d750 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d770 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d780 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d790 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d7a0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d7b0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d7c0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7e0 20 20 22 56 73 56 65 72 73 69 6f 6e 53 75 66 66    "VsVersionSuff
1d7f0 69 78 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ix", ForDisplay(
1d800 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 29  vsVersionSuffix)
1d810 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1d820 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d830 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d850 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1d860 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1d870 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1d880 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d890 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62              "Deb
1d8a0 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69  ugFormat", ForDi
1d8b0 73 70 6c 61 79 28 64 65 62 75 67 46 6f 72 6d 61  splay(debugForma
1d8c0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d8e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d900 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d910 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d920 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d930 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54                "T
1d950 72 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72  raceFormat", For
1d960 44 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f 72  Display(traceFor
1d970 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  mat)),..        
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d9a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d9b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1d9c0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1d9d0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1d9e0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20  "InstallFlags", 
1da10 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61  ForDisplay(insta
1da20 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20  llFlags)),..    
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da40 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1da50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1da60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1da70 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1da80 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1da90 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 20 20 20 20 22 44 65 62 75 67 50 72 69 6f 72 69      "DebugPriori
1dac0 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ty", ForDisplay(
1dad0 64 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 2c  debugPriority)),
1dae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1daf0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1db00 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1db30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1db40 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1db50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1db60 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65            "Trace
1db70 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69  Priority", ForDi
1db80 73 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72  splay(tracePrior
1db90 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ity)),..        
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbb0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1dbc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dbd0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1dbe0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1dbf0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1dc00 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc20 22 50 65 72 55 73 65 72 22 2c 20 46 6f 72 44 69  "PerUser", ForDi
1dc30 73 70 6c 61 79 28 70 65 72 55 73 65 72 29 29 2c  splay(perUser)),
1dc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc50 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1dc60 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1dc90 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1dca0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1dcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dcc0 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61            "Insta
1dcd0 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ll", ForDisplay(
1dce0 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 20 20  install)),..    
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd00 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1dd10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1dd20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1dd30 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1dd40 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1dd50 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 20 20 20 22 57 6f 77 36 34 22 2c 20 46 6f 72      "Wow64", For
1dd80 44 69 73 70 6c 61 79 28 77 6f 77 36 34 29 29 2c  Display(wow64)),
1dd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dda0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ddb0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddd0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1dde0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1ddf0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1de00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1de10 20 20 20 20 20 20 20 20 20 20 22 4e 6f 52 75 6e            "NoRun
1de20 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20 46 6f  timeVersion", Fo
1de30 72 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e 74 69  rDisplay(noRunti
1de40 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20  meVersion)),..  
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de60 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1de70 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1de90 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1dea0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1deb0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ded0 20 20 20 20 20 20 22 4e 6f 44 65 73 6b 74 6f 70        "NoDesktop
1dee0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1def0 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20 20 20  Desktop)),..    
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df10 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1df20 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1df30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1df40 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1df50 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1df60 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df80 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74 22 2c      "NoCompact",
1df90 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f   ForDisplay(noCo
1dfa0 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20 20 20 20  mpact)),..      
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1dfd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1dfe0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1dff0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e000 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e010 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e030 20 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c 20 46    "NoNetFx20", F
1e040 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
1e050 78 32 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  x20)),..        
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e090 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e0a0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e0b0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e0c0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0e0 22 4e 6f 4e 65 74 46 78 33 35 22 2c 20 46 6f 72  "NoNetFx35", For
1e0f0 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 33  Display(noNetFx3
1e100 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  5)),..          
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e120 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e140 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e150 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e160 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e170 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e190 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 44 69  oNetFx40", ForDi
1e1a0 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30 29  splay(noNetFx40)
1e1b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e1d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e200 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e210 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e220 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e230 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
1e240 65 74 46 78 34 35 22 2c 20 46 6f 72 44 69 73 70  etFx45", ForDisp
1e250 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 29 29 2c  lay(noNetFx45)),
1e260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e270 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e280 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e2b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e2c0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e2e0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
1e2f0 30 30 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  005", ForDisplay
1e300 28 6e 6f 56 73 32 30 30 35 29 29 2c 0d 0a 20 20  (noVs2005)),..  
1e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e320 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e330 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e350 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e360 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e370 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 38 22        "NoVs2008"
1e3a0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1e3b0 73 32 30 30 38 29 29 2c 0d 0a 20 20 20 20 20 20  s2008)),..      
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3d0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e3e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e3f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e400 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e410 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e420 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e440 20 20 22 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f    "NoVs2010", Fo
1e450 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31  rDisplay(noVs201
1e460 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0)),..          
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e480 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e4a0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e4b0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e4c0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e4d0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e4f0 6f 56 73 32 30 31 32 22 2c 20 46 6f 72 44 69 73  oVs2012", ForDis
1e500 70 6c 61 79 28 6e 6f 56 73 32 30 31 32 29 29 2c  play(noVs2012)),
1e510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e520 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e530 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e560 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e570 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e590 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
1e5a0 30 31 33 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  013", ForDisplay
1e5b0 28 6e 6f 56 73 32 30 31 33 29 29 2c 0d 0a 20 20  (noVs2013)),..  
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5d0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e5e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e600 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e610 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e620 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e640 20 20 20 20 20 20 22 4e 6f 54 72 61 63 65 22 2c        "NoTrace",
1e650 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 54 72   ForDisplay(noTr
1e660 61 63 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ace)),..        
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e6a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e6b0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e6c0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e6d0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6f0 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72  "NoConsole", For
1e700 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c  Display(noConsol
1e710 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e730 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e750 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e760 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e770 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e780 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e7a0 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70 6c 61  oLog", ForDispla
1e7b0 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20  y(noLog)),..    
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e7e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e7f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e800 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e810 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e820 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e840 20 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69 73 73      "ThrowOnMiss
1e850 69 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ing", ForDisplay
1e860 28 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29  (throwOnMissing)
1e870 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e880 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e890 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e8c0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e8d0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e8e0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 22 57 68 61              "Wha
1e900 74 49 66 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  tIf", ForDisplay
1e910 28 77 68 61 74 49 66 29 29 2c 0d 0a 20 20 20 20  (whatIf)),..    
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e930 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e940 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e950 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e960 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e970 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e980 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9a0 20 20 20 20 22 44 65 62 75 67 22 2c 20 46 6f 72      "Debug", For
1e9b0 44 69 73 70 6c 61 79 28 64 65 62 75 67 29 29 2c  Display(debug)),
1e9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e9d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e9e0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1ea10 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1ea20 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1ea30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ea40 20 20 20 20 20 20 20 20 20 20 22 56 65 72 62 6f            "Verbo
1ea50 73 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  se", ForDisplay(
1ea60 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20  verbose)),..    
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1ea90 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1eaa0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1eab0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1eac0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1ead0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaf0 20 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46      "Confirm", F
1eb00 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 72  orDisplay(confir
1eb10 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  m)),..          
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1eb30 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1eb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eb50 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1eba0 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
1ebb0 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly != null).. 
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ebf0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1ec00 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1ec10 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec30 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
1ec40 6d 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20 20 20  mblyTitle",..   
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1ec70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 54  lay(GetAssemblyT
1ec80 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 29 29  itle(assembly)))
1ec90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ecb0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ecc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ecd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ece0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1ecf0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1ed00 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1ed30 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 2c 0d  Configuration",.
1ed40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1ed60 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d  Display(GetAssem
1ed70 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
1ed80 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20  (assembly))),.. 
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1edb0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1ede0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1edf0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ee00 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1ee10 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ee60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1ee70 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f  egion Public Pro
1ee80 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
1ee90 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73       private Ass
1eea0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b 0d  embly assembly;.
1eeb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1eec0 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73 73  lic Assembly Ass
1eed0 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
1eee0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1eef0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1ef00 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a  rn assembly; }..
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20 3d  set { assembly =
1ef30 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1ef40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ef50 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1efa0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1efb0 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c  te string logFil
1efc0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
1efd0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
1efe0 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a 20  g LogFileName.. 
1eff0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1f010 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46 69  t { return logFi
1f020 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
1f030 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1f040 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 76   logFileName = v
1f050 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1f060 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f070 20 20 20 20 20 20 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 2f 2f  ////////////////
1f0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f0c0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1f0d0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
1f0e0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
1f0f0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 69  public string Di
1f100 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20  rectory..       
1f110 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f120 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1f130 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b 20  turn directory; 
1f140 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1f150 20 20 20 73 65 74 20 7b 20 64 69 72 65 63 74 6f     set { directo
1f160 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ry = value; }.. 
1f170 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f180 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f1d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1f1e0 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f  rivate string co
1f1f0 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  reFileName;..   
1f200 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f210 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e  string CoreFileN
1f220 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
1f230 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f240 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1f250 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20 7d   coreFileName; }
1f260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f270 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c 65    set { coreFile
1f280 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
1f290 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1f300 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1f310 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  linqFileName;.. 
1f320 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1f330 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c  c string LinqFil
1f340 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
1f350 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f360 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1f370 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  rn linqFileName;
1f380 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f390 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46 69      set { linqFi
1f3a0 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  leName = value; 
1f3b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1f3c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f410 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1f420 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
1f430 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
1f440 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
1f450 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
1f460 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d  esignerFileName.
1f470 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f490 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73  get { return des
1f4a0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20 7d  ignerFileName; }
1f4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f4c0 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65 72    set { designer
1f4d0 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
1f4e0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f4f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f500 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1f540 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f550 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1f560 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 72 73  ing registryVers
1f570 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
1f580 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1f590 52 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 0d  RegistryVersion.
1f5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5c0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65 67  get { return reg
1f5d0 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 20 7d 0d  istryVersion; }.
1f5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f5f0 20 73 65 74 20 7b 20 72 65 67 69 73 74 72 79 56   set { registryV
1f600 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20  ersion = value; 
1f610 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1f620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f670 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1f680 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
1f690 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b  g configVersion;
1f6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1f6b0 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 6e 66  blic string Conf
1f6c0 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  igVersion..     
1f6d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f6e0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1f6f0 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 56 65 72  return configVer
1f700 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sion; }..       
1f710 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63           set { c
1f720 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 76  onfigVersion = v
1f730 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1f740 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f750 20 20 20 20 20 20 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 2f 2f  ////////////////
1f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f7a0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1f7b0 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f   string vsVersio
1f7c0 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20  nSuffix;..      
1f7d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1f7e0 69 6e 67 20 56 73 56 65 72 73 69 6f 6e 53 75 66  ing VsVersionSuf
1f7f0 66 69 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fix..           
1f800 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f810 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1f820 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
1f830 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f840 20 20 20 20 20 73 65 74 20 7b 20 76 73 56 65 72       set { vsVer
1f850 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 61 6c  sionSuffix = val
1f860 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1f870 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f880 20 20 20 20 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 2f 2f 2f 2f  ////////////////
1f8c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f8d0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1f8e0 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61  tring debugForma
1f8f0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
1f900 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65  public string De
1f910 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20  bugFormat..     
1f920 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f930 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1f940 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72 6d  return debugForm
1f950 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  at; }..         
1f960 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62         set { deb
1f970 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65  ugFormat = value
1f980 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f990 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f9a0 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1f9e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f9f0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1fa00 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  ing traceFormat;
1fa10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1fa20 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61 63  blic string Trac
1fa30 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20  eFormat..       
1fa40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1fa50 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1fa60 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74  turn traceFormat
1fa70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fa80 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65       set { trace
1fa90 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
1faa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1fab0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1fb10 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 74 61     private Insta
1fb20 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46  llFlags installF
1fb30 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  lags;..         
1fb40 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61 6c     public Instal
1fb50 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c  lFlags InstallFl
1fb60 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ags..           
1fb70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fb80 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1fb90 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d   installFlags; }
1fba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fbb0 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46    set { installF
1fbc0 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  lags = value; }.
1fbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1fbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1fc40 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50 72   private TracePr
1fc50 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f  iority debugPrio
1fc60 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
1fc70 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65 50     public TraceP
1fc80 72 69 6f 72 69 74 79 20 44 65 62 75 67 50 72 69  riority DebugPri
1fc90 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
1fca0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fcb0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1fcc0 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74 79  rn debugPriority
1fcd0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fce0 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67       set { debug
1fcf0 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65  Priority = value
1fd00 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fd10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fd20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1fd60 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fd70 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61       private Tra
1fd80 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65  cePriority trace
1fd90 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
1fda0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72         public Tr
1fdb0 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63  acePriority Trac
1fdc0 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  ePriority..     
1fdd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fde0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1fdf0 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 69 6f  return tracePrio
1fe00 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rity; }..       
1fe10 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74           set { t
1fe20 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76  racePriority = v
1fe30 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1fe40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fe50 20 20 20 20 20 20 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 2f 2f  ////////////////
1fe90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1fea0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1feb0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 3b 0d 0a   bool perUser;..
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1fed0 69 63 20 62 6f 6f 6c 20 50 65 72 55 73 65 72 0d  ic bool PerUser.
1fee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 65 72  get { return per
1ff10 55 73 65 72 3b 20 7d 0d 0a 20 20 20 20 20 20 20  User; }..       
1ff20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
1ff30 65 72 55 73 65 72 20 3d 20 76 61 6c 75 65 3b 20  erUser = value; 
1ff40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1ff50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ff60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffa0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1ffb0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1ffc0 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20  install;..      
1ffd0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1ffe0 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20  l Install..     
1fff0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20000 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20010 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20  return install; 
20020 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20030 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c     set { install
20040 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20050 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20060 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
200b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
200c0 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77 36 34 3b  vate bool wow64;
200d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
200e0 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77 36 34 0d  blic bool Wow64.
200f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20110 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 6f 77  get { return wow
20120 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  64; }..         
20130 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 6f 77         set { wow
20140 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  64 = value; }.. 
20150 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20160 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
201b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
201c0 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 52 75  rivate bool noRu
201d0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  ntimeVersion;.. 
201e0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
201f0 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65  c bool NoRuntime
20200 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  Version..       
20210 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20220 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20230 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d 65 56 65  turn noRuntimeVe
20240 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20  rsion; }..      
20250 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
20260 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
20270 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20280 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20290 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
202e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
202f0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b  vate bool noDesk
20300 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  top;..          
20310 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
20320 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20  Desktop..       
20330 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20340 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20350 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20  turn noDesktop; 
20360 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20370 20 20 20 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74     set { noDeskt
20380 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  op = value; }.. 
20390 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
203a0 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
203f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20400 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f  rivate bool noCo
20410 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20  mpact;..        
20420 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
20430 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20  NoCompact..     
20440 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20450 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20460 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74  return noCompact
20470 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20480 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d       set { noCom
20490 70 61 63 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  pact = value; }.
204a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
204b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20500 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20510 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
20520 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20  NetFx20;..      
20530 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
20540 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20  l NoNetFx20..   
20550 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20560 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20570 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
20580 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  20; }..         
20590 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
205a0 65 74 46 78 32 30 20 3d 20 76 61 6c 75 65 3b 20  etFx20 = value; 
205b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
205c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20610 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20620 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
20630 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20 20  noNetFx35;..    
20640 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
20650 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33 35 0d 0a 20  ool NoNetFx35.. 
20660 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20680 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
20690 46 78 33 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Fx35; }..       
206a0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
206b0 6f 4e 65 74 46 78 33 35 20 3d 20 76 61 6c 75 65  oNetFx35 = value
206c0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
206d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
206e0 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
20720 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20730 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
20740 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20  l noNetFx40;..  
20750 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
20760 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30 0d   bool NoNetFx40.
20770 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20790 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
207a0 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20 20  etFx40; }..     
207b0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
207c0 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76 61 6c   noNetFx40 = val
207d0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
207e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
207f0 20 20 20 20 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 2f 2f 2f 2f  ////////////////
20830 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20840 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
20850 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a  ool noNetFx45;..
20860 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20870 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34  ic bool NoNetFx4
20880 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  5..            {
20890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
208a0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
208b0 6f 4e 65 74 46 78 34 35 3b 20 7d 0d 0a 20 20 20  oNetFx45; }..   
208c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
208d0 20 7b 20 6e 6f 4e 65 74 46 78 34 35 20 3d 20 76   { noNetFx45 = v
208e0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
208f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20900 20 20 20 20 20 20 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 2f 2f  ////////////////
20940 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20950 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20960 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 3b 0d   bool noVs2005;.
20970 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
20980 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30  lic bool NoVs200
20990 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  5..            {
209a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
209b0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
209c0 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20 20 20  oVs2005; }..    
209d0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
209e0 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76 61 6c  { noVs2005 = val
209f0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
20a00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20a10 20 20 20 20 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 2f 2f 2f 2f  ////////////////
20a50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20a60 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
20a70 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20  ool noVs2008;.. 
20a80 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
20a90 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38 0d  c bool NoVs2008.
20aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ac0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
20ad0 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20 20  s2008; }..      
20ae0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
20af0 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75 65  noVs2008 = value
20b00 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20b10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20b20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20b70 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
20b80 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20  l noVs2010;..   
20b90 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20ba0 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a 20  bool NoVs2010.. 
20bb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20bd0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
20be0 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  010; }..        
20bf0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
20c00 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b 20  Vs2010 = value; 
20c10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20c20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20c80 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
20c90 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20  noVs2012;..     
20ca0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
20cb0 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20 20 20  ol NoVs2012..   
20cc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20cd0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20ce0 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31  { return noVs201
20cf0 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  2; }..          
20d00 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
20d10 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2012 = value; }.
20d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20d90 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
20da0 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20 20  Vs2013;..       
20db0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
20dc0 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20 20 20 20   NoVs2013..     
20dd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20de0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20df0 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 33 3b  return noVs2013;
20e00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20e10 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
20e20 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  13 = value; }.. 
20e30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20e40 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20e90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20ea0 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72  rivate bool noTr
20eb0 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ace;..          
20ec0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
20ed0 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  Trace..         
20ee0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20ef0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
20f00 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20  rn noTrace; }.. 
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20f20 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76  et { noTrace = v
20f30 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20f40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20f50 20 20 20 20 20 20 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 2f 2f  ////////////////
20f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20fa0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20fb0 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b   bool noConsole;
20fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
20fd0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73  blic bool NoCons
20fe0 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ole..           
20ff0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21000 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21010 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20   noConsole; }.. 
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21030 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d  et { noConsole =
21040 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21050 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21060 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
210b0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
210c0 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a  te bool noLog;..
210d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
210e0 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20  ic bool NoLog.. 
210f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21110 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67  t { return noLog
21120 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21130 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67       set { noLog
21140 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
21150 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21160 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
211b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
211c0 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f  vate bool throwO
211d0 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20  nMissing;..     
211e0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
211f0 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol ThrowOnMissin
21200 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
21210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21220 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
21230 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d  hrowOnMissing; }
21240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21250 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d    set { throwOnM
21260 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20  issing = value; 
21270 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
212e0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
212f0 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
21300 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
21310 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20   WhatIf..       
21320 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21330 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
21340 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a  turn whatIf; }..
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21360 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76  set { whatIf = v
21370 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21380 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21390 20 20 20 20 20 20 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 2f 2f  ////////////////
213d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
213e0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
213f0 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20   bool debug;..  
21400 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21410 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20   bool Debug..   
21420 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21430 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
21440 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 3b 20  { return debug; 
21450 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
21460 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 20 3d     set { debug =
21470 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21480 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21490 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
214e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
214f0 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b  te bool verbose;
21500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
21510 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73  blic bool Verbos
21520 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
21530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21540 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
21550 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20  erbose; }..     
21560 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
21570 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c 75 65   verbose = value
21580 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21590 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
215a0 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
215e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
215f0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
21600 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20  l confirm;..    
21610 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
21620 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20  ool Confirm..   
21630 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21640 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
21650 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d  { return confirm
21660 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21670 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69       set { confi
21680 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  rm = value; }.. 
21690 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
216a0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
216b0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
216c0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
216d0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f 2f 2f 2f 2f  ////////////////
21720 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21730 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d 65 77    #region Framew
21740 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  orkList Class.. 
21750 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
21760 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72 61 6d  ealed class Fram
21770 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20  eworkList..     
21780 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21790 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
217a0 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
217b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
217c0 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28  c FrameworkList(
217d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
217e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
217f0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
21800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21810 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
21820 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
21830 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21880 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
21890 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73  n Public Methods
218a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
218b0 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
218c0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a  ryKey rootKey;..
218d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
218e0 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
218f0 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
21900 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21910 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
21920 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
21930 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21940 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
21950 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
21960 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21970 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
219c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
219d0 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74  ivate StringList
219e0 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20   names;..       
219f0 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
21a00 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20  ngList Names..  
21a10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
21a30 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b   { return names;
21a40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21a50 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73 20      set { names 
21a60 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
21a70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21a80 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21ad0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
21ae0 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20 76  ate VersionMap v
21af0 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20  ersions;..      
21b00 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
21b10 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73  sionMap Versions
21b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21b40 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
21b50 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20  rsions; }..     
21b60 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
21b70 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75   versions = valu
21b80 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
21b90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21ba0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21be0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21bf0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74        private St
21c00 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72  ringList platfor
21c10 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20  mNames;..       
21c20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
21c30 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e  ngList PlatformN
21c40 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
21c50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21c60 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
21c70 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b  n platformNames;
21c80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21c90 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66 6f      set { platfo
21ca0 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b  rmNames = value;
21cb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21cc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
21cd0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
21ce0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
21cf0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
21d00 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21d50 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
21d60 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  sList Class..   
21d70 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
21d80 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73 74  led class VsList
21d90 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
21da0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
21db0 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
21dc0 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
21dd0 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74 28    public VsList(
21de0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
21df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e00 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
21e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
21e30 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
21e40 20 20 20 20 20 20 20 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 2f  ////////////////
21e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21e90 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
21ea0 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
21eb0 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
21ec0 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
21ed0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
21ee0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
21ef0 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
21f00 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20  ryKey RootKey.. 
21f10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21f30 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b  t { return rootK
21f40 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ey; }..         
21f50 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f         set { roo
21f60 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tKey = value; }.
21f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
21fe0 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e   private Version
21ff0 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a  List versions;..
22000 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
22010 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 56  ic VersionList V
22020 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  ersions..       
22030 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22040 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
22050 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d  turn versions; }
22060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22070 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73    set { versions
22080 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
22090 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
220a0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
220b0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
220c0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
220d0 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  n..        #endr
220e0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
220f0 20 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 2f 2f 2f  ////////////////
22130 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22140 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
22150 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44 61 74  ate Constant Dat
22160 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  a..        priva
22170 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
22180 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22  CoreFileName = "
22190 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
221a0 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20  te.dll";..      
221b0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
221c0 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e  string LinqFileN
221d0 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
221e0 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64  ta.SQLite.Linq.d
221f0 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ll";..        pr
22200 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
22210 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng DesignerFileN
22220 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e 44 65  ame = "SQLite.De
22230 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20  signer.dll";..  
22240 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
22250 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 76 69  nst string Provi
22260 64 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74  derName = "SQLit
22270 65 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 22  e Data Provider"
22280 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
22290 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
222a0 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53  ProjectName = "S
222b0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
222c0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  e";..        pri
222d0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
222e0 67 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e  g LegacyProjectN
222f0 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d  ame = "SQLite";.
22300 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
22310 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 6e   const string In
22320 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53  variantName = "S
22330 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
22340 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  e";..        pri
22350 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
22360 67 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  g FactoryTypeNam
22370 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
22380 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 61  .SQLite.SQLiteFa
22390 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  ctory";..       
223a0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
223b0 74 72 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f  tring Descriptio
223c0 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61 6d 65 77  n = ".NET Framew
223d0 6f 72 6b 20 44 61 74 61 20 50 72 6f 76 69 64 65  ork Data Provide
223e0 72 20 66 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a  r for SQLite";..
223f0 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22440 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
22450 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
22460 67 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74  g CLRv2ImageRunt
22470 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 32  imeVersion = "v2
22480 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20 20 20  .0.50727";..    
22490 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
224a0 74 20 73 74 72 69 6e 67 20 43 4c 52 76 34 49 6d  t string CLRv4Im
224b0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
224c0 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33 31 39 22  n = "v4.0.30319"
224d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
22520 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22530 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
22540 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75  ring NameAndValu
22550 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20  eFormat = "{0}: 
22560 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  {1}";..        p
22570 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
22580 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66 66 69  ing LogFileSuffi
22590 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20  x = ".log";.... 
225a0 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
225f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22600 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 52  e const string R
22610 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f  ootKeyName = "So
22620 66 74 77 61 72 65 22 3b 0d 0a 20 20 20 20 20 20  ftware";..      
22630 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
22640 73 74 72 69 6e 67 20 57 6f 77 36 34 53 75 62 4b  string Wow64SubK
22650 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77 36 34 33  eyName = "Wow643
22660 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20  2Node";....     
22670 20 20 20 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 2f  ////////////////
226b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
226c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
226d0 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e    // NOTE: The .
226e0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 68 61  NET Framework ha
226f0 73 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e  s both 32-bit an
22700 64 20 36 34 2d 62 69 74 20 65 64 69 74 69 6f 6e  d 64-bit edition
22710 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
22720 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22730 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
22740 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33 32 42 69  bool NetFxIs32Bi
22750 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  tOnly = false;..
22760 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
227b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
227c0 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
227d0 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61  : For now, Visua
227e0 6c 20 53 74 75 64 69 6f 20 69 73 20 61 6c 77 61  l Studio is alwa
227f0 79 73 20 61 20 33 32 2d 62 69 74 20 61 70 70 6c  ys a 32-bit appl
22800 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ication...      
22810 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72    //..        pr
22820 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
22830 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33  donly bool VsIs3
22840 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b  2BitOnly = true;
22850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
228b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
228c0 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 56 73  adonly string Vs
228d0 49 64 46 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d  IdFormat = "B";.
228e0 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22930 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
22940 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
22950 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61  donly string XPa
22960 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20  thForAddElement 
22970 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
22980 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79  configuration/sy
22990 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76  stem.data/DbProv
229a0 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f 61 64  iderFactories/ad
229b0 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b  d[@invariant=\"{
229c0 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20  0}\"]";....     
229d0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
229e0 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
229f0 67 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65  g XPathForRemove
22a00 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20  Element =..     
22a10 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72         "configur
22a20 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74  ation/system.dat
22a30 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  a/DbProviderFact
22a40 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e  ories/remove[@in
22a50 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d  variant=\"{0}\"]
22a60 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  ";..        #end
22a70 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
22a80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22ad0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
22ae0 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61  vate Static Data
22af0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22b00 65 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c  e static Assembl
22b10 79 20 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d  y thisAssembly =
22b20 20 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78 65   Assembly.GetExe
22b30 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28 29  cutingAssembly()
22b40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ;....        pri
22b50 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
22b60 6e 67 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ng traceCategory
22b70 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
22b80 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
22b90 20 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c    thisAssembly.L
22ba0 6f 63 61 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54  ocation); /* NOT
22bb0 45 3a 20 53 61 6d 65 20 66 6f 72 20 64 65 62 75  E: Same for debu
22bc0 67 20 61 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d  g and trace. */.
22bd0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
22be0 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43  te static TraceC
22bf0 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
22c00 6c 62 61 63 6b 20 3d 20 41 70 70 44 65 62 75 67  lback = AppDebug
22c10 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
22c20 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43  te static TraceC
22c30 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
22c40 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61 63 65  lback = AppTrace
22c50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ca0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22cb0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
22cc0 74 72 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65  tring systemDire
22cd0 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  ctory = null;...
22ce0 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20  .#if WINDOWS..  
22cf0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22d00 61 74 69 63 20 73 74 72 69 6e 67 20 73 79 73 74  atic string syst
22d10 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34  emDirectoryWow64
22d20 20 3d 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66   = null;..#endif
22d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
22d90 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
22da0 74 20 66 69 6c 65 73 43 72 65 61 74 65 64 20 3d  t filesCreated =
22db0 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69   0;..        pri
22dc0 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
22dd0 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d 20  filesModified = 
22de0 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  0;..        priv
22df0 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66  ate static int f
22e00 69 6c 65 73 44 65 6c 65 74 65 64 20 3d 20 30 3b  ilesDeleted = 0;
22e10 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
22e20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
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 2f 2f 2f 2f  ////////////////
22e70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22e80 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
22e90 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
22ea0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
22eb0 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f 67 46  c string GetLogF
22ec0 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  ileName(..      
22ed0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
22ee0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
22ef0 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f     ) /* throw */
22f00 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
22f10 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
22f20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  fileName = Path.
22f30 47 65 74 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28  GetTempFileName(
22f40 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22f50 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
22f60 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63   = Path.GetDirec
22f70 74 6f 72 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d  toryName(fileNam
22f80 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
22f90 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
22fa0 4f 6e 6c 79 20 3d 20 50 61 74 68 2e 47 65 74 46  Only = Path.GetF
22fb0 69 6c 65 4e 61 6d 65 57 69 74 68 6f 75 74 45 78  ileNameWithoutEx
22fc0 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65  tension(fileName
22fd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22fe0 20 20 73 74 72 69 6e 67 20 6e 65 77 46 69 6c 65    string newFile
22ff0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
23000 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 53  ine(directory, S
23010 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23030 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63  {0}{1}{2}", trac
23040 65 43 61 74 65 67 6f 72 79 2c 20 21 53 74 72 69  eCategory, !Stri
23050 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
23060 28 74 79 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20  (typeName) ?..  
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23080 20 20 22 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65    "." + typeName
23090 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c   : String.Empty,
230a0 20 22 2e 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f   "." + fileNameO
230b0 6e 6c 79 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  nly +..         
230c0 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 46 69             LogFi
230d0 6c 65 53 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20  leSuffix));.... 
230e0 20 20 20 20 20 20 20 20 20 20 20 46 69 6c 65 2e             File.
230f0 4d 6f 76 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e  Move(fileName, n
23100 65 77 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  ewFileName);....
23110 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23120 72 6e 20 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d  rn newFileName;.
23130 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
23140 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23190 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
231a0 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70   static void App
231b0 44 65 62 75 67 28 0d 0a 20 20 20 20 20 20 20 20  Debug(..        
231c0 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
231d0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
231e0 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
231f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
23200 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
23210 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
23220 2e 44 65 62 75 67 43 6f 72 65 28 53 74 72 69 6e  .DebugCore(Strin
23230 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
23240 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
23250 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c  Ops.DebugFormat,
23260 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 44 65   TraceOps.NextDe
23270 62 75 67 49 64 28 29 2c 0d 0a 20 20 20 20 20 20  bugId(),..      
23280 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
23290 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74  ps.TimeStamp(Dat
232a0 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d  eTime.UtcNow), m
232b0 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72  essage), categor
232c0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
232d0 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23320 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
23330 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
23340 20 41 70 70 54 72 61 63 65 28 0d 0a 20 20 20 20   AppTrace(..    
23350 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
23360 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
23370 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
23380 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
23390 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
233a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
233b0 65 4f 70 73 2e 54 72 61 63 65 43 6f 72 65 28 53  eOps.TraceCore(S
233c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
233e0 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
233f0 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65  mat, TraceOps.Ne
23400 78 74 54 72 61 63 65 49 64 28 29 2c 0d 0a 20 20  xtTraceId(),..  
23410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
23420 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70  aceOps.TimeStamp
23430 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77  (DateTime.UtcNow
23440 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74  ), message), cat
23450 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
23460 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
23470 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
23480 20 20 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 2f 2f  ////////////////
234c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
234d0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e       #region Gen
234e0 65 72 69 63 20 50 6c 61 74 66 6f 72 6d 20 48 61  eric Platform Ha
234f0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
23500 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
23510 6f 6f 6c 20 49 73 36 34 42 69 74 50 72 6f 63 65  ool Is64BitProce
23520 73 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ss()..        {.
23530 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
23540 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
23550 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 72  NOTE: Returns tr
23560 75 65 20 69 66 20 74 68 65 20 63 75 72 72 65 6e  ue if the curren
23570 74 20 70 72 6f 63 65 73 73 20 69 73 20 36 34 2d  t process is 64-
23580 62 69 74 2e 20 20 49 66 20 74 68 69 73 0d 0a 20  bit.  If this.. 
23590 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
235a0 20 20 20 20 69 73 20 74 72 75 65 2c 20 77 65 20      is true, we 
235b0 2a 6b 6e 6f 77 2a 20 74 68 61 74 20 77 65 20 6d  *know* that we m
235c0 75 73 74 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f  ust be running o
235d0 6e 20 61 20 36 34 2d 62 69 74 0d 0a 20 20 20 20  n a 64-bit..    
235e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
235f0 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65   operating syste
23600 6d 20 61 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65  m as well.  Howe
23610 76 65 72 2c 20 69 66 20 74 68 69 73 20 69 73 20  ver, if this is 
23620 66 61 6c 73 65 2c 20 77 65 0d 0a 20 20 20 20 20  false, we..     
23630 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
23640 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69  do not necessari
23650 6c 79 20 6b 6e 6f 77 20 74 68 61 74 20 77 65 20  ly know that we 
23660 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61  are running on a
23670 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   32-bit..       
23680 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
23690 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2c 20  erating system, 
236a0 64 75 65 20 74 6f 20 57 6f 57 36 34 20 28 57 69  due to WoW64 (Wi
236b0 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65  n32-on-Win64), e
236c0 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tc...           
236d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
236e0 20 72 65 74 75 72 6e 20 28 49 6e 74 50 74 72 2e   return (IntPtr.
236f0 53 69 7a 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c  Size == sizeof(l
23700 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20  ong)); // NOTE: 
23710 50 6f 69 6e 74 65 72 20 69 73 20 36 34 2d 62 69  Pointer is 64-bi
23720 74 73 3f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ts?..        }..
23730 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23780 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
23790 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
237a0 20 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74   IsSupportedRoot
237b0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
237c0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
237d0 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
237e0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
237f0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20  ryKey rootKey.. 
23800 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
23810 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23820 20 20 20 20 20 72 65 74 75 72 6e 20 4f 62 6a 65       return Obje
23830 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
23840 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69  ls(rootKey, regi
23850 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
23860 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
23870 20 20 20 20 20 20 4f 62 6a 65 63 74 2e 52 65 66        Object.Ref
23880 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
23890 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 4c  tKey, registry.L
238a0 6f 63 61 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20  ocalMachine);.. 
238b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
238c0 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23910 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
23920 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
23930 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  RootKeyName(..  
23940 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
23950 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
23960 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
23970 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23980 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23990 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
239a0 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49 58         // BUGFIX
239b0 3a 20 41 70 70 61 72 65 6e 74 6c 79 2c 20 74 68  : Apparently, th
239c0 65 20 70 65 72 2d 75 73 65 72 20 72 65 67 69 73  e per-user regis
239d0 74 72 79 20 68 69 76 65 20 64 6f 65 73 20 6e 6f  try hive does no
239e0 74 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20 20  t use..         
239f0 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 68     //         th
23a00 65 20 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 20  e "Wow6432Node" 
23a10 6e 6f 64 65 20 74 6f 20 73 74 6f 72 65 20 73 65  node to store se
23a20 74 74 69 6e 67 73 20 66 6f 72 20 33 32 2d 62 69  ttings for 32-bi
23a30 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
23a40 2f 20 20 20 20 20 20 20 20 20 61 70 70 6c 69 63  /         applic
23a50 61 74 69 6f 6e 73 20 72 75 6e 6e 69 6e 67 20 6f  ations running o
23a60 6e 20 61 20 36 34 2d 62 69 74 20 6f 70 65 72 61  n a 64-bit opera
23a70 74 69 6e 67 20 73 79 73 74 65 6d 2e 0d 0a 20 20  ting system...  
23a80 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
23a90 20 20 20 20 20 54 69 63 6b 65 74 20 5b 61 30 36       Ticket [a06
23aa0 37 37 33 30 39 66 30 5d 20 68 61 73 20 66 75 72  77309f0] has fur
23ab0 74 68 65 72 20 64 65 74 61 69 6c 73 2e 0d 0a 20  ther details... 
23ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
23ad0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23ae0 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
23af0 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65  "{0}{1}", RootKe
23b00 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
23b10 20 20 20 20 20 20 20 20 21 70 65 72 55 73 65 72          !perUser
23b20 20 26 26 20 77 6f 77 36 34 20 26 26 20 49 73 36   && wow64 && Is6
23b30 34 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d  4BitProcess() ?.
23b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b50 20 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36       "\\" + Wow6
23b60 34 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74  4SubKeyName : St
23b70 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20  ring.Empty);..  
23b80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23b90 20 20 20 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 2f  ////////////////
23bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23be0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
23bf0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53  atic string GetS
23c00 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 0d  ystemDirectory(.
23c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
23c20 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
23c30 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
23c40 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a  {..#if WINDOWS..
23c50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23c60 77 6f 77 36 34 29 0d 0a 20 20 20 20 20 20 20 20  wow64)..        
23c70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23c80 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65         if (syste
23c90 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20  mDirectoryWow64 
23ca0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
23cb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cd0 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
23ce0 57 6f 77 36 34 20 3d 0d 0a 20 20 20 20 20 20 20  Wow64 =..       
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d00 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
23d10 68 6f 64 73 2e 47 65 74 53 79 73 74 65 6d 44 69  hods.GetSystemDi
23d20 72 65 63 74 6f 72 79 28 29 3b 0d 0a 20 20 20 20  rectory();..    
23d30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23d50 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69   return systemDi
23d60 72 65 63 74 6f 72 79 57 6f 77 36 34 3b 0d 0a 20  rectoryWow64;.. 
23d70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
23d80 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
23d90 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
23da0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23db0 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65         if (syste
23dc0 6d 44 69 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75  mDirectory == nu
23dd0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
23de0 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44           systemD
23df0 69 72 65 63 74 6f 72 79 20 3d 20 45 6e 76 69 72  irectory = Envir
23e00 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69 72  onment.SystemDir
23e10 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20  ectory;....     
23e20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23e30 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72  n systemDirector
23e40 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
23e50 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
23e60 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
23e70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ec0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
23ed0 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 53  region Generic S
23ee0 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a  tring Handling..
23ef0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23f00 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
23f10 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
23f20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
23f30 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
23f40 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
23f50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
23f60 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23f80 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d  eturn "<null>";.
23f90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
23fa0 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20  tring result;.. 
23fb0 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20             Type 
23fc0 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47 65 74  type = value.Get
23fd0 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Type();....     
23fe0 20 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20         if (type 
23ff0 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65  == typeof(XmlEle
24000 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20  ment))..        
24010 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24020 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
24030 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c  t element = (Xml
24040 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a  Element)value;..
24050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24060 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65    result = eleme
24070 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20  nt.OuterXml;..  
24080 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24090 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
240a0 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
240b0 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20  (Version))..    
240c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
240d0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
240e0 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28 56 65  on version = (Ve
240f0 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a  rsion)value;....
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24110 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e  result = String.
24120 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76  Format("v{0}", v
24130 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  ersion);..      
24140 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24150 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
24160 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24170 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
24180 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e   = value.ToStrin
24190 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  g();....        
241a0 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
241b0 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d  lt.Length == 0).
241c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
241d0 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c 65 6d       return "<em
241e0 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  pty>";....      
241f0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
24200 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
24210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24220 20 20 20 20 20 20 20 74 79 70 65 2e 49 73 53 75         type.IsSu
24230 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f 66 28  bclassOf(typeof(
24240 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20 22 7b  ValueType)) ? "{
24250 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c  0}" : "\"{0}\"",
24260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24270 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b 0d 0a        result);..
24280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24290 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
242a0 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
242b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
242c0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
242d0 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24320 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
24330 20 41 73 73 65 6d 62 6c 79 20 41 74 74 72 69 62   Assembly Attrib
24340 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ute Handling..  
24350 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
24360 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
24370 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
24380 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
24390 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
243a0 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bly..           
243b0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
243c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
243d0 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
243e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
243f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24400 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
24410 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
24430 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66 69  (assembly.IsDefi
24440 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ned(..          
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c    typeof(Assembl
24470 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74  yConfigurationAt
24480 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29  tribute), false)
24490 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
244a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244c0 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67    AssemblyConfig
244d0 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65  urationAttribute
244e0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d   configuration =
244f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41                (A
24510 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
24520 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 0d 0a  tionAttribute)..
24530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24540 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
24550 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41 74  mbly.GetCustomAt
24560 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20 20  tributes(..     
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24580 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
24590 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67  f(AssemblyConfig
245a0 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65  urationAttribute
245b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245d0 20 20 20 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a      false)[0];..
245e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
245f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24600 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   configuration.C
24610 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b 0d 0a 20  onfiguration;.. 
24620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24630 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
24640 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24650 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24670 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24680 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
24690 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
246a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
246b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
246c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
246d0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
246e0 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24730 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
24740 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
24750 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74  g GetAssemblyTit
24760 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
24770 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
24780 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
24790 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
247a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
247b0 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
247c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247e0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
247f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24800 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24810 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e  assembly.IsDefin
24820 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed(..           
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24840 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79   typeof(Assembly
24850 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c  TitleAttribute),
24860 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20   false))..      
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
24880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24890 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
248a0 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 20  yTitleAttribute 
248b0 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20  title =..       
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248d0 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79 54 69       (AssemblyTi
248e0 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d 0a 20  tleAttribute).. 
248f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24900 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d             assem
24910 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41 74 74  bly.GetCustomAtt
24920 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20  ributes(..      
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24940 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
24950 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
24960 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29  tribute), false)
24970 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24990 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54 69 74  return title.Tit
249a0 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le;..           
249b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
249c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
249d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
249e0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
249f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
24a10 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24a30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
24a50 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
24a60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
24a70 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
24a80 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24ad0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e         #region .
24ae0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 48 61  NET Framework Ha
24af0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
24b00 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
24b10 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f  tring GetFramewo
24b20 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  rkRootKeyName(..
24b30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
24b40 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
24b50 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
24b60 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
24b70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
24b80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24b90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
24ba0 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e  0}\\Microsoft\\.
24bb0 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a  NETFramework",..
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bd0 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70  GetRootKeyName(p
24be0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 29 3b  erUser, wow64));
24bf0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
24c00 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24c50 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24c60 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
24c70 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e  GetFrameworkKeyN
24c80 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
24c90 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
24ca0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
24cb0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
24cc0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
24ce0 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
24cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
24d00 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
24d10 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
24d20 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
24d30 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
24d40 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
24d50 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69  g format = !Stri
24d60 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
24d70 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f  (platformName) ?
24d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24d90 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66    "{0}\\Microsof
24da0 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33  t\\{1}\\v{2}\\{3
24db0 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  }" :..          
24dc0 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72        "{0}\\Micr
24dd0 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d  osoft\\{1}\\v{2}
24de0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
24df0 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
24e00 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47  Format(format, G
24e10 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  etRootKeyName(pe
24e20 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a  rUser, wow64),..
24e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e40 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
24e50 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
24e60 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d   platformName);.
24e70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
24e80 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24ed0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
24ee0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
24ef0 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  etImageRuntimeVe
24f00 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  rsion(..        
24f10 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
24f20 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
24f30 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
24f40 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
24f50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
24f70 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
24f80 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
24f90 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
24fa0 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c  .ReflectionOnlyL
24fb0 6f 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65  oadFrom(fileName
24fc0 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
24fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24fe0 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
24ff0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25010 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61  urn assembly.Ima
25020 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
25030 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
25050 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
25060 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25070 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
25080 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
25090 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
250a0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
250b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
250c0 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25110 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
25120 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
25130 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
25140 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
25150 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
25160 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
25170 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
25180 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
25190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
251a0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
251b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
251c0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
251d0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
251e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
251f0 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
25200 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
25210 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25220 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
25230 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
25240 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
25250 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
25270 74 4b 65 79 2c 20 47 65 74 46 72 61 6d 65 77 6f  tKey, GetFramewo
25280 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  rkRootKeyName(pe
25290 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a  rUser, wow64),..
252a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252b0 20 20 20 20 66 61 6c 73 65 2c 20 77 68 61 74 49      false, whatI
252c0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
252d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
252e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
252f0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
25320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25330 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
25340 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
25350 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25370 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f  key, "InstallRoo
25380 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66  t", null, whatIf
25390 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
253b0 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74  f (!(value is st
253c0 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20  ring))..        
253d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
253e0 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
253f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
25400 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28  rn Path.Combine(
25410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25420 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 76 61        (string)va
25430 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lue, String.Form
25440 61 74 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65  at("v{0}", frame
25450 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a  workVersion));..
25460 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
25470 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25480 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
25490 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
254e0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
254f0 6f 6e 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b  on Per-Framework
25500 2f 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69  /Platform Handli
25510 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
25520 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
25530 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77  InitializeFramew
25540 6f 72 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20  orkList(..      
25550 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
25560 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
25570 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
25580 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
25590 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
255a0 20 20 20 20 20 20 72 65 66 20 46 72 61 6d 65 77        ref Framew
255b0 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
255c0 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20  kList..         
255d0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
255e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
255f0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d  (frameworkList =
25600 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25610 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
25620 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46 72 61  rkList = new Fra
25630 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d  meworkList();...
25640 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
25650 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52  (frameworkList.R
25660 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
25670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25680 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
25690 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ootKey = rootKey
256a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
256b0 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
256f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25700 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
25710 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
25720 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
25730 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25740 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
25750 73 74 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53  st.Names = new S
25760 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
25770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25780 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
25790 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
257a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
257b0 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20  Desktop)..      
257c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
257d0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
257e0 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65  s.Add(".NETFrame
257f0 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  work");....     
25800 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
25810 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
25820 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
25830 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61  guration.NoCompa
25840 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
25850 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25860 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
25870 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
25880 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
25890 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20  Framework");..  
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258b0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
258c0 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
258d0 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
258e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
258f0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
25900 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
25910 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
25920 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
25930 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25940 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25950 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
259a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
259b0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  (frameworkList.V
259c0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
259d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
259e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
259f0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
25a00 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65  ersions = new Ve
25a10 72 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20  rsionMap();.... 
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25a30 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
25a40 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
25a50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
25a60 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
25a70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a90 56 65 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b  VersionList desk
25aa0 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  topVersionList =
25ab0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
25ac0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
25ad0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
25ae0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
25af0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
25b00 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
25b10 32 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20)..           
25b20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
25b30 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
25b40 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
25b50 32 2c 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a  2, 0, 50727));..
25b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25b70 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
25b80 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
25b90 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
25ba0 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a  ion.NoNetFx40)..
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bc0 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
25bd0 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
25be0 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c  ew Version(4, 0,
25bf0 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20   30319));....   
25c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c10 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
25c20 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
25c30 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
25c40 6f 4e 65 74 46 78 34 35 29 0d 0a 20 20 20 20 20  oNetFx45)..     
25c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c60 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
25c70 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
25c80 72 73 69 6f 6e 28 34 2c 20 35 2c 20 35 30 37 30  rsion(4, 5, 5070
25c90 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  9));....        
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
25cb0 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
25cc0 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d  ns.Add(".NETFram
25cd0 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20  ework",..       
25ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cf0 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
25d00 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist);..         
25d10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25d20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25d30 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
25d40 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
25d50 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70  iguration.NoComp
25d60 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  act)..          
25d70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
25d90 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
25da0 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  ons.Add(".NETCom
25db0 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 2c 0d  pactFramework",.
25dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25dd0 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72           new Ver
25de0 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65 72  sionList(new Ver
25df0 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  sion[] {..      
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e10 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c    new Version(2,
25e20 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77 20 56   0, 0, 0), new V
25e30 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30 2c 20  ersion(3, 5, 0, 
25e40 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
25e50 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a 20 20          }));..  
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ed0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
25ee0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
25ef0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
25f00 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25f10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25f20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
25f30 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
25f40 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69  Names = new Stri
25f50 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
25f60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25f70 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
25f80 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
25f90 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
25fa0 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
25fb0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
25fc0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
25fd0 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c 6c 29  mNames.Add(null)
25fe0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25ff0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
26000 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
26010 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
26020 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20  on.NoCompact).. 
26030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
26040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26050 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
26060 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
26070 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50 43 22  s.Add("PocketPC"
26080 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26090 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
260a0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
260b0 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74 70 68  mes.Add("Smartph
260c0 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  one");..        
260d0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
260e0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
260f0 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57 69 6e  rmNames.Add("Win
26100 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20 20 20  dowsCE");..     
26110 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26120 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
26130 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26140 20 20 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 2f 2f  ////////////////
26180 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
26190 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
261a0 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61  tic bool HaveFra
261b0 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
261c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
261d0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
261e0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
261f0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
26200 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
26210 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
26220 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
26230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
26240 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
26250 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
26260 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
26270 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26280 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
26290 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
262a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
262b0 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
262c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
262d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
262e0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
262f0 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b   = GetFrameworkK
26300 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
26310 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
26320 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
26330 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
26340 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  rmName, perUser,
26350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26360 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20    wow64);....   
26370 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
26380 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
26390 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
263a0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
263b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
263c0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
263d0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
263e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
263f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26410 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
26420 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26430 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
26440 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
26450 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74          if (plat
26460 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  formName != null
26470 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20  ) // NOTE: Skip 
26480 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20  non-desktop...  
26490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264a0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
264b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
264c0 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
264d0 72 79 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72  ry = GetFramewor
264e0 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  kDirectory(..   
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
26510 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 65 72 55  orkVersion, perU
26520 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  ser, wow64, what
26530 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
26540 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
26550 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26560 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
26570 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
26580 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
265b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
265c0 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
265d0 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
265e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
265f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
26600 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
26610 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
26620 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
26630 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
26640 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
26650 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
26660 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
26670 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
26680 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
26690 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
266a0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
266b0 66 6f 75 6e 64 20 76 69 61 20 64 69 72 65 63 74  found via direct
266c0 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  ory {1}.",..    
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266e0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
266f0 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f  workVersion), Fo
26700 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
26710 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
26720 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
26730 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26750 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
26760 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
26770 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f  ////////////////
267c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
267d0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
267e0 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65  c bool HaveFrame
267f0 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  workRegistry(.. 
26800 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
26810 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
26820 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
26830 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
26840 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
26850 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
26860 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
26870 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
26880 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
26890 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
268a0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
268b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
268c0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
268d0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
268e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
268f0 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
26900 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
26910 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
26920 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
26930 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e  GetFrameworkKeyN
26940 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
26950 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
26960 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
26970 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
26980 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20  ame, perUser,.. 
26990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
269a0 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
269b0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
269c0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
269d0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
269e0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
269f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a00 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
26a10 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
26a20 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
26a30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26a50 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
26a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a70 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26a80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26a90 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72       if (platfor
26aa0 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f  mName != null) /
26ab0 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e  / NOTE: Skip non
26ac0 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20  -desktop...     
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
26ae0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20  eturn true;.... 
26af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
26b00 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
26b10 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
26b20 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
26b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b40 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
26b50 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
26b60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
26b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b80 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
26b90 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61 20  k {0} found via 
26ba0 72 65 67 69 73 74 72 79 20 7b 31 7d 2e 22 2c 0d  registry {1}.",.
26bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26bc0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
26bd0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
26be0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65  ), ForDisplay(ke
26bf0 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  yName)),..      
26c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
26c10 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
26c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c30 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
26c40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26c50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26c60 20 20 20 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 2f  ////////////////
26ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26cb0 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
26cc0 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
26cd0 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
26ce0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26cf0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f  e static bool Fo
26d00 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f  rEachFrameworkCo
26d10 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20 20 20  nfig(..         
26d20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20     MockRegistry 
26d30 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
26d40 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
26d50 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
26d60 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
26d70 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67   FrameworkConfig
26d80 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
26d90 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
26da0 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20  string version, 
26db0 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61  /* NOTE: Optiona
26dc0 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  l. */..         
26dd0 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
26de0 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
26df0 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
26e00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
26e10 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
26e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
26e30 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
26e40 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
26e50 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
26e60 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
26e70 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
26e80 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
26e90 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
26ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
26eb0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
26ec0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
26ed0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
26ee0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
26ef0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
26f00 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
26f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
26f20 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
26f30 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
26f40 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
26f50 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
26f60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26f70 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20     if (registry 
26f80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
26f90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26fa0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
26fb0 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74   "invalid regist
26fc0 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
26fd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
26fe0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
26ff0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27000 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
27010 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ist == null)..  
27020 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27040 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72  or = "invalid fr
27050 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a  amework list";..
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27070 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
27080 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27090 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
270a0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
270b0 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  Key = frameworkL
270c0 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a  ist.RootKey;....
270d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
270e0 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  rootKey == null)
270f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27110 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
27120 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20  d root key";..  
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27140 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
27150 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27160 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 49            if (!I
27170 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65  sSupportedRootKe
27180 79 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74  y(registry, root
27190 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  Key))..         
271a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
271b0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72        error = "r
271c0 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20  oot key must be 
271d0 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d  per-user or per-
271e0 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20  machine";..     
271f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27200 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
27210 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27220 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
27230 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
27240 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27250 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27260 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27270 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61  "no framework na
27280 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
272a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
272b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
272c0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
272d0 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
272e0 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
272f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27310 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
27320 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e  rk versions foun
27330 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
27340 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27350 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27360 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27370 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
27380 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
27390 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
273a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
273b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
273c0 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e  = "no platform n
273d0 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
273e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
273f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
27400 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27410 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
27420 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
27430 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65  s.Count != frame
27440 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
27450 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20  mNames.Count).. 
27460 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
27480 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
27490 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e  mat("framework n
274a0 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f  ame count {0} do
274b0 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
274c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274d0 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20  "match platform 
274e0 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c  name count {1}",
274f0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
27500 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20  ames.Count,..   
27510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27520 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
27530 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75  latformNames.Cou
27540 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
27550 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
27560 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
27570 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27580 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
27590 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
275a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
275b0 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78  mes.Count; index
275c0 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
275d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
275e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
275f0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
27600 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f   Grab the name o
27610 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20  f the framework 
27620 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65  (e.g. ".NETFrame
27630 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20  work")..        
27640 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
27650 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
27660 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65   the platform (e
27670 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29  .g. "WindowsCE")
27680 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27690 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
276a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
276b0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72  ameworkName = fr
276c0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
276d0 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  s[index];..     
276e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
276f0 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d  g platformName =
27700 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
27710 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64  latformNames[ind
27720 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex];....        
27730 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
27750 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f  OTE: Skip all no
27760 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65 77  n-desktop framew
27770 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74 68  orks (i.e. if th
27780 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20  e platform..    
27790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
277a0 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74       name is not
277b0 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20   null)...       
277c0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
277e0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
277f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27800 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
27810 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
27820 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
27840 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 73  NOTE: Grab the s
27850 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  upported version
27860 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69 63  s of this partic
27870 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20  ular..          
27880 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
27890 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20  ramework...     
278a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
278b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
278c0 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65  ersionList frame
278d0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b  workVersionList;
278e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
278f0 20 20 20 20 69 66 20 28 76 65 72 73 69 6f 6e 20      if (version 
27900 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
27910 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27930 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
27940 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
27950 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69 64  : Manual overrid
27960 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66  e of the *ONE* f
27970 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e  ramework version
27980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27990 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
279a0 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  o process...    
279b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
279d0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
279e0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e  kVersionList = n
279f0 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29  ew VersionList()
27a00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27a10 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
27a20 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
27a30 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65 72 73  new Version(vers
27a40 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion));..        
27a50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27a60 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
27a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27a90 20 20 20 20 20 20 20 20 69 66 20 28 21 66 72 61          if (!fra
27aa0 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
27ab0 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  ons.TryGetValue(
27ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
27ae0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74  ameworkName, out
27af0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
27b00 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20  nList) ||..     
27b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72     (frameworkVer
27b30 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  sionList == null
27b40 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
27b50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b70 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
27b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
27ba0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27bb0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
27bc0 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65  h (Version frame
27bd0 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66  workVersion in f
27be0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
27bf0 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ist)..          
27c00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27c10 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
27c20 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
27c30 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
27c40 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20  y.Lower,..      
27c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c60 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
27c70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
27c80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
27c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ca0 20 20 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f          "framewo
27cb0 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72  rkName = {0}, fr
27cc0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d  ameworkVersion =
27cd0 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {1}, " +..     
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cf0 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65     "platformName
27d00 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70   = {2}", ForDisp
27d10 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  lay(frameworkNam
27d20 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
27d40 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
27d50 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
27d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d70 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70      ForDisplay(p
27d80 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74  latformName)), t
27d90 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
27da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27db0 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65 46        if (!HaveF
27dc0 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
27dd0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27df0 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
27e00 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
27e10 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
27e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e30 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
27e40 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  ame, perUser, wo
27e50 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
27e60 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
27e70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e90 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
27ea0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
27eb0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
27ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
27ee0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
27ef0 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f10 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
27f20 72 61 6d 65 77 6f 72 6b 20 64 69 72 65 63 74 6f  ramework directo
27f30 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  ry not found, sk
27f40 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
27f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f60 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
27f70 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f90 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
27fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27fd0 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
27fe0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27ff0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
28000 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
28010 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
28020 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47  ng directory = G
28030 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  etFrameworkDirec
28040 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
28050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28060 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
28070 6b 56 65 72 73 69 6f 6e 2c 20 70 65 72 55 73 65  kVersion, perUse
28080 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  r, wow64, whatIf
28090 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
280a0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
280b0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
280c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
280d0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
280e0 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
280f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28120 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
28130 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
28140 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28160 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
28170 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
28180 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
28190 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
281a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281b0 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
281c0 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20  k {0} directory 
281d0 69 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d  is invalid, " +.
281e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
281f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b               "sk
28200 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44  ipping...", ForD
28210 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
28220 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
28230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28240 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
28250 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
28260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28270 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
28280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28290 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
282a0 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
282b0 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62  tory = Path.Comb
282c0 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
282d0 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20  Config");....   
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282f0 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
28300 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
28310 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
28320 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28340 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
28350 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
28360 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28380 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
28390 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
283a0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
283b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
283c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283d0 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
283e0 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72  ork {0} director
283f0 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 22  y {1} does not "
28400 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
28410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28420 22 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e 67  "exist, skipping
28430 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
28440 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
28450 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
28460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28470 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
28480 63 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61  ctory)), traceCa
28490 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284b0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
284c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
284e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
284f0 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ng fileName = Pa
28500 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
28510 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63  tory, "machine.c
28520 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28540 69 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73  if (!File.Exists
28550 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  (fileName))..   
28560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28570 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28580 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
28590 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
285a0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
285b0 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285d0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
285e0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
285f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
28600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28610 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
28620 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
28630 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e   file {1} does n
28640 6f 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20  ot exist, " +.. 
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28660 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
28670 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
28680 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
28690 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
286a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286b0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
286c0 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63  fileName)), trac
286d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
286e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286f0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
28700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28710 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
28730 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d  ool localSaved =
28740 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
28750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28760 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
28770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28780 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
28790 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20  ame, invariant, 
287a0 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f  name, descriptio
287b0 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  n, typeName,..  
287c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287d0 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62            assemb
287e0 6c 79 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61  lyName, clientDa
287f0 74 61 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ta, perUser, wow
28800 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
28810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28820 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
28830 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
28840 2c 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64  , ref localSaved
28850 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28870 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
28880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28890 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
288a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
288b0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
288c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
288d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
288e0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
288f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28910 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f            if (lo
28920 63 61 6c 53 61 76 65 64 20 26 26 20 21 73 61 76  calSaved && !sav
28930 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
28940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28950 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
28960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
28980 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
28990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289a0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
289b0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
289c0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
289d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289f0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
28a00 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
28a10 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a40 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b 30  "localSaved = {0
28a50 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c  }, saved = {1}",
28a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a80 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63    ForDisplay(loc
28a90 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69 73  alSaved), ForDis
28aa0 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a 20  play(saved)),.. 
28ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
28ad0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
28ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28af0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
28b00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
28b10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28b20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
28b30 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
28b40 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b90 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
28ba0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
28bb0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
28bc0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
28bd0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
28be0 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d  bool ForEachFram
28bf0 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
28c00 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
28c10 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72  Registry registr
28c20 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
28c30 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
28c40 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20  ameworkList,..  
28c50 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
28c60 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62  orkRegistryCallb
28c70 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
28c80 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
28c90 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f  g version, /* NO
28ca0 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f  TE: Optional. */
28cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
28cc0 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
28cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28ce0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
28cf0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
28d00 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
28d10 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
28d20 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
28d30 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
28d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28d50 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
28d60 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
28d70 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
28d80 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
28d90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28da0 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d   if (registry ==
28db0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28dc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28dd0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
28de0 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79  invalid registry
28df0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
28e00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
28e10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28e20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28e30 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
28e40 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
28e50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28e60 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
28e70 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
28e80 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20  ework list";..  
28e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
28ea0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
28eb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28ec0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
28ed0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
28ee0 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  y = frameworkLis
28ef0 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  t.RootKey;....  
28f00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
28f10 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
28f20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
28f40 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
28f50 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20  root key";..    
28f60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28f70 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
28f80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28f90 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53          if (!IsS
28fa0 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28  upportedRootKey(
28fb0 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65  registry, rootKe
28fc0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
28fd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28fe0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f      error = "roo
28ff0 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65  t key must be pe
29000 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61  r-user or per-ma
29010 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20  chine";..       
29020 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29030 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
29040 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29050 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
29060 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20  rkList.Names == 
29070 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29080 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29090 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
290a0 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  o framework name
290b0 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
290c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
290d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
290e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
290f0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
29100 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
29110 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
29120 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29130 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
29140 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
29150 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22   versions found"
29160 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29170 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29190 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
291a0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
291b0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
291c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
291d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
291e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
291f0 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  "no platform nam
29200 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
29210 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
29220 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
29230 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29240 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
29250 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
29260 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f  Count != framewo
29270 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
29280 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20  ames.Count)..   
29290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
292a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
292b0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
292c0 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  t("framework nam
292d0 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73  e count {0} does
292e0 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20   not " +..      
292f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
29300 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61  atch platform na
29310 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66  me count {1}", f
29320 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
29330 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  es.Count,..     
29340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
29350 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
29360 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
29370 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29380 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
29390 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
293a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
293b0 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
293c0 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72   = 0; index < fr
293d0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
293e0 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b  s.Count; index++
293f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29410 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
29420 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
29430 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  rab the name of 
29440 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65  the framework (e
29450 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f  .g. ".NETFramewo
29460 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rk")..          
29470 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
29480 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  nd the name of t
29490 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67  he platform (e.g
294a0 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d  . "WindowsCE")..
294b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
294c0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
294d0 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
294e0 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d  eworkName = fram
294f0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b  eworkList.Names[
29500 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  index];..       
29510 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
29520 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66  platformName = f
29530 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
29540 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78  tformNames[index
29550 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
29560 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
29570 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
29580 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70  E: Grab the supp
29590 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f  orted versions o
295a0 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  f this particula
295b0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
295c0 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d     //       fram
295d0 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20  ework...        
295e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
295f0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
29600 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  ionList framewor
29610 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d  kVersionList;...
29620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29630 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20   if (version != 
29640 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29650 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29680 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d        // NOTE: M
29690 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f  anual override o
296a0 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d  f the *ONE* fram
296b0 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20  ework version.. 
296c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296d0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70     //       to p
296e0 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  rocess...       
296f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
29700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29710 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65       frameworkVe
29720 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20  rsionList = new 
29730 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
29740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29750 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72      frameworkVer
29760 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
29770 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e   Version(version
29780 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
29790 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
297a0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
297c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297d0 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
297e0 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
297f0 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29810 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
29820 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72  workName, out fr
29830 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
29840 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  st) ||..        
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29860 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
29870 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d  nList == null)).
29880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29890 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
298a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298b0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
298c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
298d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
298e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
298f0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
29900 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
29910 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d  kVersion in fram
29920 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
29930 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
29940 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29950 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
29960 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
29970 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
29980 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
29990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
299a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
299b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
299c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299e0 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e       "frameworkN
299f0 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65  ame = {0}, frame
29a00 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31  workVersion = {1
29a10 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
29a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a30 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20  "platformName = 
29a40 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {2}", ForDisplay
29a50 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c  (frameworkName),
29a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29a70 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
29a80 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
29a90 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ab0 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74   ForDisplay(plat
29ac0 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63  formName)), trac
29ad0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29af0 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d     if (!HaveFram
29b00 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
29b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
29b30 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
29b40 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
29b50 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b70 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
29b80 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
29b90 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
29ba0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
29bb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bd0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
29be0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
29bf0 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
29c20 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
29c30 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
29c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c50 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
29c60 77 6f 72 6b 20 72 65 67 69 73 74 72 79 20 6e 6f  work registry no
29c70 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e  t found, skippin
29c80 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  g...",..        
29c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ca0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
29cb0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
29cd0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
29ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
29cf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29d00 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
29d10 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
29d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29d50 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
29d60 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
29d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d80 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
29d90 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
29da0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
29db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29dc0 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
29dd0 72 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61  rmName, clientDa
29de0 74 61 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ta, perUser, wow
29df0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
29e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e10 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
29e20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
29e30 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
29e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29e70 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29ea0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29eb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29ec0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
29ed0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
29ee0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
29ef0 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
29f50 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c  egion Per-Visual
29f60 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20   Studio Version 
29f70 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
29f80 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29f90 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
29fa0 56 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20  VsList(..       
29fb0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
29fc0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
29fd0 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69             Confi
29fe0 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
29ff0 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
2a000 20 20 20 20 20 72 65 66 20 56 73 4c 69 73 74 20       ref VsList 
2a010 76 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  vsList..        
2a020 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2a030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2a040 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c   (vsList == null
2a050 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a060 20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20     vsList = new 
2a070 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  VsList();....   
2a080 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
2a090 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e  ist.RootKey == n
2a0a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2a0b0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f        vsList.Roo
2a0c0 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d  tKey = rootKey;.
2a0d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2a0e0 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f  f (vsList.Versio
2a0f0 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
2a100 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a110 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
2a120 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65  st.Versions = ne
2a130 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
2a140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a150 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a160 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a170 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a180 6e 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20  n.NoVs2005)..   
2a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1a0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a1b0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a1c0 28 38 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35  (8, 0)); // 2005
2a1d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a1e0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a1f0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a200 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a210 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20  n.NoVs2008)..   
2a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a230 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a240 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a250 28 39 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38  (9, 0)); // 2008
2a260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a270 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a280 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a290 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a2a0 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20  n.NoVs2010)..   
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2c0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a2d0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a2e0 28 31 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30  (10, 0));// 2010
2a2f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a300 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a310 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a320 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a330 6e 2e 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20  n.NoVs2012)..   
2a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a350 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a360 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a370 28 31 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32  (11, 0));// 2012
2a380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a390 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a3a0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a3b0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a3c0 6e 2e 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20  n.NoVs2013)..   
2a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3e0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a3f0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a400 28 31 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33  (12, 0));// 2013
2a410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a420 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2a430 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2a480 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2a490 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
2a4a0 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  eVsVersion(..   
2a4b0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2a4c0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2a4d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2a4e0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2a4f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2a500 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
2a510 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a520 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2a530 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2a540 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2a550 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2a560 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2a570 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
2a580 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2a590 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2a5a0 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
2a5b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a5c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2a5d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2a5e0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
2a5f0 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
2a600 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
2a610 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  x, perUser, wow6
2a620 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2a630 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2a640 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2a650 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2a660 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a680 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2a690 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
2a6a0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2a6b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a6c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2a6d0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a710 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
2a720 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2a730 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
2a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2a750 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22  ey, "InstallDir"
2a760 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
2a770 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2a790 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69  (!(value is stri
2a7a0 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng))..          
2a7b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a7c0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2a7d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a7e0 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73  g directory = (s
2a7f0 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a  tring)value;....
2a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a810 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
2a820 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f  lOrEmpty(directo
2a830 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
2a840 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a850 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2a860 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2a870 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
2a880 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2a8b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a8c0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2a8d0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2a8e0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
2a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a900 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2a910 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2a920 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2a930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a940 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74        "Visual St
2a950 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69  udio {0} found i
2a960 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e  n directory {1}.
2a970 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2a980 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2a990 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46  ay(vsVersion), F
2a9a0 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74  orDisplay(direct
2a9b0 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ory)),..        
2a9c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2a9d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a9f0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2aa00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2aa10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2aa20 20 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 2f 2f 2f  ////////////////
2aa60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2aa70 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2aa80 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2aa90 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2aaa0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2aab0 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
2aac0 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
2aad0 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2aae0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20     MockRegistry 
2aaf0 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
2ab00 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73         VsList vs
2ab10 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
2ab20 20 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52     VisualStudioR
2ab30 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20  egistryCallback 
2ab40 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
2ab50 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
2ab60 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
2ab70 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
2ab80 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
2ab90 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
2aba0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2abb0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2abc0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2abd0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2abe0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2abf0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2ac00 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2ac10 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2ac20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2ac30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2ac40 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2ac50 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2ac60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ac70 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
2ac80 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2ac90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2aca0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2acb0 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
2acc0 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
2acd0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ace0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2acf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ad00 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
2ad10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ad20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ad30 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2ad40 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22  invalid VS list"
2ad50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ad60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2ad70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ad80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
2ad90 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2ada0 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e  ootKey = vsList.
2adb0 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
2adc0 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
2add0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2ade0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2ae00 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
2ae10 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
2ae20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ae30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2ae40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ae50 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70        if (!IsSup
2ae60 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65  portedRootKey(re
2ae70 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29  gistry, rootKey)
2ae80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ae90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aea0 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
2aeb0 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
2aec0 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
2aed0 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
2aee0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2aef0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2af00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2af10 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65     if (vsList.Ve
2af20 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
2af30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af50 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76  error = "no VS v
2af60 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
2af70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2af80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2af90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2afa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
2afb0 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73  each (Version vs
2afc0 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73  Version in vsLis
2afd0 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20  t.Versions)..   
2afe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2b000 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2b010 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2b020 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
2b030 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2b040 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2b050 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2b060 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2b080 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22  vsVersion = {0}"
2b090 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56  , ForDisplay(vsV
2b0a0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
2b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2b0c0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2b0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b0e0 20 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72    if (!HaveVsVer
2b0f0 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
2b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b110 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
2b120 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73  n, suffix, perUs
2b130 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  er, wow64, whatI
2b140 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2b150 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2b160 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2b170 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2b190 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2b1a0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2b1b0 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2b1e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
2b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b200 20 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20          "Visual 
2b210 53 74 75 64 69 6f 20 76 65 72 73 69 6f 6e 20 6e  Studio version n
2b220 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69  ot found, skippi
2b230 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ng...",..       
2b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b250 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2b260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b270 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2b280 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b2a0 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
2b2b0 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2d0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2f0 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a  if (!callback(..
2b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b310 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2b320 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66   vsVersion, suff
2b330 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 63 6c 69  ix, package, cli
2b340 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b360 20 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34    perUser, wow64
2b370 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
2b380 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2b390 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b3a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2b3b0 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
2b3c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2b420 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2b430 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2b440 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2b450 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b4a0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2b4b0 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46   Configuration F
2b4c0 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ile Handling..  
2b4d0 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
2b4e0 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
2b4f0 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
2b500 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2b510 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
2b520 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  dDbProviderFacto
2b530 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2b540 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2b550 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2b560 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
2b570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2b580 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
2b590 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2b5a0 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
2b5b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2b5c0 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
2b5d0 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
2b5e0 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
2b5f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2b600 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2b610 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2b620 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2b630 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
2b640 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
2b650 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2b660 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2b670 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2b680 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
2b690 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  rty = false;..  
2b6a0 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63            XmlDoc
2b6b0 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d  ument document =
2b6c0 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74   new XmlDocument
2b6d0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2b6e0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73     document.Pres
2b6f0 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d  erveWhitespace =
2b700 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2b710 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61      document.Loa
2b720 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  d(fileName);....
2b730 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
2b740 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e  lement addElemen
2b750 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
2b760 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
2b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b780 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
2b790 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
2b7a0 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73  , invariant)) as
2b7b0 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
2b7c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b7d0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75  addElement == nu
2b7e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2b7f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b800 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65      string[] ele
2b810 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20  mentNames = {.. 
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b830 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22     "system.data"
2b840 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46 61 63  , "DbProviderFac
2b850 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20  tories"..       
2b860 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20           };.... 
2b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
2b880 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f  mlElement previo
2b890 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20  usElement =..   
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8b0 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65   document.Docume
2b8c0 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f  ntElement; /* co
2b8d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a  nfiguration */..
2b8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b8f0 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e    foreach (strin
2b900 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e  g elementName in
2b910 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a   elementNames)..
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b930 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b940 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
2b950 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d  t = previousElem
2b960 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
2b970 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
2b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2b990 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58  lementName) as X
2b9a0 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
2b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9c0 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74    if (addElement
2b9d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2b9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ba00 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2ba10 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
2ba20 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a  CreateElement(..
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba40 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
2ba50 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e  entName, String.
2ba60 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  Empty);....     
2ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba80 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
2ba90 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61  nt.AppendChild(a
2baa0 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  ddElement);..   
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bac0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2bad0 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
2bae0 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64 64 45  usElement = addE
2baf0 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20  lement;..       
2bb00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2bb20 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  dElement = docum
2bb30 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e  ent.CreateElemen
2bb40 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2bb50 20 20 20 20 20 20 20 20 22 61 64 64 22 2c 20 53          "add", S
2bb60 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d  tring.Empty);...
2bb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb80 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
2bb90 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64  .AppendChild(add
2bba0 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20  Element);....   
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2bbc0 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2bbd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2bbe0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
2bbf0 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
2bc00 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
2bc10 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20  ute("name"),..  
2bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc30 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f    name, StringCo
2bc40 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2bc50 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2bc60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2bc70 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
2bc80 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65  tAttribute("name
2bc90 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ", name);..     
2bca0 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
2bcb0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2bcc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2bcd0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
2bce0 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65  ng.Equals(addEle
2bcf0 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74  ment.GetAttribut
2bd00 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d  e("invariant"),.
2bd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74 2c 20       invariant, 
2bd30 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
2bd40 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20  .Ordinal))..    
2bd50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2bd60 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
2bd70 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
2bd80 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 2c 20  te("invariant", 
2bd90 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20 20 20  invariant);..   
2bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2bdb0 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2bdc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2bdd0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
2bde0 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
2bdf0 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
2be00 75 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e  ute("description
2be10 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
2be20 20 20 20 20 20 20 20 20 20 64 65 73 63 72 69 70           descrip
2be30 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70  tion, StringComp
2be40 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
2be50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2be60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be70 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
2be80 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69  ttribute("descri
2be90 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74  ption", descript
2bea0 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
2beb0 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
2bec0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2bed0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2bee0 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79     string fullTy
2bef0 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e  peName = String.
2bf00 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d  Format("{0}, {1}
2bf10 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2bf20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73      typeName, as
2bf30 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  semblyName);....
2bf40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2bf50 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
2bf60 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
2bf70 72 69 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d  ribute("type"),.
2bf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bf90 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d       fullTypeNam
2bfa0 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  e, StringCompari
2bfb0 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
2bfc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2bfe0 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72  dElement.SetAttr
2bff0 69 62 75 74 65 28 22 74 79 70 65 22 2c 20 66 75  ibute("type", fu
2c000 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20  llTypeName);..  
2c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2c020 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2c030 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c040 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
2c050 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a  rty || whatIf)..
2c060 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c080 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
2c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2c0b0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2c0c0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
2c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0e0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2c0f0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2c100 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2c110 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
2c130 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22  ddElement = {0}"
2c140 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64  , ForDisplay(add
2c150 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20  Element)),..    
2c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c170 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2c180 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2c190 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
2c1a0 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
2c1b0 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
2c1c0 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29  t.Save(fileName)
2c1d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c1e0 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69       filesModifi
2c1f0 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed++;....       
2c200 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d           saved =
2c210 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2c220 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c230 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2c240 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2c250 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2c2a0 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
2c2b0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2c2c0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2c2d0 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2c2e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2c2f0 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69  ol RemoveDbProvi
2c300 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
2c310 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2c320 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
2c330 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
2c340 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
2c350 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2c360 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2c370 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2c380 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
2c390 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
2c3a0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2c3b0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2c3c0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2c3d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c3e0 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c  bool dirty = fal
2c3f0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2c400 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63   XmlDocument doc
2c410 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44  ument = new XmlD
2c420 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20  ocument();....  
2c430 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
2c440 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65  nt.PreserveWhite
2c450 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20  space = true;.. 
2c460 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2c470 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d  ent.Load(fileNam
2c480 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2c490 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64     XmlElement ad
2c4a0 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  dElement = docum
2c4b0 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
2c4c0 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
2c4d0 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
2c4e0 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64 64  rmat(XPathForAdd
2c4f0 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61  Element, invaria
2c500 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65  nt)) as XmlEleme
2c510 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nt;....         
2c520 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e     if (addElemen
2c530 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
2c540 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c550 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
2c560 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65  ement.ParentNode
2c570 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 61 64 64  .RemoveChild(add
2c580 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20  Element);..     
2c590 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
2c5a0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2c5b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c5c0 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
2c5d0 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20  t removeElement 
2c5e0 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63  = document.Selec
2c5f0 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20  tSingleNode(..  
2c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
2c610 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74  ring.Format(XPat
2c620 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e  hForRemoveElemen
2c630 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61  t, invariant)) a
2c640 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
2c650 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2c660 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 21  (removeElement !
2c670 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2c680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c690 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 45 6c          removeEl
2c6a0 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65  ement.ParentNode
2c6b0 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72 65 6d  .RemoveChild(rem
2c6c0 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20  oveElement);..  
2c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2c6e0 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2c6f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c700 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
2c710 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a  rty || whatIf)..
2c720 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c740 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
2c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c760 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2c770 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2c780 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
2c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7a0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2c7b0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2c7c0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2c7d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
2c7f0 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 2c  ddElement = {0},
2c800 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d   removeElement =
2c810 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c830 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c  ForDisplay(addEl
2c840 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73 70 6c  ement), ForDispl
2c850 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  ay(removeElement
2c860 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2c870 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2c880 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8a0 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
2c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8c0 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28    document.Save(
2c8d0 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
2c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
2c8f0 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a  lesModified++;..
2c900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c910 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
2c920 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2c930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2c940 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2c950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c960 20 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 2f 2f 2f  ////////////////
2c9a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c9b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2c9c0 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 44  ic bool ProcessD
2c9d0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2c9e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2c9f0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d  tring fileName,.
2ca00 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2ca10 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a  ing invariant,..
2ca20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ca30 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
2ca40 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
2ca50 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  cription,..     
2ca60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79         string ty
2ca70 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
2ca80 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
2ca90 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d  e assemblyName,.
2caa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
2cab0 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
2cac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2cad0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
2cae0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2caf0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2cb00 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
2cb10 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
2cb20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
2cb30 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2cb40 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
2cb50 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
2cb60 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
2cb70 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
2cb80 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2cb90 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2cba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
2cbb0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
2cbc0 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
2cbd0 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
2cbe0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
2cbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2cc00 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
2cc10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc30 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2cc40 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69   framework confi
2cc50 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  g callback data"
2cc60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2cc70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2cc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2cc90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2cca0 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
2ccb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ccc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ccd0 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  n RemoveDbProvid
2cce0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd00 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
2cd10 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ant, whatIf, ver
2cd20 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c  bose, ref saved,
2cd30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cd40 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2cd50 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
2cd60 20 20 20 20 20 41 64 64 44 62 50 72 6f 76 69 64       AddDbProvid
2cd70 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
2cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd90 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
2cda0 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72  ant, name, descr
2cdb0 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65  iption, typeName
2cdc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2cdd0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e         assemblyN
2cde0 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
2cdf0 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c  bose, ref saved,
2ce00 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
2ce10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2ce20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2ce30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ce50 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f  turn RemoveDbPro
2ce60 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce80 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
2ce90 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20  ariant, whatIf, 
2cea0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76  verbose, ref sav
2ceb0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
2cec0 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
2ced0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
2cee0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2cef0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2cf00 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
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 2f 2f 2f 2f 2f 2f  ////////////////
2cf50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2cf60 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c   #region Assembl
2cf70 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c 69  y Folders Handli
2cf80 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
2cf90 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2cfa0 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c  g GetAssemblyFol
2cfb0 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  dersKeyName(..  
2cfc0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2cfd0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
2cfe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2cff0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
2d000 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2d010 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
2d020 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
2d030 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
2d040 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2d050 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
2d060 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2d070 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d080 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2d090 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
2d0a0 20 72 65 67 69 73 74 72 79 20 6b 65 79 20 61 70   registry key ap
2d0b0 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79 73 20  pears to always 
2d0c0 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a  be 32-bit only..
2d0d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2d0e0 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f 62 61       (i.e. proba
2d0f0 62 6c 79 20 62 65 63 61 75 73 65 20 69 74 20 69  bly because it i
2d100 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 56  s only used by V
2d110 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20  isual..         
2d120 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75 64     //       Stud
2d130 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63 75 72  io, which is cur
2d140 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20 33 32  rently always 32
2d150 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20  -bit only)...   
2d160 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2d170 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d180 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67  format = !String
2d190 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70  .IsNullOrEmpty(p
2d1a0 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a  latformName) ?..
2d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1c0 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
2d1d0 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c  \{1}\\v{2}\\{3}\
2d1e0 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  \AssemblyFolders
2d1f0 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  Ex" :..         
2d200 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63         "{0}\\Mic
2d210 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32  rosoft\\{1}\\v{2
2d220 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
2d230 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsEx";....      
2d240 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
2d250 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61  ing.Format(forma
2d260 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d  t, GetRootKeyNam
2d270 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  e(perUser, wow64
2d280 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2d290 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
2d2a0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
2d2b0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
2d2c0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
2d2d0 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d320 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2d330 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2d340 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f   AddToAssemblyFo
2d350 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2d360 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2d370 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2d380 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2d390 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
2d3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2d3b0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
2d3c0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2d3d0 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
2d3e0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
2d3f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
2d400 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
2d410 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
2d420 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
2d430 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2d440 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2d450 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2d460 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2d470 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2d480 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2d490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2d4a0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2d4c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d4d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
2d4e0 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62  Name = GetAssemb
2d4f0 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65  lyFoldersKeyName
2d500 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d510 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
2d520 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2d530 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
2d540 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  , perUser,..    
2d550 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36              wow6
2d560 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2d570 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2d580 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2d590 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2d5a0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5c0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2d5d0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
2d5e0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2d5f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d600 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
2d610 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2d620 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d640 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2d650 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d670 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
2d680 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
2d690 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
2d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6b0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2d6c0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d6e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d700 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d710 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2d720 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
2d730 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2d740 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d  r.CreateSubKey(.
2d750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d760 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
2d770 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
2d780 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2d790 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7b0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
2d7c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2d800 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d820 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
2d830 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
2d840 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2d850 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d870 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
2d880 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2d8e0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2d8f0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2d910 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  ubKey, null, dir
2d920 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20  ectory, whatIf, 
2d930 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2d940 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2d950 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2d960 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d970 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2d980 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
2d9d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2d9e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2d9f0 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41  bool RemoveFromA
2da00 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
2da10 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2da20 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2da30 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2da40 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
2da50 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
2da60 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
2da70 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
2da80 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2da90 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
2daa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2dab0 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
2dac0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2dad0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2dae0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2daf0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2db00 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2db10 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2db20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2db30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2db40 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2db50 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2db60 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2db70 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2db80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2db90 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
2dba0 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f   = GetAssemblyFo
2dbb0 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
2dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2dbd0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
2dbe0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
2dbf0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65  platformName, pe
2dc00 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2dc10 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d          wow64);.
2dc20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2dc30 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2dc40 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2dc50 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2dc60 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2dc70 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2dc80 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72  Key, keyName, tr
2dc90 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
2dca0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2dcb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2dcc0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
2dcd0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2dce0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2dd00 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2dd10 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2dd30 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
2dd40 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2dd50 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
2dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd70 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2dd80 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2dd90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2dda0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2ddb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2ddd0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
2dde0 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  leteSubKey(..   
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de00 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
2de10 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
2de20 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2de30 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2de40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2de50 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2de60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2de70 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2dec0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2ded0 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
2dee0 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  essAssemblyFolde
2def0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2df00 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2df10 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2df20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
2df30 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
2df40 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2df50 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
2df60 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2df70 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
2df80 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2df90 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
2dfa0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
2dfb0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
2dfc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2dfd0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
2dfe0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
2dff0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
2e000 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2e010 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2e020 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2e030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2e040 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2e050 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2e060 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e070 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
2e080 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
2e090 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
2e0a0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
2e0b0 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
2e0c0 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
2e0d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2e0e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e0f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2e100 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
2e110 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74  ork callback dat
2e120 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
2e130 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e140 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e150 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e160 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
2e170 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e180 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e190 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73  urn RemoveFromAs
2e1a0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
2e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1c0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
2e1d0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
2e1e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
2e1f0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e210 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61   LegacyProjectNa
2e220 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  me, perUser, wow
2e230 36 34 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  64, false, whatI
2e240 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  f, verbose,..   
2e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e260 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a   ref error) &&..
2e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e280 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c  AddToAssemblyFol
2e290 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
2e2a0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2e2b0 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
2e2c0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
2e2d0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
2e2e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2e2f0 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e          ProjectN
2e300 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72  ame, pair.X, per
2e310 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61  User, wow64, wha
2e320 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
2e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e340 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a     ref error);..
2e350 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2e360 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
2e370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e390 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f  return RemoveFro
2e3a0 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
2e3b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e3c0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2e3d0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
2e3e0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2e3f0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e410 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c      ProjectName,
2e420 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
2e430 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2e440 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2e460 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
2e470 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2e480 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
2e490 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2e4a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2e500 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
2e510 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  udio Handling.. 
2e520 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2e530 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
2e540 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  VsRootKeyName(..
2e550 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e560 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2e570 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2e580 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
2e590 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2e5a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e5b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
2e5c0 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56  0}\\Microsoft\\V
2e5d0 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a 20  isualStudio",.. 
2e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
2e5f0 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  etRootKeyName(pe
2e600 72 55 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d  rUser, wow64));.
2e610 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2e620 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2e670 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2e680 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
2e690 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  etVsKeyName(..  
2e6a0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2e6b0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
2e6c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2e6d0 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
2e6e0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
2e6f0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2e700 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
2e710 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2e720 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e730 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
2e740 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e750 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e760 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
2e770 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
2e780 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
2e7a0 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65 74  0}\\{1}{2}", Get
2e7b0 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65  VsRootKeyName(pe
2e7c0 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 20 76  rUser, wow64), v
2e7d0 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
2e7e0 20 20 20 20 20 20 20 20 20 20 20 73 75 66 66 69             suffi
2e7f0 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  x);..        }..
2e800 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e850 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2e860 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
2e870 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20 48  io Data Source H
2e880 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
2e890 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2e8a0 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f  bool AddVsDataSo
2e8b0 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
2e8c0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2e8d0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2e8e0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2e8f0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
2e900 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2e910 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
2e920 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
2e930 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
2e940 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
2e950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2e960 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
2e970 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2e980 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2e990 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2e9a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2e9b0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2e9c0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e9d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e9e0 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
2e9f0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
2ea00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ea10 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2ea20 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
2ea30 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
2ea40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ea50 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2ea60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ea70 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
2ea80 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2ea90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2eaa0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2eab0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
2eac0 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
2ead0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2eae0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2eaf0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2eb00 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
2eb10 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
2eb20 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73  ame(vsVersion, s
2eb30 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20  uffix, perUser, 
2eb40 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2eb50 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2eb60 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2eb70 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2eb80 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eba0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2ebb0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
2ebc0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2ebd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ebf0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2ec00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ec10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ec20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2ec30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec50 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2ec60 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2ec70 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2ec80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ec90 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2eca0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecc0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2ecd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ece0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ecf0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2ed00 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2ed10 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2ed20 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2ed30 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2ed40 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2ed50 20 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20   "DataSources", 
2ed60 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2ed70 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2ed80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eda0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
2edb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2edc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ede0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2edf0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee10 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2ee20 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2ee30 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53   key: {0}\\DataS
2ee40 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  ources",..      
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee60 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
2ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ee90 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2eea0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eec0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2eed0 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f  gistryKey dataSo
2eee0 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20  urceKey =..     
2eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef00 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2ef10 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
2ef20 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20  ey(subKey,..    
2ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef40 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2ef50 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
2ef60 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2ef70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef90 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2efa0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2efb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efd0 20 20 69 66 20 28 64 61 74 61 53 6f 75 72 63 65    if (dataSource
2efe0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f000 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f020 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2f030 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f050 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2f060 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
2f070 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2f080 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20  \\{1}", key,..  
2f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2f0b0 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
2f0c0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
2f0d0 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f100 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f120 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f130 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2f140 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2f150 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f170 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79     dataSourceKey
2f180 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46  , null, String.F
2f190 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1b0 20 20 20 20 22 7b 30 7d 20 44 61 74 61 62 61 73      "{0} Databas
2f1c0 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63 74  e File", Project
2f1d0 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a  Name), whatIf,..
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1f0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2f200 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f220 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2f230 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2f240 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65  NOTE: This value
2f250 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e   is new as of 1.
2f260 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20  0.83.0...       
2f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f280 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2f290 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2f2a0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2f2b0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2d0 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79     dataSourceKey
2f2e0 2c 20 22 44 65 66 61 75 6c 74 50 72 6f 76 69 64  , "DefaultProvid
2f2f0 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  er",..          
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f310 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
2f320 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
2f330 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
2f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f350 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2f360 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
2f370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f380 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2f390 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
2f3a0 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65 4b  bKey(dataSourceK
2f3b0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
2f3e0 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69 64  SupportingProvid
2f3f0 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20  ers\\{0}",..    
2f400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f410 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2f420 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
2f430 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2f440 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
2f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f460 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2f470 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
2f480 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f4a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2f4c0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2f4d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f  ////////////////
2f520 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2f530 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2f540 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44  c bool RemoveVsD
2f550 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
2f560 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2f570 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2f580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2f590 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2f5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2f5b0 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2f5c0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2f5d0 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2f5e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2f5f0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2f600 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2f610 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2f620 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2f630 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2f640 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2f650 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2f660 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2f670 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2f680 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
2f690 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
2f6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6c0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2f6d0 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
2f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f6f0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2f700 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f710 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2f720 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
2f730 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f750 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2f760 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
2f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f780 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2f790 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f7a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2f7b0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
2f7c0 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
2f7d0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55  on, suffix, perU
2f7e0 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ser, wow64);....
2f7f0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2f800 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2f810 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
2f820 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2f830 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2f840 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2f850 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
2f860 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2f870 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2f880 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f890 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
2f8a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2f8b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2f8d0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2f8e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2f900 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2f910 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2f920 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f940 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
2f950 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f960 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f970 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2f980 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f990 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
2f9a0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
2f9b0 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
2f9c0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2f9d0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9f0 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63   key, "DataSourc
2fa00 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
2fa10 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2fa30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fa40 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2fa50 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2fa70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fa80 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2fa90 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2faa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2fac0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2fad0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2fae0 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20  DataSources",.. 
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb00 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2fb10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fb20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fb30 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2fb50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fb60 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2fb70 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
2fb80 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
2fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fba0 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
2fbb0 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
2fbc0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2fbd0 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
2fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2fbf0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2fc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2fc20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2fc30 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2fc40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2fc50 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2fca0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2fcb0 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
2fcc0 73 73 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  ssVsDataSource(.
2fcd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2fce0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2fcf0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2fd00 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
2fd10 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2fd20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
2fd30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
2fd40 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
2fd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
2fd60 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
2fd70 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2fd80 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
2fd90 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2fda0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2fdb0 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
2fdc0 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
2fdd0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
2fde0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2fdf0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
2fe00 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2fe10 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2fe20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2fe30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2fe40 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
2fe50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2fe60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fe70 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2fe80 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
2fe90 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2fea0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2feb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2fec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fed0 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
2fee0 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69  bool> pair = cli
2fef0 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61  entData as AnyPa
2ff00 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
2ff10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ff20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c   if (pair == nul
2ff30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ff40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ff50 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2ff60 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20  lid VS callback 
2ff70 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
2ff80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2ff90 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2ffa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ffb0 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
2ffc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffe0 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61  return AddVsData
2fff0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
30000 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
30010 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
30020 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
30030 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
30040 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30050 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
30060 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
30070 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
30080 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
30090 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
300a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
300b0 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
300c0 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  veVsDataSource(.
300d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
300e0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
300f0 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
30100 20 70 61 63 6b 61 67 65 2c 20 70 65 72 55 73 65   package, perUse
30110 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  r, wow64,..     
30120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
30130 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
30140 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
30150 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
30160 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
30170 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
30180 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
301d0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
301e0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61  Visual Studio Da
301f0 74 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64  ta Provider Hand
30200 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
30210 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
30220 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69  l AddVsDataProvi
30230 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
30240 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
30250 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
30260 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
30270 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
30280 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
30290 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
302a0 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
302b0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
302c0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
302d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
302e0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
302f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
30300 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
30310 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
30320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
30330 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
30340 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
30350 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
30360 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30370 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30380 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
30390 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
303a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
303b0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
303c0 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
303d0 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
303e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
303f0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
30400 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
30410 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
30420 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30430 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30440 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
30450 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
30460 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
30470 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
30480 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
30490 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
304a0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
304b0 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
304c0 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
304d0 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
304e0 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
304f0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
30500 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
30510 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
30520 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
30530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30540 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
30550 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
30560 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
30570 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30580 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30590 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
305a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
305b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
305c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
305d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
305e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305f0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
30600 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
30610 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
30620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30630 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
30640 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
30650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30660 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
30670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30680 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30690 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
306a0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
306b0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
306c0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
306d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
306e0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
306f0 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74  ataProviders", t
30700 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
30710 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
30720 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
30740 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
30750 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
30760 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30780 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
30790 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
307a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307b0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
307c0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
307d0 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72  key: {0}\\DataPr
307e0 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20  oviders",..     
307f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30800 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
30810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30820 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
30830 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
30840 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30860 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
30870 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 50  egistryKey dataP
30880 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20  roviderKey =..  
30890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308a0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
308b0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
308c0 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
308d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308e0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
308f0 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
30900 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
30910 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
30920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30930 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
30940 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
30950 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30970 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 50         if (dataP
30980 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75  roviderKey == nu
30990 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
309a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
309d0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
309e0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
309f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a00 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
30a10 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
30a20 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  ey: {0}\\{1}", k
30a30 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
30a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a50 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
30a60 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
30a70 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
30a80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30aa0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
30ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ac0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
30ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ae0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
30af0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
30b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b10 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
30b20 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c  ProviderKey, nul
30b30 6c 2c 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 20  l, Description, 
30b40 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
30b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b60 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
30b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b80 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
30b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ba0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
30bb0 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77  his value is new
30bc0 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e   as of 1.0.83.0.
30bd0 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20    However,..    
30be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bf0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 20      //       it 
30c00 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 73  should only be s
30c10 65 74 20 69 66 20 74 68 65 20 70 61 63 6b 61 67  et if the packag
30c20 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  e assembly..    
30c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c40 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
30c50 20 61 6c 6c 20 74 68 65 20 61 73 73 65 6d 62 6c   all the assembl
30c60 69 65 73 20 69 74 20 72 65 66 65 72 73 20 74 6f  ies it refers to
30c70 20 61 72 65 20 62 65 69 6e 67 0d 0a 20 20 20 20   are being..    
30c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c90 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 6c 61      //       pla
30ca0 63 65 64 20 69 6e 74 6f 20 74 68 65 20 67 6c 6f  ced into the glo
30cb0 62 61 6c 20 61 73 73 65 6d 62 6c 79 20 63 61 63  bal assembly cac
30cc0 68 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  he...           
30cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
30ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30cf0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
30d00 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d  kage.GlobalAssem
30d10 62 6c 79 43 61 63 68 65 29 0d 0a 20 20 20 20 20  blyCache)..     
30d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d50 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
30d60 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
30d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d80 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
30d90 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73  ProviderKey, "As
30da0 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20 20 20 20  sembly",..      
30db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30dc0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
30dd0 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54  e.AssemblyName.T
30de0 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20 20 20 20  oString(),..    
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
30e10 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
30e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
30e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e70 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61  // NOTE: This va
30e80 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66  lue is new as of
30e90 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20   1.0.83.0...    
30ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30eb0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
30ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ed0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
30ee0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
30ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f00 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
30f10 65 72 4b 65 79 2c 20 22 41 73 73 6f 63 69 61 74  erKey, "Associat
30f20 65 64 53 6f 75 72 63 65 22 2c 0d 0a 20 20 20 20  edSource",..    
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f40 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
30f50 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53  DataSourceId.ToS
30f60 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
30f70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
30f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f90 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
30fa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
30fc0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
30fd0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
30fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ff0 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
31000 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74 4e 61  ey, "InvariantNa
31010 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e 74 4e 61  me", InvariantNa
31020 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
31030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31040 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
31050 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
31070 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
31080 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
31090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310a0 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
310b0 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67 79  Key, "Technology
310c0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310e0 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65  package.AdoNetTe
310f0 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53 74 72  chnologyId.ToStr
31100 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
31110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
31130 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
31140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31150 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
31160 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
31170 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
31180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31190 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
311a0 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20 66 69  , "CodeBase", fi
311b0 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d  leName, whatIf,.
311c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
311d0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
311e0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
311f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31200 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
31210 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31230 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
31240 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74 6f 72  iderKey, "Factor
31250 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20 20 20  yService",..    
31260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31270 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
31280 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69  ServiceId.ToStri
31290 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20  ng(VsIdFormat), 
312a0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
312b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312c0 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
312d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
312e0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
312f0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
31300 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
31310 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
31320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31330 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
31340 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65  jects\\DataConne
31350 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c  ctionUIControl",
31360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
31380 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
31390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
313a0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
313b0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
313c0 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
313d0 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
313e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313f0 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
31400 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e  bjects\\DataConn
31410 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69 65 73  ectionProperties
31420 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
31430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31440 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31450 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
31470 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
31480 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
31490 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314b0 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
314c0 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
314d0 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 22  nnectionSupport"
314e0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
314f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31500 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
31510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31520 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
31530 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
31540 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
31550 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
31560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31570 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
31580 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a  Objects\\DataObj
31590 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77 68 61  ectSupport", wha
315a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
315b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315c0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
315d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315e0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
315f0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
31600 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
31610 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
31620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31630 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
31640 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75 70 70  ts\\DataViewSupp
31650 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ort", whatIf,.. 
31660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31670 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
31680 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
31690 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
316b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
316c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
316d0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
316e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f  ////////////////
31730 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
31740 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
31750 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44  c bool RemoveVsD
31760 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
31770 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
31780 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
31790 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
317a0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
317b0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
317c0 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
317d0 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
317e0 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
317f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
31800 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
31810 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
31820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31830 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
31840 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
31850 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
31860 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
31870 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
31880 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
31890 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
318a0 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
318b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
318c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
318d0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
318e0 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
318f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31900 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
31910 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
31920 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
31930 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
31940 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
31950 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
31960 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a  rUser, wow64);..
31970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
31980 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
31990 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
319a0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
319b0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
319c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
319d0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
319e0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
319f0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
31a00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31a10 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
31a20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
31a30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
31a50 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
31a60 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
31a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
31a80 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
31a90 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
31aa0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ac0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
31ad0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31ae0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
31af0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
31b00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
31b20 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
31b30 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
31b40 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
31b50 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
31b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b70 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f     key, "DataPro
31b80 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77  viders", true, w
31b90 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
31ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31bb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31bc0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
31bd0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
31be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31c00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
31c10 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
31c20 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
31c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c40 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
31c50 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
31c60 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72  0}\\DataProvider
31c70 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
31c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c90 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cb0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
31cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31cd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
31cf0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
31d00 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
31d30 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
31d40 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28  iderId.ToString(
31d50 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
31d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d70 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
31d80 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
31d90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
31da0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31db0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31dc0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
31dd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
31e30 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
31e40 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  ol ProcessVsData
31e50 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
31e60 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
31e70 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
31e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
31e90 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
31ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
31eb0 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
31ec0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
31ed0 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
31ee0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
31ef0 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
31f00 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
31f10 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
31f20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
31f30 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
31f40 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
31f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
31f60 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
31f70 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
31f80 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
31f90 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
31fa0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
31fb0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
31fc0 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69            AnyPai
31fd0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20  r<string, bool> 
31fe0 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74  pair = clientDat
31ff0 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72  a as AnyPair<str
32000 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20  ing, bool>;.... 
32010 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
32020 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  air == null)..  
32030 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32050 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
32060 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b   callback data";
32070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32080 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
32090 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
320a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
320b0 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20   (pair.Y)..     
320c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
320d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
320e0 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64   AddVsDataProvid
320f0 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
32100 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
32110 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
32120 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 61  fix, package, pa
32130 69 72 2e 58 2c 20 70 65 72 55 73 65 72 2c 0d 0a  ir.X, perUser,..
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32150 20 20 20 20 77 6f 77 36 34 2c 20 77 68 61 74 49      wow64, whatI
32160 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
32170 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
32180 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
32190 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
321a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
321b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
321c0 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76  RemoveVsDataProv
321d0 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
321e0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
321f0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
32200 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20  uffix, package, 
32210 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d  perUser, wow64,.
32220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32230 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
32240 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
32250 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
32260 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
32270 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
32280 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
322e0 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
322f0 64 69 6f 20 50 61 63 6b 61 67 65 20 48 61 6e 64  dio Package Hand
32300 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
32310 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
32320 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61  d InitializeVsPa
32330 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
32340 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
32350 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
32360 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
32370 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43   globalAssemblyC
32380 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ache,..         
32390 20 20 20 72 65 66 20 50 61 63 6b 61 67 65 20 70     ref Package p
323a0 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20  ackage..        
323b0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
323c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
323d0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
323e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
323f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32400 20 20 20 70 61 63 6b 61 67 65 20 3d 20 6e 65 77     package = new
32410 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20   Package();.... 
32420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
32430 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e  ackage.AssemblyN
32440 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c 79 4e 61  ame = assemblyNa
32450 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
32460 20 20 20 20 20 70 61 63 6b 61 67 65 2e 47 6c 6f       package.Glo
32470 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
32480 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   = globalAssembl
32490 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20 20 20 20  yCache;....     
324a0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
324b0 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c  ge.AdoNetTechnol
324c0 6f 67 79 49 64 20 3d 20 6e 65 77 20 47 75 69 64  ogyId = new Guid
324d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
324e0 20 20 20 20 20 20 20 22 37 37 41 42 39 41 39 44         "77AB9A9D
324f0 2d 37 38 42 39 2d 34 42 41 37 2d 39 31 41 43 2d  -78B9-4BA7-91AC-
32500 38 37 33 46 35 33 33 38 46 31 44 32 22 29 3b 0d  873F5338F1D2");.
32510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32520 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61     package.Packa
32530 67 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28  geId = new Guid(
32540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32550 20 20 20 20 20 20 22 44 43 42 45 36 43 38 44 2d        "DCBE6C8D-
32560 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39  0E57-4099-A183-9
32570 38 46 46 37 34 43 36 34 44 39 43 22 29 3b 0d 0a  8FF74C64D9C");..
32580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32590 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63    package.Servic
325a0 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  eId = new Guid(.
325b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
325c0 20 20 20 20 20 22 44 43 42 45 36 43 38 44 2d 30       "DCBE6C8D-0
325d0 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38  E57-4099-A183-98
325e0 46 46 37 34 43 36 34 44 39 44 22 29 3b 0d 0a 0d  FF74C64D9D");...
325f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32600 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75   package.DataSou
32610 72 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64  rceId = new Guid
32620 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32630 20 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45         "0EBAAB6E
32640 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d  -CA80-4B4A-8DDF-
32650 43 42 45 36 42 46 30 35 38 43 37 31 22 29 3b 0d  CBE6BF058C71");.
32660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32670 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
32680 72 6f 76 69 64 65 72 49 64 20 3d 20 6e 65 77 20  roviderId = new 
32690 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Guid(..         
326a0 20 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41             "0EBA
326b0 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38  AB6E-CA80-4B4A-8
326c0 44 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 30  DDF-CBE6BF058C70
326d0 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
326e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
326f0 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
32750 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
32760 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  AddVsPackage(.. 
32770 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
32780 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
32790 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
327a0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
327b0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
327c0 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
327d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
327e0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
327f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
32800 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
32810 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
32820 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
32830 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
32840 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
32850 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
32860 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
32870 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
32880 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
32890 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
328a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
328b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
328c0 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
328d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
328e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
328f0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
32900 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
32910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32920 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
32930 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32940 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32950 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
32960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
32970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32980 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
32990 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
329a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
329c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
329d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
329e0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
329f0 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
32a00 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72  ion, suffix, per
32a10 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  User, wow64);...
32a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
32a30 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
32a40 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
32a50 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
32a60 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
32a70 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
32a80 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
32a90 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
32aa0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
32ab0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32ac0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
32ad0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
32ae0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
32b00 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
32b10 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
32b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
32b30 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
32b40 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
32b50 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b70 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
32b80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32b90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32ba0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
32bb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
32bd0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
32be0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
32bf0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
32c00 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
32c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73    key, "Packages
32c30 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
32c40 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
32c50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c70 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
32c80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32c90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
32cc0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
32cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ce0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
32cf0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
32d00 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61  try key: {0}\\Pa
32d10 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20  ckages",..      
32d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d30 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
32d60 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
32d70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d90 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
32da0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
32db0 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a 20 43 68  TE: *WARNING* Ch
32dc0 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66 20 74 68  anging any of th
32dd0 65 73 65 20 76 61 6c 75 65 73 20 77 69 6c 6c 20  ese values will 
32de0 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20 20 20 20  likely..        
32df0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
32e00 20 20 20 20 20 72 65 71 75 69 72 65 20 61 20 6e       require a n
32e10 65 77 20 22 70 61 63 6b 61 67 65 20 6c 6f 61 64  ew "package load
32e20 20 6b 65 79 22 20 28 50 4c 4b 29 20 74 6f 20 62   key" (PLK) to b
32e30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
32e40 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
32e50 67 65 6e 65 72 61 74 65 64 20 69 6e 20 6f 72 64  generated in ord
32e60 65 72 20 74 6f 20 70 72 6f 70 65 72 6c 79 20 73  er to properly s
32e70 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e 67 20 74  upport loading t
32e80 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
32e90 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
32ea0 20 70 61 63 6b 61 67 65 20 69 6e 74 6f 20 56 69   package into Vi
32eb0 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 38  sual Studio 2008
32ec0 20 61 6e 64 20 65 61 72 6c 69 65 72 20 77 69 74   and earlier wit
32ed0 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 20 20  hout..          
32ee0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
32ef0 20 20 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20     the matching 
32f00 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 53 44  Visual Studio SD
32f10 4b 20 62 65 69 6e 67 20 69 6e 73 74 61 6c 6c 65  K being installe
32f20 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
32f30 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
32f40 20 50 6c 65 61 73 65 20 72 65 66 65 72 20 74 6f   Please refer to
32f50 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44 65 73   the "SQLite.Des
32f60 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74 22 20 66  igner\plk.txt" f
32f70 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..           
32f80 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
32f90 20 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69    for the existi
32fa0 6e 67 20 6f 66 66 69 63 69 61 6c 20 76 61 6c 75  ng official valu
32fb0 65 73 20 61 6e 64 20 75 70 64 61 74 65 20 74 68  es and update th
32fc0 65 6d 20 69 66 0d 0a 20 20 20 20 20 20 20 20 20  em if..         
32fd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
32fe0 20 20 20 20 6e 65 63 65 73 73 61 72 79 2e 20 20      necessary.  
32ff0 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77 6c 79 20  Also, the newly 
33000 67 65 6e 65 72 61 74 65 64 20 70 61 63 6b 61 67  generated packag
33010 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20 20 20 20  e load..        
33020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
33030 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 2c       key itself,
33040 20 77 68 69 63 68 20 69 73 20 61 20 31 32 38 20   which is a 128 
33050 63 68 61 72 61 63 74 65 72 20 61 6c 70 68 61 6e  character alphan
33060 75 6d 65 72 69 63 0d 0a 20 20 20 20 20 20 20 20  umeric..        
33070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
33080 20 20 20 20 20 73 74 72 69 6e 67 2c 20 6d 75 73       string, mus
33090 74 20 62 65 20 70 6c 61 63 65 64 20 69 6e 20 74  t be placed in t
330a0 68 65 20 72 65 73 6f 75 72 63 65 20 73 74 72 69  he resource stri
330b0 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20 20 20 20  ng named..      
330c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
330d0 20 20 20 20 20 20 20 22 34 30 30 22 20 69 6e 20         "400" in 
330e0 74 68 65 20 22 53 51 4c 69 74 65 2e 44 65 73 69  the "SQLite.Desi
330f0 67 6e 65 72 5c 56 53 50 61 63 6b 61 67 65 2e 72  gner\VSPackage.r
33100 65 73 78 22 20 66 69 6c 65 0d 0a 20 20 20 20 20  esx" file..     
33110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33120 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 6e  /       and then
33130 20 74 68 65 20 64 65 73 69 67 6e 65 72 20 61 73   the designer as
33140 73 65 6d 62 6c 79 20 69 74 73 65 6c 66 20 6d 75  sembly itself mu
33150 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20  st be..         
33160 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33170 20 20 20 20 72 65 63 6f 6d 70 69 6c 65 64 2e 20      recompiled. 
33180 20 41 73 20 6f 66 20 74 68 69 73 20 77 72 69 74   As of this writ
33190 69 6e 67 20 28 69 6e 20 46 65 62 72 75 61 72 79  ing (in February
331a0 20 32 30 31 32 29 2c 0d 0a 20 20 20 20 20 20 20   2012),..       
331b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
331c0 20 20 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77        the follow
331d0 69 6e 67 20 55 52 4c 20 69 73 20 74 68 65 20 70  ing URL is the p
331e0 72 6f 70 65 72 20 70 6c 61 63 65 20 74 6f 20 67  roper place to g
331f0 65 6e 65 72 61 74 65 0d 0a 20 20 20 20 20 20 20  enerate..       
33200 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
33210 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 6c 6f        package lo
33220 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20 20 20 20  ad keys:..      
33230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33250 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68        //       h
33260 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69 63 72 6f  ttp://msdn.micro
33270 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 76  soft.com/en-us/v
33280 73 74 75 64 69 6f 2f 63 63 36 35 35 37 39 35 0d  studio/cc655795.
33290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
332a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
332b0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
332c0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
332d0 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 79 20 3d  Key packageKey =
332e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
332f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
33300 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
33310 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
33320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
33340 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
33350 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
33360 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
33370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33380 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
33390 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
333a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
333b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333c0 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
333d0 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
333e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33410 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
33420 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
33430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
33450 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
33460 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
33470 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33490 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70            key, p
334a0 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
334b0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
334c0 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
334d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
334f0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
33500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
33510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33520 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
33530 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
33540 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 6e  ue(packageKey, n
33550 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
33560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33570 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
33580 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61  "{0} Designer Pa
33590 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e  ckage", ProjectN
335a0 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335c0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
335d0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
335e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335f0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
33600 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
33610 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20  ey, "Class",..  
33620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33630 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74            "SQLit
33640 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c 69 74  e.Designer.SQLit
33650 65 50 61 63 6b 61 67 65 22 2c 20 77 68 61 74 49  ePackage", whatI
33660 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33680 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
33690 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
336a0 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64  packageKey, "Cod
336b0 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 20 20 20  eBase",..       
336c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336d0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77       fileName, w
336e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
336f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33700 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
33710 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
33720 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
33730 22 49 44 22 2c 20 34 30 30 2c 20 77 68 61 74 49  "ID", 400, whatI
33740 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
33750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33760 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
33770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33780 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
33790 63 74 6f 72 79 20 3d 20 47 65 74 53 79 73 74 65  ctory = GetSyste
337a0 6d 44 69 72 65 63 74 6f 72 79 28 77 6f 77 36 34  mDirectory(wow64
337b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
337c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
337d0 20 28 64 69 72 65 63 74 6f 72 79 20 3d 3d 20 6e   (directory == n
337e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
337f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33800 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 53 74    directory = St
33810 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20  ring.Empty;.... 
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33830 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
33840 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
33850 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 6e 70 72  ackageKey, "Inpr
33860 6f 63 53 65 72 76 65 72 33 32 22 2c 0d 0a 20 20  ocServer32",..  
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33880 20 20 20 20 20 20 20 20 20 20 50 61 74 68 2e 43            Path.C
33890 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
338a0 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22 29  , "mscoree.dll")
338b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
338c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
338d0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
338e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
338f0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
33900 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
33910 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
33920 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a  "CompanyName",..
33930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33940 20 20 20 20 20 20 20 20 20 20 20 20 22 68 74 74              "htt
33950 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e  p://system.data.
33960 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68  sqlite.org/", wh
33970 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
33980 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33990 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
339a0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
339b0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
339c0 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20  MinEdition",..  
339d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339e0 20 20 20 20 20 20 20 20 20 20 22 73 74 61 6e 64            "stand
339f0 61 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76 65  ard", whatIf, ve
33a00 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
33a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
33a30 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
33a40 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 4e  geKey, "ProductN
33a50 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame",..         
33a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a70 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
33a80 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50  ("{0} Designer P
33a90 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74  ackage", Project
33aa0 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
33ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ac0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
33ad0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
33ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33af0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
33b00 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
33b10 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65 72  Key, "ProductVer
33b20 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20  sion",..        
33b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b40 20 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74 49      "1.0", whatI
33b50 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b70 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
33b80 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 74  ockRegistryKey t
33b90 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20 20 20  oolboxKey =..   
33ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
33bc0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
33bd0 74 65 53 75 62 4b 65 79 28 70 61 63 6b 61 67 65  teSubKey(package
33be0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
33bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c00 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f 78 22 2c        "Toolbox",
33c10 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33c20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
33c30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
33c60 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c  oolboxKey == nul
33c70 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cb0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
33cc0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
33cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
33cf0 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
33d00 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 22   registry key: "
33d10 20 2b 0d 0a 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 20 20 20                  
33d30 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 54 6f          "{0}\\To
33d40 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 67 65 4b  olbox", packageK
33d50 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
33d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
33d80 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
33d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33da0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dc0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
33dd0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
33de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f                to
33e00 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61 75  olboxKey, "Defau
33e10 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77 68  lt Items", 3, wh
33e20 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
33e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e40 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
33e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33e60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
33e90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
33ea0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
33eb0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
33ec0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
33ed0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
33ee0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
33ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
33f00 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c  , "Menus", true,
33f10 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33f20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
33f30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33f40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
33f50 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
33f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
33f90 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
33fa0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
33fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fc0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
33fd0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
33fe0 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20   {0}\\Menus",.. 
33ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34000 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
34010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34020 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34030 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
34040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
34050 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34060 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
34070 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
34080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34090 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
340a0 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
340b0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
340c0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
340d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340e0 20 20 20 22 2c 20 31 30 30 30 2c 20 33 22 2c 20     ", 1000, 3", 
340f0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
34100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
34120 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
34130 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
34140 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
34150 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
34160 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
34170 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
34180 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75   "Services", tru
34190 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
341a0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
341b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
341c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
341d0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
341e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
341f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34210 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
34220 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
34230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34240 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
34250 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
34260 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73  y: {0}\\Services
34270 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
34280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34290 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
342a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
342c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
342e0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
342f0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
34300 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79 20 3d  Key serviceKey =
34310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
34330 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
34340 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
34350 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
34370 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
34380 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
34390 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
343a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343b0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
343c0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
343d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
343e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343f0 20 20 20 20 20 20 69 66 20 28 73 65 72 76 69 63        if (servic
34400 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
34410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34420 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34440 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
34450 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
34460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
34480 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
34490 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
344a0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
344b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344c0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70            key, p
344d0 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
344e0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
344f0 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
34500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34510 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
34520 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
34530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
34540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34550 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
34560 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
34570 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20 6e  ue(serviceKey, n
34580 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
34590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345a0 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67    package.Packag
345b0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
345c0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
345d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
345e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
345f0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34610 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
34620 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76  er.SetValue(serv
34630 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c 0d  iceKey, "Name",.
34640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34650 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
34660 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20  ing.Format("{0} 
34670 44 65 73 69 67 6e 65 72 20 53 65 72 76 69 63 65  Designer Service
34680 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
34690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
346a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
346b0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
346c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
346d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
346e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
346f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34700 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
34710 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
34720 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34770 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
34780 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
34790 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67  l RemoveVsPackag
347a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
347b0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
347c0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
347d0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
347e0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
347f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
34800 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
34810 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
34820 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
34830 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
34840 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
34850 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
34860 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
34870 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
34880 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
34890 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
348a0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
348b0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
348c0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
348d0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
348e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
348f0 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
34900 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
34910 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34920 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
34930 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
34940 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
34950 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34960 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34970 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34980 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
34990 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
349a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
349b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
349c0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
349d0 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
349e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
349f0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34a00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34a10 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
34a20 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
34a30 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  me(vsVersion, su
34a40 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
34a50 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
34a60 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
34a70 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
34a80 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
34a90 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ab0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
34ac0 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
34ad0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
34ae0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
34b00 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
34b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34b30 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
34b40 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
34b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b60 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
34b70 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
34b80 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
34b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ba0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
34bb0 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
34bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bd0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34bf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34c00 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
34c10 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
34c20 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
34c30 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
34c40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34c50 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
34c60 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65  "Packages", true
34c70 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
34c80 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
34c90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34cb0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
34cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34cd0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cf0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
34d00 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
34d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
34d30 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
34d40 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22  : {0}\\Packages"
34d50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
34d70 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
34d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d90 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
34da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34db0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
34dc0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
34dd0 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
34de0 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
34df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e00 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
34e10 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
34e20 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
34e30 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
34e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
34e50 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
34e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34e80 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
34e90 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
34ea0 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
34eb0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
34ec0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34ed0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
34ee0 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77  "Menus", true, w
34ef0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
34f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34f10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34f20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
34f30 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
34f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34f60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
34f70 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
34f80 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
34f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fa0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
34fb0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
34fc0 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20  0}\\Menus",..   
34fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fe0 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
34ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35000 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35010 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
35030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35040 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
35050 6c 70 65 72 2e 44 65 6c 65 74 65 56 61 6c 75 65  lper.DeleteValue
35060 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35070 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
35080 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
35090 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
350a0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350c0 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69      throwOnMissi
350d0 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
350e0 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
350f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
35100 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
35110 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
35120 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
35130 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
35140 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
35150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35160 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c  key, "Services",
35170 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
35180 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
35190 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
351c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
351d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
351e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351f0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
35200 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
35210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35220 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
35230 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
35240 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76  y key: {0}\\Serv
35250 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ices",..        
35260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35270 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
35280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35290 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
352a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
352b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
352c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352d0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
352e0 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
352f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35300 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
35310 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69  y, package.Servi
35320 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
35330 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35350 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
35360 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
35370 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
35380 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35390 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
353a0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
353b0 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35400 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
35410 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
35420 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67   ProcessVsPackag
35430 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
35440 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
35450 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
35460 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
35470 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
35480 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
35490 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
354a0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
354b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
354c0 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
354d0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
354e0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
354f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
35500 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
35510 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
35520 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
35530 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
35540 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
35550 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
35560 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
35570 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
35580 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
35590 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
355a0 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
355b0 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
355c0 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
355d0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
355e0 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
355f0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
35600 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
35610 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35620 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
35630 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61  nvalid VS callba
35640 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20  ck data";..     
35650 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
35660 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
35670 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35680 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e         if (pair.
35690 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Y)..            
356a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
356b0 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 50     return AddVsP
356c0 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
356e0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
356f0 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
35700 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65  , pair.X, perUse
35710 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
35720 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20 77          wow64, w
35730 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
35740 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
35750 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
35760 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
35770 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35780 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
35790 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 63 6b  urn RemoveVsPack
357a0 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
357b0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
357c0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
357d0 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70  ffix, package, p
357e0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a  erUser, wow64,..
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35800 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69      throwOnMissi
35810 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
35820 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
35830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
35840 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
35850 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
35860 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
35870 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
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 2f 2f 2f 2f 2f 2f  ////////////////
358c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
358d0 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69 63 61   #region Applica
358e0 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69 6e 74  tion Entry Point
358f0 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
35900 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
35910 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
35920 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
35930 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
35940 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20 20 20   Main(..        
35950 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
35960 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  s..            )
35970 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
35980 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
35990 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
359a0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
359b0 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
359c0 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b  guration = null;
359d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
359e0 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 3d    string error =
359f0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
35a00 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
35a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
35a50 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
35a60 67 69 6f 6e 20 44 65 62 75 67 67 65 72 20 48 6f  gion Debugger Ho
35a70 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ok..            
35a80 20 20 20 20 69 66 20 28 45 6e 76 69 72 6f 6e 6d      if (Environm
35a90 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f 6e 6d 65  ent.GetEnvironme
35aa0 6e 74 56 61 72 69 61 62 6c 65 28 22 42 72 65 61  ntVariable("Brea
35ab0 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  k") != null)..  
35ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
35ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35ae0 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
35af0 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  teLine(..       
35b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b10 20 22 41 74 74 61 63 68 20 61 20 64 65 62 75 67   "Attach a debug
35b20 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20 7b  ger to process {
35b30 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 20 20 20  0} and " +..    
35b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b50 20 20 20 20 22 70 72 65 73 73 20 61 6e 79 20 6b      "press any k
35b60 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 22  ey to continue."
35b70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35b80 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65             Proce
35b90 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f  ss.GetCurrentPro
35ba0 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d 0a 20  cess().Id);.... 
35bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bc0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bf0 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52         Console.R
35c00 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a  eadKey(true); /*
35c10 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
35c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35c40 20 20 20 20 20 20 63 61 74 63 68 20 28 49 6e 76        catch (Inv
35c50 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
35c60 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e 73 6f  eption) // Conso
35c70 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20 20 20  le.ReadKey..    
35c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
35cb0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
35cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35ce0 20 20 20 20 20 20 20 20 44 65 62 75 67 67 65 72          Debugger
35cf0 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20 20 20  .Break();..     
35d00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
35d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
35d20 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
35d30 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
35d90 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64 20 4c  region Command L
35da0 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67 0d 0a  ine Processing..
35db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dc0 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61 74 69  if (!Configurati
35dd0 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20  on.FromArgs(..  
35de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35df0 20 20 20 20 20 20 61 72 67 73 2c 20 74 72 75 65        args, true
35e00 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72 61 74  , ref configurat
35e10 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72 29 20  ion, ref error) 
35e20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
35e30 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75          !Configu
35e40 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73 28 0d  ration.Process(.
35e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35e60 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 63           args, c
35e70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72  onfiguration, tr
35e80 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20 7c  ue, ref error) |
35e90 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
35ea0 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75 72         !Configur
35eb0 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e 74 69  ation.CheckRunti
35ec0 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
35ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ee0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
35ef0 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72 72  n, true, ref err
35f00 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
35f10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35f20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
35f30 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
35f40 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
35f50 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f70 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
35f80 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
35f90 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fb0 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
35fc0 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
35fd0 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
35fe0 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
35ff0 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
36000 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
36010 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
36020 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
36030 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
36040 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
36050 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
36060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36070 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
36080 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
36090 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20  , "Failure.",.. 
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
360c0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
360d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
360e0 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
360f0 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
36100 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36110 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
36120 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
36130 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
36170 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36180 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
36190 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72   (MockRegistry r
361a0 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20 4d 6f  egistry = new Mo
361b0 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  ckRegistry(..   
361c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361d0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
361e0 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61 6c 73 65  on.WhatIf, false
361f0 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
36200 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36220 20 20 23 72 65 67 69 6f 6e 20 43 6f 72 65 20 41    #region Core A
36230 73 73 65 6d 62 6c 79 20 4e 61 6d 65 20 43 68 65  ssembly Name Che
36240 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
36250 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
36260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36270 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 74 68 69 73  // NOTE: Do this
36280 20 66 69 72 73 74 2c 20 62 65 66 6f 72 65 20 6d   first, before m
36290 61 6b 69 6e 67 20 61 6e 79 20 63 68 61 6e 67 65  aking any change
362a0 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  s to the..      
362b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
362c0 20 20 20 20 20 20 20 73 79 73 74 65 6d 2c 20 62         system, b
362d0 65 63 61 75 73 65 20 69 74 20 77 69 6c 6c 20 74  ecause it will t
362e0 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
362f0 6e 20 69 66 20 74 68 65 0d 0a 20 20 20 20 20 20  n if the..      
36300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
36310 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65         file name
36320 20 64 6f 65 73 20 6e 6f 74 20 72 65 70 72 65 73   does not repres
36330 65 6e 74 20 61 20 76 61 6c 69 64 20 6d 61 6e 61  ent a valid mana
36340 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ged..           
36350 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
36360 20 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20    assembly...   
36370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36380 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
36390 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
363a0 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62  yName coreAssemb
363b0 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20  lyName =..      
363c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363d0 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47    AssemblyName.G
363e0 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  etAssemblyName(.
363f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36400 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
36410 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46  figuration.CoreF
36420 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
36430 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
36450 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73 69 67 6e  emblyName design
36460 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
36470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36480 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
36490 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
364a0 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
364b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
364d0 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.DesignerFileN
364e0 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ame); /* throw *
364f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
36500 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
36510 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
36520 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
36560 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
36570 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
36580 69 6f 6e 20 53 79 73 74 65 6d 20 44 69 72 65 63  ion System Direc
36590 74 6f 72 79 20 43 68 65 63 6b 0d 0a 20 20 20 20  tory Check..    
365a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
365c0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
365d0 20 47 65 74 74 69 6e 67 20 74 68 65 20 73 79 73   Getting the sys
365e0 74 65 6d 20 64 69 72 65 63 74 6f 72 79 20 76 61  tem directory va
365f0 6c 75 65 20 68 65 72 65 20 73 65 72 76 65 73 0d  lue here serves.
36600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36610 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 77       //       tw
36620 6f 20 70 75 72 70 6f 73 65 73 3a 0d 0a 20 20 20  o purposes:..   
36630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36640 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
36650 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
36660 20 20 31 2e 20 49 74 20 65 6e 61 62 6c 65 73 20    1. It enables 
36670 75 73 20 74 6f 20 6c 6f 67 20 74 68 65 20 73 79  us to log the sy
36680 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 0d 0a  stem directory..
36690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
366b0 76 61 6c 75 65 20 76 65 72 79 20 65 61 72 6c 79  value very early
366c0 20 69 6e 20 74 68 65 20 69 6e 73 74 61 6c 6c 61   in the installa
366d0 74 69 6f 6e 20 70 72 6f 63 65 73 73 0d 0a 20 20  tion process..  
366e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366f0 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 28 69    //          (i
36700 2e 65 2e 20 65 76 65 6e 20 74 68 6f 75 67 68 20  .e. even though 
36710 74 68 65 20 76 61 6c 75 65 20 69 74 73 65 6c 66  the value itself
36720 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20   is not..       
36730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
36740 20 20 20 20 20 20 20 20 20 6e 65 65 64 65 64 20           needed 
36750 75 6e 74 69 6c 20 6d 75 63 68 20 6c 61 74 65 72  until much later
36760 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
36770 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
36780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36790 2f 2f 20 20 20 20 20 20 20 32 2e 20 53 69 6e 63  //       2. Sinc
367a0 65 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 63  e the value is c
367b0 61 63 68 65 64 2c 20 69 74 20 70 72 65 76 65 6e  ached, it preven
367c0 74 73 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 20  ts an..         
367d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
367e0 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e         exception
367f0 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 68 72 6f   from being thro
36800 77 6e 20 6d 75 63 68 20 6c 61 74 65 72 20 64 75  wn much later du
36810 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ring..          
36820 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
36830 20 20 20 20 20 20 74 68 65 20 69 6e 73 74 61 6c        the instal
36840 6c 20 77 68 65 6e 20 74 68 65 20 76 61 6c 75 65  l when the value
36850 20 69 73 20 71 75 65 72 69 65 64 20 61 67 61 69   is queried agai
36860 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
36870 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
36880 20 20 20 28 69 2e 65 2e 20 77 69 74 68 20 74 68     (i.e. with th
36890 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
368a0 20 74 68 65 20 22 77 6f 77 36 34 22 0d 0a 20 20   the "wow64"..  
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368c0 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 70 61    //          pa
368d0 72 61 6d 65 74 65 72 29 2e 0d 0a 20 20 20 20 20  rameter)...     
368e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
368f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
36900 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
36910 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
36920 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
36930 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
36940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36950 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
36960 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
36970 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
36980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36990 20 20 20 20 20 20 22 53 79 73 74 65 6d 20 64 69        "System di
369a0 72 65 63 74 6f 72 79 20 69 73 20 7b 30 7d 2e 22  rectory is {0}."
369b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
369c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369d0 20 20 20 20 20 20 20 47 65 74 53 79 73 74 65 6d         GetSystem
369e0 44 69 72 65 63 74 6f 72 79 28 63 6f 6e 66 69 67  Directory(config
369f0 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 29 29 29  uration.Wow64)))
36a00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36a10 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
36a20 43 61 74 65 67 6f 72 79 29 3b 20 2f 2a 20 74 68  Category); /* th
36a30 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
36a40 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
36a50 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
36a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
36aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ac0 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72   #region .NET Fr
36ad0 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75 61 6c  amework / Visual
36ae0 20 53 74 75 64 69 6f 20 44 61 74 61 0d 0a 20 20   Studio Data..  
36af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b00 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
36b10 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
36b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
36b30 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
36b40 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 75 6c  meworkList = nul
36b50 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
36b60 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76          VsList v
36b70 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  sList = null;...
36b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36b90 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36be0 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69          Initiali
36bf0 7a 65 56 73 50 61 63 6b 61 67 65 28 64 65 73 69  zeVsPackage(desi
36c00 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
36c10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36c20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
36c30 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
36c40 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
36c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c60 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f  InstallFlags.Glo
36c70 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
36c80 2c 20 74 72 75 65 29 20 26 26 0d 0a 20 20 20 20  , true) &&..    
36c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ca0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
36cb0 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
36cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cd0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
36ce0 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65 47  Flags.VsPackageG
36cf0 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
36d00 68 65 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20  he, true),..    
36d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d20 20 20 20 20 72 65 66 20 70 61 63 6b 61 67 65 29      ref package)
36d30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36d40 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
36d90 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74              Init
36da0 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c  ializeFrameworkL
36db0 69 73 74 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  ist(configuratio
36dc0 6e 2e 50 65 72 55 73 65 72 20 3f 0d 0a 20 20 20  n.PerUser ?..   
36dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36de0 20 20 20 20 20 72 65 67 69 73 74 72 79 2e 43 75       registry.Cu
36df0 72 72 65 6e 74 55 73 65 72 20 3a 20 72 65 67 69  rrentUser : regi
36e00 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
36e10 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
36e20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
36e30 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 66  iguration, ref f
36e40 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29 3b 0d 0a  rameworkList);..
36e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36e60 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65        Initialize
36e70 56 73 4c 69 73 74 28 63 6f 6e 66 69 67 75 72 61  VsList(configura
36e80 74 69 6f 6e 2e 50 65 72 55 73 65 72 20 3f 0d 0a  tion.PerUser ?..
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ea0 20 20 20 20 20 20 20 20 72 65 67 69 73 74 72 79          registry
36eb0 2e 43 75 72 72 65 6e 74 55 73 65 72 20 3a 20 72  .CurrentUser : r
36ec0 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
36ed0 68 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  hine,..         
36ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
36ef0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65  onfiguration, re
36f00 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20 20 20  f vsList);..    
36f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
36f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f40 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
36f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36f90 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 68 61       #region Sha
36fa0 72 65 64 20 43 6c 69 65 6e 74 20 44 61 74 61 20  red Client Data 
36fb0 43 72 65 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  Creation..      
36fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
36fd0 6a 65 63 74 20 64 69 72 65 63 74 6f 72 79 44 61  ject directoryDa
36fe0 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72  ta = new AnyPair
36ff0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d  <string, bool>(.
37000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37010 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
37020 72 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79  ration.Directory
37030 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
37040 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  Install);....   
37050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37060 20 6f 62 6a 65 63 74 20 66 69 6c 65 4e 61 6d 65   object fileName
37070 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61  Data = new AnyPa
37080 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
37090 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
370a0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
370b0 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65  guration.Designe
370c0 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66 69  rFileName, confi
370d0 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c  guration.Install
370e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
370f0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
37100 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
37110 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
37150 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37160 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
37170 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49 6e  gion .NET GAC In
37180 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20  stall/Remove..  
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371a0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
371b0 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20  ion.HasFlags(.. 
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371d0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
371e0 6c 6c 46 6c 61 67 73 2e 47 6c 6f 62 61 6c 41 73  llFlags.GlobalAs
371f0 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74 72 75  semblyCache, tru
37200 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
37210 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37230 20 20 20 20 50 75 62 6c 69 73 68 20 70 75 62 6c      Publish publ
37240 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ish = null;.... 
37250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37260 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
37270 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
37280 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
372a0 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50 75 62  ublish = new Pub
372b0 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  lish();....     
372c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372d0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
372e0 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a 20  tion.Install).. 
372f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37320 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
37330 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29  guration.WhatIf)
37340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37360 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20    /* throw */.. 
37370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
37390 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c  ublish.GacInstal
373a0 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  l(configuration.
373b0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  CoreFileName);..
373c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
373d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
373e0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
373f0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
37400 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
37410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37420 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
37430 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
37440 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
37450 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
37460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37470 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49             "GacI
37480 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79  nstall: assembly
37490 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
374c0 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
374d0 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e  ration.CoreFileN
374e0 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37500 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
37510 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
37520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37530 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
37540 67 75 72 61 74 69 6f 6e 2e 49 73 4c 69 6e 71 53  guration.IsLinqS
37550 75 70 70 6f 72 74 65 64 28 29 29 0d 0a 20 20 20  upported())..   
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37570 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37590 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
375a0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
375b0 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
375c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74              /* t
375e0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
375f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37600 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62               pub
37610 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28  lish.GacInstall(
37620 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69  configuration.Li
37630 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  nqFileName);....
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37660 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
37670 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
37680 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
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 20 20 20 20 20 20 20 20                  
376b0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
376c0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
376d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
376e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
376f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37700 20 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c       "GacInstall
37710 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d  : assemblyPath =
37720 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
37730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37740 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
37750 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61  isplay(configura
37760 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d  tion.LinqFileNam
37770 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
37780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37790 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
377a0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
377b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
377d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377e0 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
377f0 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
37800 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
37810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37820 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
37830 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65 47  Flags.VsPackageG
37840 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
37850 68 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  he, true))..    
37860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37870 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37890 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
378a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
378b0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
378c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68             /* th
378e0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
378f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37900 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
37910 69 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63  ish.GacInstall(c
37920 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73  onfiguration.Des
37930 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
37940 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37960 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
37970 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
37980 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
37990 0d 0a 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 20 20 20 20 20                  
379b0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
379c0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
379d0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
379e0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
379f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a00 20 20 20 20 20 20 20 20 22 47 61 63 49 6e 73 74          "GacInst
37a10 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61 74  all: assemblyPat
37a20 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  h = {0}",..     
37a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
37a50 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
37a60 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72  uration.Designer
37a70 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
37a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37aa0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
37ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37ae0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
37af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b00 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
37b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b40 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
37b50 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20  on.HasFlags(..  
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 20 20 20 20 20 20 20 20 20                  
37b80 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56    InstallFlags.V
37b90 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73  sPackageGlobalAs
37ba0 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74 72 75  semblyCache, tru
37bb0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bf0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
37c00 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
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 20 20 20 20 20 20 20                  
37c30 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
37c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c60 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63       publish.Gac
37c70 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61  Remove(configura
37c80 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c  tion.DesignerFil
37c90 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
37ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cb0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
37cc0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
37cd0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
37ce0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
37cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
37d10 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
37d20 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
37d30 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
37d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d60 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65  "GacRemove: asse
37d70 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c  mblyPath = {0}",
37d80 0d 0a 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 20 20 20 20 20                  
37da0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
37db0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44  (configuration.D
37dc0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
37dd0 29 2c 0d 0a 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 20 20 20                  
37df0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
37e00 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
37e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
37e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e40 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
37e50 75 72 61 74 69 6f 6e 2e 49 73 4c 69 6e 71 53 75  uration.IsLinqSu
37e60 70 70 6f 72 74 65 64 28 29 29 0d 0a 20 20 20 20  pported())..    
37e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ea0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
37eb0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
37ec0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
37ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ee0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68             /* th
37ef0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
37f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f10 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
37f20 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f  ish.GacRemove(co
37f30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71  nfiguration.Linq
37f40 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
37f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
37f70 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
37f80 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
37f90 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
37fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fc0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
37fd0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
37fe0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
37ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38010 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61     "GacRemove: a
38020 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30  ssemblyPath = {0
38030 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
38040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38050 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
38060 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  lay(configuratio
38070 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  n.LinqFileName))
38080 2c 0d 0a 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 20 20 20 20                  
380a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
380b0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
380c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
380e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380f0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
38100 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d  uration.WhatIf).
38110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38130 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
38140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
38160 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28  blish.GacRemove(
38170 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
38180 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
38190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
381b0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
381c0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
381d0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
381e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381f0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
38200 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
38210 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
38220 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
38230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38240 20 20 20 20 20 20 20 20 20 22 47 61 63 52 65 6d           "GacRem
38250 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74  ove: assemblyPat
38260 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  h = {0}",..     
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38280 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
38290 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74  splay(configurat
382a0 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.CoreFileName
382b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
382c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382d0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
382e0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
382f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
38300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38310 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
38320 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
38330 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
38340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
38380 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
38390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383a0 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 41 73   #region .NET As
383b0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 0d 0a 20  semblyFolders.. 
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383d0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
383e0 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
383f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38400 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
38410 61 6c 6c 46 6c 61 67 73 2e 41 73 73 65 6d 62 6c  allFlags.Assembl
38420 79 46 6f 6c 64 65 72 73 2c 20 74 72 75 65 29 29  yFolders, true))
38430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38440 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
38450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38460 20 69 66 20 28 21 46 6f 72 45 61 63 68 46 72 61   if (!ForEachFra
38470 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 72  meworkRegistry(r
38480 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
38490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384a0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
384b0 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73  orkList, Process
384c0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c  AssemblyFolders,
384d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
384e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384f0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
38500 52 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 2c  RegistryVersion,
38510 20 64 69 72 65 63 74 6f 72 79 44 61 74 61 2c 0d   directoryData,.
38520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38540 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 50   configuration.P
38550 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
38560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38570 20 20 20 20 20 20 20 20 20 4e 65 74 46 78 49 73           NetFxIs
38580 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e  32BitOnly || con
38590 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34  figuration.Wow64
385a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385c0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
385d0 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c  .ThrowOnMissing,
385e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
385f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38600 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
38610 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72  WhatIf, configur
38620 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a  ation.Verbose,..
38630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38650 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
38660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38670 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
38680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38690 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f      TraceOps.Sho
386a0 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72  wMessage(TracePr
386b0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
386c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
386d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386e0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
386f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74  traceCallback, t
38700 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  hisAssembly,..  
38710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
38730 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ror, traceCatego
38740 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75  ry, MessageBoxBu
38750 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20  ttons.OK,..     
38760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38770 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
38780 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
38790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
387a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
387c0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
387d0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
387e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
387f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38800 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
38810 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
38820 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20   "Failure.",..