System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact fff2744754b1aea15de939429c5931606e255373:


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 74 68 65 20 2e 4e 45 54 20 46 72 61  for the .NET Fra
1c420 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f  mework {1} is no
1c430 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20  w disabled.",.. 
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 20 20 20 20 43 4c 52 76 32             CLRv2
1c460 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1c470 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52  ion, CLRv4ImageR
1c480 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d  untimeVersion),.
1c490 0a 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 20 20 20 20 74 72 61               tra
1c4b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1c4e0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1c4f0 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28   (String.Equals(
1c500 0d 0a 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 20 20 20 20 63 6f                co
1c520 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
1c530 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67  rsion, CLRv4Imag
1c540 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1c550 0d 0a 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 20 20 20 20 53 74                St
1c570 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
1c580 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20  rdinal))..      
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1c5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c5b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
1c5e0 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20 72  r the CLR v4.0 r
1c5f0 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  untime, make sur
1c600 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20  e we disable..  
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1c630 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73  ny attempt to us
1c640 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20  e it for things 
1c650 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20  that require..  
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c670 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1c680 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69  n assembly compi
1c690 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20  led for the CLR 
1c6a0 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20  v2.0...         
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c6c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1c6d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c6e0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
1c6f0 32 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  20 = true;..    
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c710 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1c720 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 74 72  n.noNetFx35 = tr
1c730 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1c750 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
1c760 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  005 = true;..   
1c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c780 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1c790 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 74 72  on.noVs2008 = tr
1c7a0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1c7c0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1c7d0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1c7e0 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20  ity.Medium,..   
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1c810 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1c820 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1c830 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20     "Assembly is 
1c860 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1c870 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1c880 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {0}, " +..      
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8a0 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20 66        "support f
1c8b0 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
1c8c0 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77  ework {1} is now
1c8d0 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20   disabled.",..  
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1c900 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52  play(CLRv4ImageR
1c910 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d  untimeVersion),.
1c920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1c940 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61  Display(CLRv2Ima
1c950 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1c960 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c980 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1c990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c9a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1c9c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1c9d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9f0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
1ca00 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72 74        "unsupport
1ca30 65 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61  ed core file ima
1ca40 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69  ge runtime versi
1ca50 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  on " +..        
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62      "{0}, must b
1ca80 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a  e {1} or {2}",..
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1cab0 69 73 70 6c 61 79 28 63 6f 72 65 49 6d 61 67 65  isplay(coreImage
1cac0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
1cad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1caf0 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d  rDisplay(CLRv2Im
1cb00 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1cb10 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76   ForDisplay(CLRv
1cb40 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
1cb50 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  sion));....     
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1cb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1cbb0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbe0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
1cbf0 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
1cc00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1cc20 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1cc30 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1cc40 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc60 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1cc70 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1cc80 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72   e, traceCategor
1cc90 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1cca0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1ccb0 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63 68   = "Failed to ch
1ccc0 65 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  eck image runtim
1ccd0 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20  e version.";..  
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1ccf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cd00 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1cd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1cd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1cd30 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1cd40 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1cd90 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1cda0 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73  n Public Methods
1cdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1cdc0 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61  blic bool HasFla
1cdd0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
1cde0 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
1cdf0 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20  s hasFlags,..   
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1ce10 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  l all..         
1ce20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1ce30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ce40 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c           if (all
1ce50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ce60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
1ce70 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68  installFlags & h
1ce80 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46  asFlags) == hasF
1ce90 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  lags);..        
1cea0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61    return ((insta
1ced0 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61  llFlags & hasFla
1cee0 67 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c  gs) != InstallFl
1cef0 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20  ags.None);..    
1cf00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1cf10 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1cf70 69 63 20 62 6f 6f 6c 20 49 73 4c 69 6e 71 53 75  ic bool IsLinqSu
1cf80 70 70 6f 72 74 65 64 28 29 0d 0a 20 20 20 20 20  pported()..     
1cf90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1cfa0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1cfc0 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f   NOTE: Return no
1cfd0 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 4c 49  n-zero if the LI
1cfe0 4e 51 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75  NQ assembly shou
1cff0 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20  ld be..         
1d000 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d010 70 72 6f 63 65 73 73 65 64 20 64 75 72 69 6e 67  processed during
1d020 20 74 68 65 20 69 6e 73 74 61 6c 6c 2e 20 20 49   the install.  I
1d030 66 20 74 68 65 20 74 61 72 67 65 74 20 69 73 0d  f the target is.
1d040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d050 20 2f 2f 20 20 20 20 20 20 20 56 69 73 75 61 6c   //       Visual
1d060 20 53 74 75 64 69 6f 20 32 30 30 35 2c 20 74 68   Studio 2005, th
1d070 69 73 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e  is should return
1d080 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20   zero...        
1d090 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1d0b0 72 6e 20 21 6e 6f 4e 65 74 46 78 33 35 20 7c 7c  rn !noNetFx35 ||
1d0c0 20 21 6e 6f 4e 65 74 46 78 34 30 20 7c 7c 20 21   !noNetFx40 || !
1d0d0 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20  noNetFx45;..    
1d0e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d0f0 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1d140 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1d150 69 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20  ic void Dump(.. 
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d170 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
1d180 63 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20  ceCallback..    
1d190 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1d1a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1d1c0 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20   (traceCallback 
1d1d0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1d1e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d200 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d210 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d220 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d240 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d            "Assem
1d250 62 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  bly", ForDisplay
1d260 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20  (assembly)),..  
1d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d280 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1d290 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d2b0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1d2c0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1d2d0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2f0 20 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61        "LogFileNa
1d300 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
1d310 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  logFileName)),..
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1d340 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d360 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1d370 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1d380 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3a0 20 20 20 20 20 20 20 20 22 44 69 72 65 63 74 6f          "Directo
1d3b0 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ry", ForDisplay(
1d3c0 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20  directory)),..  
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1d3f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d410 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1d420 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1d430 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d450 20 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e        "CoreFileN
1d460 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
1d470 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c  (coreFileName)),
1d480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d490 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d4a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d4d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d4e0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d500 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46            "LinqF
1d510 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
1d520 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d  play(linqFileNam
1d530 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d550 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d570 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d580 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d590 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d5a0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
1d5c0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22  esignerFileName"
1d5d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 73  , ForDisplay(des
1d5e0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c  ignerFileName)),
1d5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d600 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d610 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d640 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d650 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d670 20 20 20 20 20 20 20 20 20 20 22 52 65 67 69 73            "Regis
1d680 74 72 79 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72  tryVersion", For
1d690 44 69 73 70 6c 61 79 28 72 65 67 69 73 74 72 79  Display(registry
1d6a0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1d6d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1d6e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d6f0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1d700 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1d710 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d730 20 20 20 20 22 43 6f 6e 66 69 67 56 65 72 73 69      "ConfigVersi
1d740 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on", ForDisplay(
1d750 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 29 29 2c  configVersion)),
1d760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d770 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d780 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d7b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d7c0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d7e0 20 20 20 20 20 20 20 20 20 20 22 56 73 56 65 72            "VsVer
1d7f0 73 69 6f 6e 53 75 66 66 69 78 22 2c 20 46 6f 72  sionSuffix", For
1d800 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f  Display(vsVersio
1d810 6e 53 75 66 66 69 78 29 29 2c 0d 0a 20 20 20 20  nSuffix)),..    
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d830 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1d840 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1d850 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d860 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1d870 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1d880 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8a0 20 20 20 20 22 44 65 62 75 67 46 6f 72 6d 61 74      "DebugFormat
1d8b0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65  ", ForDisplay(de
1d8c0 62 75 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20  bugFormat)),..  
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1d8f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d910 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1d920 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1d930 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d950 20 20 20 20 20 20 22 54 72 61 63 65 46 6f 72 6d        "TraceForm
1d960 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  at", ForDisplay(
1d970 74 72 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a  traceFormat)),..
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1d9a0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d9c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1d9d0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1d9e0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da00 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c          "Install
1da10 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c  Flags", ForDispl
1da20 61 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29  ay(installFlags)
1da30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1da40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1da50 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da70 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1da80 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1da90 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1daa0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62              "Deb
1dac0 75 67 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72  ugPriority", For
1dad0 44 69 73 70 6c 61 79 28 64 65 62 75 67 50 72 69  Display(debugPri
1dae0 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20  ority)),..      
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1db10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1db20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1db30 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1db40 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1db50 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 22 54 72 61 63 65 50 72 69 6f 72 69 74 79    "TracePriority
1db80 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72  ", ForDisplay(tr
1db90 61 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a  acePriority)),..
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbb0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1dbc0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1dbe0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1dbf0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1dc00 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc20 20 20 20 20 20 20 20 20 22 50 65 72 55 73 65 72          "PerUser
1dc30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 70 65  ", ForDisplay(pe
1dc40 72 55 73 65 72 29 29 2c 0d 0a 20 20 20 20 20 20  rUser)),..      
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1dc70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1dc80 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1dc90 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1dca0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1dcb0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72    "Install", For
1dce0 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29  Display(install)
1dcf0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1dd10 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd30 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1dd40 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1dd50 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1dd60 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 77              "Wow
1dd80 36 34 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  64", ForDisplay(
1dd90 77 6f 77 36 34 29 29 2c 0d 0a 20 20 20 20 20 20  wow64)),..      
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddb0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1ddc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ddd0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1dde0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1ddf0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1de00 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de20 20 20 22 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73    "NoRuntimeVers
1de30 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion", ForDisplay
1de40 28 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  (noRuntimeVersio
1de50 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1de70 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1de80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1de90 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1dea0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1deb0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1dec0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1dee0 6f 44 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69  oDesktop", ForDi
1def0 73 70 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29  splay(noDesktop)
1df00 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1df10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1df20 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1df50 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1df60 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1df70 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1df80 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43              "NoC
1df90 6f 6d 70 61 63 74 22 2c 20 46 6f 72 44 69 73 70  ompact", ForDisp
1dfa0 6c 61 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c  lay(noCompact)),
1dfb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dfc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1dfd0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dff0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e000 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e010 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e030 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
1e040 46 78 32 30 22 2c 20 46 6f 72 44 69 73 70 6c 61  Fx20", ForDispla
1e050 79 28 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a  y(noNetFx20)),..
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e080 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e0a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e0b0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e0c0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0e0 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
1e0f0 33 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  35", ForDisplay(
1e100 6e 6f 4e 65 74 46 78 33 35 29 29 2c 0d 0a 20 20  noNetFx35)),..  
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e120 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e130 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e150 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e160 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e170 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e190 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30        "NoNetFx40
1e1a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1e1b0 4e 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20  NetFx40)),..    
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e1e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e1f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e200 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e210 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e220 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e240 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c      "NoNetFx45",
1e250 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
1e260 74 46 78 34 35 29 29 2c 0d 0a 20 20 20 20 20 20  tFx45)),..      
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e280 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e290 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e2a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e2b0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e2c0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e2d0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2f0 20 20 22 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f    "NoVs2005", Fo
1e300 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30  rDisplay(noVs200
1e310 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  5)),..          
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e330 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e350 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e360 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e370 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e380 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e3a0 6f 56 73 32 30 30 38 22 2c 20 46 6f 72 44 69 73  oVs2008", ForDis
1e3b0 70 6c 61 79 28 6e 6f 56 73 32 30 30 38 29 29 2c  play(noVs2008)),
1e3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e3d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e3e0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e410 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e420 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e440 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
1e450 30 31 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  010", ForDisplay
1e460 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20 20  (noVs2010)),..  
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e490 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e4b0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e4c0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e4d0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4f0 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 32 22        "NoVs2012"
1e500 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1e510 73 32 30 31 32 29 29 2c 0d 0a 20 20 20 20 20 20  s2012)),..      
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e530 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e540 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e550 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e560 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e570 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e580 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 20 20 22 4e 6f 56 73 32 30 31 33 22 2c 20 46 6f    "NoVs2013", Fo
1e5b0 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31  rDisplay(noVs201
1e5c0 33 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  3)),..          
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e5e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e600 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e610 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e620 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e630 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e650 6f 54 72 61 63 65 22 2c 20 46 6f 72 44 69 73 70  oTrace", ForDisp
1e660 6c 61 79 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a  lay(noTrace)),..
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e690 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e6b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e6c0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e6d0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6f0 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f          "NoConso
1e700 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  le", ForDisplay(
1e710 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20  noConsole)),..  
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e730 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e740 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e760 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e770 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e780 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7a0 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46        "NoLog", F
1e7b0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29  orDisplay(noLog)
1e7c0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e7e0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e800 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e810 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e820 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e830 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e840 20 20 20 20 20 20 20 20 20 20 20 20 22 54 68 72              "Thr
1e850 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f  owOnMissing", Fo
1e860 72 44 69 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e  rDisplay(throwOn
1e870 4d 69 73 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20  Missing)),..    
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e890 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1e8a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1e8b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e8c0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1e8d0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1e8e0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e900 20 20 20 20 22 57 68 61 74 49 66 22 2c 20 46 6f      "WhatIf", Fo
1e910 72 44 69 73 70 6c 61 79 28 77 68 61 74 49 66 29  rDisplay(whatIf)
1e920 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e930 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e940 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e960 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e970 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e980 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e990 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62              "Deb
1e9b0 75 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ug", ForDisplay(
1e9c0 64 65 62 75 67 29 29 2c 0d 0a 20 20 20 20 20 20  debug)),..      
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e9f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ea00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ea10 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1ea20 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1ea30 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea50 20 20 22 56 65 72 62 6f 73 65 22 2c 20 46 6f 72    "Verbose", For
1ea60 44 69 73 70 6c 61 79 28 76 65 72 62 6f 73 65 29  Display(verbose)
1ea70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ea90 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eab0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1eac0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1ead0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1eae0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e              "Con
1eb00 66 69 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61  firm", ForDispla
1eb10 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20  y(confirm)),..  
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb30 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1eb40 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  if (assembly != 
1ebc0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1ebd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebf0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ec00 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1ec10 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1ec20 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec40 20 20 20 22 41 73 73 65 6d 62 6c 79 54 69 74 6c     "AssemblyTitl
1ec50 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41   ForDisplay(GetA
1ec80 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73  ssemblyTitle(ass
1ec90 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20  embly))),..     
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1ecc0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ece0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1ecf0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1ed00 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1ed10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ed30 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
1ed40 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  ation",..       
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed60 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1ed70 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69  GetAssemblyConfi
1ed80 67 75 72 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c  guration(assembl
1ed90 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  y))),..         
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edb0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1edc0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1edd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ede0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1edf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1ee00 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1ee10 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
1ee20 20 20 20 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 2f 2f  ////////////////
1ee60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ee70 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
1ee80 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
1ee90 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1eea0 76 61 74 65 20 41 73 73 65 6d 62 6c 79 20 61 73  vate Assembly as
1eeb0 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20  sembly;..       
1eec0 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
1eed0 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20  mbly Assembly.. 
1eee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1ef00 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d  t { return assem
1ef10 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  bly; }..        
1ef20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 73          set { as
1ef30 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20  sembly = value; 
1ef40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1ef50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f  ////////////////
1efa0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1efb0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
1efc0 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a  g logFileName;..
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1efe0 69 63 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c  ic string LogFil
1eff0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
1f000 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f010 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1f020 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20  rn logFileName; 
1f030 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1f040 20 20 20 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65     set { logFile
1f050 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
1f060 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1f0d0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1f0e0 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20  directory;..    
1f0f0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1f100 74 72 69 6e 67 20 44 69 72 65 63 74 6f 72 79 0d  tring Directory.
1f110 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f130 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 69 72  get { return dir
1f140 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20  ectory; }..     
1f150 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1f160 20 64 69 72 65 63 74 6f 72 79 20 3d 20 76 61 6c   directory = val
1f170 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1f180 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f190 20 20 20 20 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 2f  ////////////////
1f1d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f1e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1f1f0 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
1f200 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
1f210 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43   public string C
1f220 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  oreFileName..   
1f230 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f240 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1f250 7b 20 72 65 74 75 72 6e 20 63 6f 72 65 46 69 6c  { return coreFil
1f260 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
1f270 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1f280 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76  coreFileName = v
1f290 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1f2a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f2b0 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f300 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1f310 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
1f320 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
1f330 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1f340 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20   LinqFileName.. 
1f350 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1f370 74 20 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71 46  t { return linqF
1f380 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
1f390 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f3a0 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  { linqFileName =
1f3b0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1f3c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f3d0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f420 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1f430 74 65 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e  te string design
1f440 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  erFileName;..   
1f450 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f460 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46  string DesignerF
1f470 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
1f480 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f490 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1f4a0 74 75 72 6e 20 64 65 73 69 67 6e 65 72 46 69 6c  turn designerFil
1f4b0 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
1f4c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1f4d0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
1f4e0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1f4f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f500 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f550 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1f560 76 61 74 65 20 73 74 72 69 6e 67 20 72 65 67 69  vate string regi
1f570 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  stryVersion;..  
1f580 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1f590 20 73 74 72 69 6e 67 20 52 65 67 69 73 74 72 79   string Registry
1f5a0 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  Version..       
1f5b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f5c0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1f5d0 74 75 72 6e 20 72 65 67 69 73 74 72 79 56 65 72  turn registryVer
1f5e0 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sion; }..       
1f5f0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
1f600 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d  egistryVersion =
1f610 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1f620 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f630 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f680 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1f690 74 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67  te string config
1f6a0 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
1f6b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1f6c0 69 6e 67 20 43 6f 6e 66 69 67 56 65 72 73 69 6f  ing ConfigVersio
1f6d0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  n..            {
1f6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f6f0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63    get { return c
1f700 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 20 7d 0d  onfigVersion; }.
1f710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f720 20 73 65 74 20 7b 20 63 6f 6e 66 69 67 56 65 72   set { configVer
1f730 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sion = value; }.
1f740 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1f7b0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1f7c0 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b  vsVersionSuffix;
1f7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1f7e0 62 6c 69 63 20 73 74 72 69 6e 67 20 56 73 56 65  blic string VsVe
1f7f0 72 73 69 6f 6e 53 75 66 66 69 78 0d 0a 20 20 20  rsionSuffix..   
1f800 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f810 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1f820 7b 20 72 65 74 75 72 6e 20 76 73 56 65 72 73 69  { return vsVersi
1f830 6f 6e 53 75 66 66 69 78 3b 20 7d 0d 0a 20 20 20  onSuffix; }..   
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1f850 20 7b 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66   { vsVersionSuff
1f860 69 78 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ix = value; }.. 
1f870 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f880 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f8d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1f8e0 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65  rivate string de
1f8f0 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
1f900 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1f910 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61  tring DebugForma
1f920 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
1f930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f940 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
1f950 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20  ebugFormat; }.. 
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f970 65 74 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74  et { debugFormat
1f980 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1f990 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f9a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1fa00 76 61 74 65 20 73 74 72 69 6e 67 20 74 72 61 63  vate string trac
1fa10 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  eFormat;..      
1fa20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1fa30 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d  ing TraceFormat.
1fa40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61  get { return tra
1fa70 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20  ceFormat; }..   
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1fa90 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d   { traceFormat =
1faa0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1fab0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fac0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1fb10 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1fb20 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20  te InstallFlags 
1fb30 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20  installFlags;.. 
1fb40 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1fb50 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 49  c InstallFlags I
1fb60 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20  nstallFlags..   
1fb70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1fb90 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c  { return install
1fba0 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20 20  Flags; }..      
1fbb0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1fbc0 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 76  installFlags = v
1fbd0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1fbe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fbf0 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1fc40 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1fc50 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64   TracePriority d
1fc60 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
1fc70 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1fc80 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
1fc90 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a 20  DebugPriority.. 
1fca0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1fcc0 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
1fcd0 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20  Priority; }..   
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1fcf0 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79   { debugPriority
1fd00 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1fd10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1fd20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1fd70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1fd80 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69  vate TracePriori
1fd90 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
1fda0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1fdb0 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72  ublic TracePrior
1fdc0 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74  ity TracePriorit
1fdd0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1fde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fdf0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
1fe00 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d  racePriority; }.
1fe10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe20 20 73 65 74 20 7b 20 74 72 61 63 65 50 72 69 6f   set { tracePrio
1fe30 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  rity = value; }.
1fe40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1fe50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fea0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1feb0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65   private bool pe
1fec0 72 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  rUser;..        
1fed0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1fee0 50 65 72 55 73 65 72 0d 0a 20 20 20 20 20 20 20  PerUser..       
1fef0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ff00 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1ff10 74 75 72 6e 20 70 65 72 55 73 65 72 3b 20 7d 0d  turn perUser; }.
1ff20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ff30 20 73 65 74 20 7b 20 70 65 72 55 73 65 72 20 3d   set { perUser =
1ff40 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1ff50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ff60 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1ffb0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1ffc0 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b  te bool install;
1ffd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1ffe0 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c  blic bool Instal
1fff0 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  l..            {
20000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20010 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69    get { return i
20020 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20  nstall; }..     
20030 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20040 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65   install = value
20050 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20060 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20070 20 20 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 2f 2f 2f  ////////////////
200b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
200c0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
200d0 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20  l wow64;..      
200e0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
200f0 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l Wow64..       
20100 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20110 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20120 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a 20  turn wow64; }.. 
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20140 65 74 20 7b 20 77 6f 77 36 34 20 3d 20 76 61 6c  et { wow64 = val
20150 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
20160 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20170 20 20 20 20 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 2f  ////////////////
201b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
201c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
201d0 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72  ool noRuntimeVer
201e0 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
201f0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
20200 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d  oRuntimeVersion.
20210 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20230 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52  get { return noR
20240 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d  untimeVersion; }
20250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20260 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d    set { noRuntim
20270 65 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65  eVersion = value
20280 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20290 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
202a0 20 20 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 2f 2f 2f  ////////////////
202e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
202f0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
20300 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20  l noDesktop;..  
20310 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
20320 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d   bool NoDesktop.
20330 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20350 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44  get { return noD
20360 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20  esktop; }..     
20370 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
20380 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c   noDesktop = val
20390 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
203a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
203b0 20 20 20 20 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 2f  ////////////////
203f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20400 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
20410 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a  ool noCompact;..
20420 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20430 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63  ic bool NoCompac
20440 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
20450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20460 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
20470 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20  oCompact; }..   
20480 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
20490 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76   { noCompact = v
204a0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
204b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
204c0 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20510 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20520 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b   bool noNetFx20;
20530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
20540 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
20550 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x20..           
20560 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20570 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20580 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20   noNetFx20; }.. 
20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
205a0 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d  et { noNetFx20 =
205b0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
205c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
205d0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20620 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20630 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33  te bool noNetFx3
20640 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
20650 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
20660 74 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20 20  tFx35..         
20670 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20680 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
20690 72 6e 20 6e 6f 4e 65 74 46 78 33 35 3b 20 7d 0d  rn noNetFx35; }.
206a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
206b0 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 33 35   set { noNetFx35
206c0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
206d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
206e0 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20730 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20740 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
20750 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x40;..          
20760 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
20770 4e 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20  NetFx40..       
20780 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20790 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
207a0 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20  turn noNetFx40; 
207b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
207c0 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
207d0 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  40 = value; }.. 
207e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
207f0 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20840 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20850 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
20860 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx45;..        
20870 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
20880 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20 20 20 20  NoNetFx45..     
20890 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
208a0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
208b0 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35  return noNetFx45
208c0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
208d0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
208e0 46 78 34 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Fx45 = value; }.
208f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
20950 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20960 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
20970 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20  Vs2005;..       
20980 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
20990 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20 20   NoVs2005..     
209a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
209b0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
209c0 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b  return noVs2005;
209d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
209e0 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
209f0 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  05 = value; }.. 
20a00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20a10 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20a70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73  rivate bool noVs
20a80 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
20a90 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
20aa0 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20  oVs2008..       
20ab0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20ac0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20ad0 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d  turn noVs2008; }
20ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20af0 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38    set { noVs2008
20b00 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20b20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20b80 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30  vate bool noVs20
20b90 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10;..           
20ba0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56   public bool NoV
20bb0 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20  s2010..         
20bc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20bd0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
20be0 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a  rn noVs2010; }..
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c00 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d  set { noVs2010 =
20c10 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20c20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20c30 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20c80 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20c90 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32  te bool noVs2012
20ca0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
20cb0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
20cc0 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  012..           
20cd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20ce0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20cf0 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20   noVs2012; }..  
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
20d10 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20 76  t { noVs2012 = v
20d20 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20d30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20d40 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20d90 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20da0 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 3b 0d   bool noVs2013;.
20db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
20dc0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31  lic bool NoVs201
20dd0 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  3..            {
20de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20df0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
20e00 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20 20 20  oVs2013; }..    
20e10 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
20e20 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20 76 61 6c  { noVs2013 = val
20e30 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
20e40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20e50 20 20 20 20 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 2f  ////////////////
20e90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20ea0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
20eb0 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20  ool noTrace;..  
20ec0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
20ed0 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20   bool NoTrace.. 
20ee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20f00 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61  t { return noTra
20f10 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ce; }..         
20f20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54         set { noT
20f30 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  race = value; }.
20f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fa0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20fb0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
20fc0 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20  Console;..      
20fd0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
20fe0 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20  l NoConsole..   
20ff0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21000 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
21010 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f  { return noConso
21020 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  le; }..         
21030 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43         set { noC
21040 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20  onsole = value; 
21050 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
210c0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
210d0 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20  noLog;..        
210e0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
210f0 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20  NoLog..         
21100 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21110 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
21120 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20  rn noLog; }..   
21130 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21140 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65   { noLog = value
21150 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21160 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21170 20 20 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 2f 2f 2f  ////////////////
211b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
211c0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
211d0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
211e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
211f0 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77  ublic bool Throw
21200 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20  OnMissing..     
21210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21220 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21230 72 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69  return throwOnMi
21240 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20  ssing; }..      
21250 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
21260 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d  throwOnMissing =
21270 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21280 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21290 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
212e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
212f0 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
21300 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21310 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
21320 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21340 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68 61  get { return wha
21350 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  tIf; }..        
21360 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 68          set { wh
21370 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  atIf = value; }.
21380 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
213e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
213f0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 65   private bool de
21400 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bug;..          
21410 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65    public bool De
21420 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bug..           
21430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21440 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21450 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20   debug; }..     
21460 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
21470 20 64 65 62 75 67 20 3d 20 76 61 6c 75 65 3b 20   debug = value; 
21480 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f  ////////////////
214e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
214f0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
21500 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20  verbose;..      
21510 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
21520 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l Verbose..     
21530 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21540 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21550 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20  return verbose; 
21560 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
21570 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65     set { verbose
21580 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
21590 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
215a0 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
215f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
21600 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72  vate bool confir
21610 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m;..            
21620 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66  public bool Conf
21630 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  irm..           
21640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21650 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21660 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20   confirm; }..   
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21680 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c   { confirm = val
21690 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
216a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
216b0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
216c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
216d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
216e0 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21730 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
21740 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20  n FrameworkList 
21750 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
21760 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
21770 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  ass FrameworkLis
21780 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
21790 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
217a0 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
217b0 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
217c0 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77     public Framew
217d0 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20  orkList()..     
217e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
217f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
21800 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
21810 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21820 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
21830 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
21880 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
21890 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
218a0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
218b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f        private Mo
218c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
218d0 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  otKey;..        
218e0 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
218f0 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b  egistryKey RootK
21900 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
21910 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21920 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
21930 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20  rootKey; }..    
21940 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
21950 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75  { rootKey = valu
21960 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
21970 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21980 20 20 20 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 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
219d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74        private St
219e0 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d  ringList names;.
219f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21a00 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 4e  lic StringList N
21a10 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
21a20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21a30 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
21a40 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20  n names; }..    
21a50 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
21a60 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b  { names = value;
21a70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21a80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
21a90 20 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 2f 2f 2f 2f  ////////////////
21ad0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21ae0 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73      private Vers
21af0 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b  ionMap versions;
21b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
21b10 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20  blic VersionMap 
21b20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
21b30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21b40 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
21b50 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20  eturn versions; 
21b60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
21b70 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e     set { version
21b80 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
21b90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
21c00 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74  ivate StringList
21c10 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d   platformNames;.
21c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21c30 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 50  lic StringList P
21c40 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20  latformNames..  
21c50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21c60 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
21c70 20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66 6f   { return platfo
21c80 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20  rmNames; }..    
21c90 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
21ca0 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20  { platformNames 
21cb0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
21cc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21cd0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
21ce0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
21cf0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
21d00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
21d50 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
21d60 72 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c  region VsList Cl
21d70 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
21d80 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
21d90 73 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20 20  s VsList..      
21da0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21db0 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
21dc0 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
21dd0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21de0 20 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20 20   VsList()..     
21df0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21e00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
21e10 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
21e20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21e30 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
21e40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
21e90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
21ea0 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
21eb0 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
21ec0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21ed0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
21ee0 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20   rootKey;..     
21ef0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
21f00 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f  ckRegistryKey Ro
21f10 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  otKey..         
21f20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21f30 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
21f40 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20  rn rootKey; }.. 
21f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21f60 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76  et { rootKey = v
21f70 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21f80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21f90 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21fe0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21ff0 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72   VersionList ver
22000 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20  sions;..        
22010 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
22020 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d  onList Versions.
22030 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22050 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72  get { return ver
22060 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20  sions; }..      
22070 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
22080 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65  versions = value
22090 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
220a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
220b0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
220c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
220d0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
220e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
220f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
22150 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
22160 74 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20 20  tant Data..     
22170 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
22180 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65   string CoreFile
22190 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
221a0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b  ata.SQLite.dll";
221b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
221c0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
221d0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53  inqFileName = "S
221e0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
221f0 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20  e.Linq.dll";..  
22200 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
22210 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73 69 67  nst string Desig
22220 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53  nerFileName = "S
22230 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64  QLite.Designer.d
22240 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ll";..        pr
22250 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
22260 6e 67 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 20  ng ProviderName 
22270 3d 20 22 53 51 4c 69 74 65 20 44 61 74 61 20 50  = "SQLite Data P
22280 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20 20 20  rovider";..     
22290 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
222a0 20 73 74 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e   string ProjectN
222b0 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
222c0 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20  ta.SQLite";..   
222d0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
222e0 73 74 20 73 74 72 69 6e 67 20 4c 65 67 61 63 79  st string Legacy
222f0 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53  ProjectName = "S
22300 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20  QLite";..       
22310 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
22320 74 72 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e  tring InvariantN
22330 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
22340 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20  ta.SQLite";..   
22350 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
22360 73 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72  st string Factor
22370 79 54 79 70 65 4e 61 6d 65 20 3d 20 22 53 79 73  yTypeName = "Sys
22380 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
22390 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b 0d  SQLiteFactory";.
223a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
223b0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
223c0 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 2e 4e 45  scription = ".NE
223d0 54 20 46 72 61 6d 65 77 6f 72 6b 20 44 61 74 61  T Framework Data
223e0 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
223f0 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  Lite";....      
22400 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22450 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
22460 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 32 49  st string CLRv2I
22470 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
22480 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30 37 32 37  on = "v2.0.50727
22490 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
224a0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
224b0 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
224c0 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e  meVersion = "v4.
224d0 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20  0.30319";....   
224e0 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22530 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22540 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d  const string Nam
22550 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20  eAndValueFormat 
22560 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20  = "{0}: {1}";.. 
22570 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
22580 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46  onst string LogF
22590 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f  ileSuffix = ".lo
225a0 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  g";....        /
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 2f 2f  ////////////////
225f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22600 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
22610 73 74 72 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61  string RootKeyNa
22620 6d 65 20 3d 20 22 53 6f 66 74 77 61 72 65 22 3b  me = "Software";
22630 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22640 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 57  e const string W
22650 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d  ow64SubKeyName =
22660 20 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d   "Wow6432Node";.
22670 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
226c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
226d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
226e0 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d  E: The .NET Fram
226f0 65 77 6f 72 6b 20 68 61 73 20 62 6f 74 68 20 33  ework has both 3
22700 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
22710 20 65 64 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20   editions...    
22720 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
22730 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
22740 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74  eadonly bool Net
22750 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20  FxIs32BitOnly = 
22760 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
22770 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
227c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
227d0 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f   // NOTE: For no
227e0 77 2c 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  w, Visual Studio
227f0 20 69 73 20 61 6c 77 61 79 73 20 61 20 33 32 2d   is always a 32-
22800 62 69 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e  bit application.
22810 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
22820 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22830 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f  atic readonly bo
22840 6f 6c 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79  ol VsIs32BitOnly
22850 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
22860 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
228b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
228c0 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73  tatic readonly s
228d0 74 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74  tring VsIdFormat
228e0 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20   = "B";....     
228f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22940 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22950 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
22960 72 69 6e 67 20 58 50 61 74 68 46 6f 72 41 64 64  ring XPathForAdd
22970 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20  Element =..     
22980 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72         "configur
22990 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74  ation/system.dat
229a0 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  a/DbProviderFact
229b0 6f 72 69 65 73 2f 61 64 64 5b 40 69 6e 76 61 72  ories/add[@invar
229c0 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
229d0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
229e0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
229f0 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
22a00 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20  orRemoveElement 
22a10 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
22a20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79  configuration/sy
22a30 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76  stem.data/DbProv
22a40 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f 72 65  iderFactories/re
22a50 6d 6f 76 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d  move[@invariant=
22a60 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20  \"{0}\"]";..    
22a70 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
22a80 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ad0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
22ae0 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61  gion Private Sta
22af0 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20  tic Data..      
22b00 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
22b10 20 41 73 73 65 6d 62 6c 79 20 74 68 69 73 41 73   Assembly thisAs
22b20 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c  sembly = Assembl
22b30 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67 41 73  y.GetExecutingAs
22b40 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  sembly();....   
22b50 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
22b60 74 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65  tic string trace
22b70 43 61 74 65 67 6f 72 79 20 3d 20 50 61 74 68 2e  Category = Path.
22b80 47 65 74 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20  GetFileName(..  
22b90 20 20 20 20 20 20 20 20 20 20 74 68 69 73 41 73            thisAs
22ba0 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29  sembly.Location)
22bb0 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 6d 65 20  ; /* NOTE: Same 
22bc0 66 6f 72 20 64 65 62 75 67 20 61 6e 64 20 74 72  for debug and tr
22bd0 61 63 65 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  ace. */....     
22be0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
22bf0 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  c TraceCallback 
22c00 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20  debugCallback = 
22c10 41 70 70 44 65 62 75 67 3b 0d 0a 20 20 20 20 20  AppDebug;..     
22c20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
22c30 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20  c TraceCallback 
22c40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20  traceCallback = 
22c50 41 70 70 54 72 61 63 65 3b 0d 0a 0d 0a 20 20 20  AppTrace;....   
22c60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22cb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22cc0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79  static string sy
22cd0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
22ce0 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  null;....#if WIN
22cf0 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 70 72  DOWS..        pr
22d00 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
22d10 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74  ing systemDirect
22d20 6f 72 79 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b  oryWow64 = null;
22d30 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
22d40 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22d90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
22da0 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 43  tatic int filesC
22db0 72 65 61 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20  reated = 0;..   
22dc0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
22dd0 74 69 63 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64  tic int filesMod
22de0 69 66 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  ified = 0;..    
22df0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
22e00 69 63 20 69 6e 74 20 66 69 6c 65 73 44 65 6c 65  ic int filesDele
22e10 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ted = 0;..      
22e20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
22e30 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22e80 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
22e90 6f 6e 20 54 72 61 63 65 20 48 61 6e 64 6c 69 6e  on Trace Handlin
22ea0 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
22eb0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
22ec0 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28   GetLogFileName(
22ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
22ee0 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20  ring typeName.. 
22ef0 20 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20             ) /* 
22f00 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
22f10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22f20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
22f30 20 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70 46   = Path.GetTempF
22f40 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20  ileName();..    
22f50 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
22f60 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e  irectory = Path.
22f70 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65  GetDirectoryName
22f80 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  (fileName);..   
22f90 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
22fa0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50  fileNameOnly = P
22fb0 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57  ath.GetFileNameW
22fc0 69 74 68 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28  ithoutExtension(
22fd0 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
22fe0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
22ff0 20 6e 65 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50   newFileName = P
23000 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
23010 63 74 6f 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f  ctory, String.Fo
23020 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
23030 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32         "{0}{1}{2
23040 7d 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  }", traceCategor
23050 79 2c 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  y, !String.IsNul
23060 6c 4f 72 45 6d 70 74 79 28 74 79 70 65 4e 61 6d  lOrEmpty(typeNam
23070 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
23080 20 20 20 20 20 20 20 20 20 20 22 2e 22 20 2b 20            "." + 
23090 74 79 70 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e  typeName : Strin
230a0 67 2e 45 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66  g.Empty, "." + f
230b0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20  ileNameOnly +.. 
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230d0 20 20 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78     LogFileSuffix
230e0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
230f0 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c     File.Move(fil
23100 65 4e 61 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61  eName, newFileNa
23110 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
23120 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 46 69      return newFi
23130 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
23140 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
23190 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
231a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
231b0 76 6f 69 64 20 41 70 70 44 65 62 75 67 28 0d 0a  void AppDebug(..
231c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
231d0 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
231e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
231f0 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
23200 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
23210 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23220 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 43 6f  TraceOps.DebugCo
23230 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  re(String.Format
23240 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23250 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
23260 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70  gFormat, TraceOp
23270 73 2e 4e 65 78 74 44 65 62 75 67 49 64 28 29 2c  s.NextDebugId(),
23280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23290 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53    TraceOps.TimeS
232a0 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74  tamp(DateTime.Ut
232b0 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c  cNow), message),
232c0 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
232d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
232e0 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23330 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
23340 74 69 63 20 76 6f 69 64 20 41 70 70 54 72 61 63  tic void AppTrac
23350 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
23360 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
23370 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
23380 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
23390 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
233a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
233b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
233c0 63 65 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f  ceCore(String.Fo
233d0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
233e0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
233f0 54 72 61 63 65 46 6f 72 6d 61 74 2c 20 54 72 61  TraceFormat, Tra
23400 63 65 4f 70 73 2e 4e 65 78 74 54 72 61 63 65 49  ceOps.NextTraceI
23410 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d(),..          
23420 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
23430 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d  imeStamp(DateTim
23440 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61  e.UtcNow), messa
23450 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ge), category);.
23460 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
23470 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
23480 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
234d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
234e0 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 50 6c 61  gion Generic Pla
234f0 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a  tform Handling..
23500 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23510 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 36 34  static bool Is64
23520 42 69 74 50 72 6f 63 65 73 73 28 29 0d 0a 20 20  BitProcess()..  
23530 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23540 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
23550 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65       // NOTE: Re
23560 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68  turns true if th
23570 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
23580 73 20 69 73 20 36 34 2d 62 69 74 2e 20 20 49 66  s is 64-bit.  If
23590 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20   this..         
235a0 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 74     //       is t
235b0 72 75 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74  rue, we *know* t
235c0 68 61 74 20 77 65 20 6d 75 73 74 20 62 65 20 72  hat we must be r
235d0 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62  unning on a 64-b
235e0 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..            
235f0 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69  //       operati
23600 6e 67 20 73 79 73 74 65 6d 20 61 73 20 77 65 6c  ng system as wel
23610 6c 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20  l.  However, if 
23620 74 68 69 73 20 69 73 20 66 61 6c 73 65 2c 20 77  this is false, w
23630 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  e..            /
23640 2f 20 20 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e  /       do not n
23650 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
23660 74 68 61 74 20 77 65 20 61 72 65 20 72 75 6e 6e  that we are runn
23670 69 6e 67 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d  ing on a 32-bit.
23680 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
23690 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20        operating 
236a0 73 79 73 74 65 6d 2c 20 64 75 65 20 74 6f 20 57  system, due to W
236b0 6f 57 36 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57  oW64 (Win32-on-W
236c0 69 6e 36 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20  in64), etc...   
236d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
236e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
236f0 28 49 6e 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20  (IntPtr.Size == 
23700 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f  sizeof(long)); /
23710 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20  / NOTE: Pointer 
23720 69 73 20 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20  is 64-bits?..   
23730 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23740 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23790 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
237a0 74 69 63 20 62 6f 6f 6c 20 49 73 53 75 70 70 6f  tic bool IsSuppo
237b0 72 74 65 64 52 6f 6f 74 4b 65 79 28 0d 0a 20 20  rtedRootKey(..  
237c0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
237d0 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
237e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
237f0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
23800 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  otKey..         
23810 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
23820 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
23830 75 72 6e 20 4f 62 6a 65 63 74 2e 52 65 66 65 72  urn Object.Refer
23840 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
23850 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72  ey, registry.Cur
23860 72 65 6e 74 55 73 65 72 29 20 7c 7c 0d 0a 20 20  rentUser) ||..  
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 62                Ob
23880 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
23890 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65  uals(rootKey, re
238a0 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
238b0 69 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ine);..        }
238c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
23910 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23920 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
23930 72 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e  ring GetRootKeyN
23940 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
23950 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
23960 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
23970 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
23980 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
23990 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
239a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
239b0 2f 20 42 55 47 46 49 58 3a 20 41 70 70 61 72 65  / BUGFIX: Appare
239c0 6e 74 6c 79 2c 20 74 68 65 20 70 65 72 2d 75 73  ntly, the per-us
239d0 65 72 20 72 65 67 69 73 74 72 79 20 68 69 76 65  er registry hive
239e0 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 0d 0a 20   does not use.. 
239f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
23a00 20 20 20 20 20 20 74 68 65 20 22 57 6f 77 36 34        the "Wow64
23a10 33 32 4e 6f 64 65 22 20 6e 6f 64 65 20 74 6f 20  32Node" node to 
23a20 73 74 6f 72 65 20 73 65 74 74 69 6e 67 73 20 66  store settings f
23a30 6f 72 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20  or 32-bit..     
23a40 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
23a50 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72    applications r
23a60 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62  unning on a 64-b
23a70 69 74 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  it operating sys
23a80 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tem...          
23a90 20 20 2f 2f 20 20 20 20 20 20 20 20 20 54 69 63    //         Tic
23aa0 6b 65 74 20 5b 61 30 36 37 37 33 30 39 66 30 5d  ket [a0677309f0]
23ab0 20 68 61 73 20 66 75 72 74 68 65 72 20 64 65 74   has further det
23ac0 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  ails...         
23ad0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
23ae0 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
23af0 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22  .Format("{0}{1}"
23b00 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a  , RootKeyName,..
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b20 21 70 65 72 55 73 65 72 20 26 26 20 77 6f 77 36  !perUser && wow6
23b30 34 20 26 26 20 49 73 36 34 42 69 74 50 72 6f 63  4 && Is64BitProc
23b40 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20  ess() ?..       
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c               "\\
23b60 22 20 2b 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  " + Wow64SubKeyN
23b70 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70  ame : String.Emp
23b80 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ty);..        }.
23b90 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
23be0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
23bf0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
23c00 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69 72  ing GetSystemDir
23c10 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
23c20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
23c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23c40 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57          {..#if W
23c50 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20  INDOWS..        
23c60 20 20 20 20 69 66 20 28 77 6f 77 36 34 29 0d 0a      if (wow64)..
23c70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
23c90 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f  f (systemDirecto
23ca0 72 79 57 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29  ryWow64 == null)
23cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23cc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23cd0 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44           systemD
23ce0 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d  irectoryWow64 =.
23cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23d00 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
23d10 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74  ativeMethods.Get
23d20 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28  SystemDirectory(
23d30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
23d40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23d50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23d60 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
23d70 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20  ow64;..         
23d80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
23d90 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a    else..#endif..
23da0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
23dc0 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f  f (systemDirecto
23dd0 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
23e00 20 3d 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53   = Environment.S
23e10 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d  ystemDirectory;.
23e20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23e30 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d     return system
23e40 44 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20  Directory;..    
23e50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23e60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
23e70 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
23e80 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23ed0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47         #region G
23ee0 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20 48 61  eneric String Ha
23ef0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
23f00 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
23f10 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c 61 79  tring ForDisplay
23f20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  (..            o
23f30 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20  bject value..   
23f40 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
23f50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23f60 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
23f70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
23f80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
23f90 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20  null>";....     
23fa0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65         string re
23fb0 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  sult;..         
23fc0 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 76     Type type = v
23fd0 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d  alue.GetType();.
23fe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
23ff0 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f  f (type == typeo
24000 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a  f(XmlElement))..
24010 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
24030 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e  mlElement elemen
24040 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29  t = (XmlElement)
24050 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
24060 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
24070 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72   = element.Outer
24080 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Xml;..          
24090 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
240a0 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d   else if (type =
240b0 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69 6f 6e  = typeof(Version
240c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
240d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
240e0 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72 73 69     Version versi
240f0 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29 76 61  on = (Version)va
24100 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
24110 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
24120 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
24130 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b  v{0}", version);
24140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24150 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
24160 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
24170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24180 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65    result = value
24190 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a  .ToString();....
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241b0 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74  if (result.Lengt
241c0 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  h == 0)..       
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
241e0 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a  urn "<empty>";..
241f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24200 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
24210 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24230 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f 66  ype.IsSubclassOf
24240 28 74 79 70 65 6f 66 28 56 61 6c 75 65 54 79 70  (typeof(ValueTyp
24250 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a 20 22 5c  e)) ? "{0}" : "\
24260 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20 20 20 20  "{0}\"",..      
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24280 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  sult);..        
24290 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
242a0 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
242b0 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
242c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
242d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
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 2f 2f 2f  ////////////////
24320 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24330 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c   #region Assembl
24340 79 20 41 74 74 72 69 62 75 74 65 20 48 61 6e 64  y Attribute Hand
24350 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 75  ling..        pu
24360 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
24370 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f  ng GetAssemblyCo
24380 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20  nfiguration(..  
24390 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
243a0 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ly assembly..   
243b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
243c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
243d0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
243e0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
243f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24400 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
24420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24430 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
24440 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20  y.IsDefined(..  
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
24470 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
24480 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
24490 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
244b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
244c0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
244d0 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41  lyConfigurationA
244e0 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69 67 75  ttribute configu
244f0 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20  ration =..      
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79 43        (AssemblyC
24520 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72  onfigurationAttr
24530 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20  ibute)..        
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24550 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74      assembly.Get
24560 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73  CustomAttributes
24570 28 0d 0a 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 20 20 20 20 20                  
24590 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
245a0 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41  lyConfigurationA
245b0 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20 20 20  ttribute),..    
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245d0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
245e0 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24600 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 75    return configu
24610 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61  ration.Configura
24620 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  tion;..         
24630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24660 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
24670 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24690 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
246b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
246c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
246d0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
246e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
246f0 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24740 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
24750 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73  ic string GetAss
24760 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20  emblyTitle(..   
24770 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
24780 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y assembly..    
24790 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
247a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
247b0 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
247c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
247d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
247e0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24810 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
24820 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20  .IsDefined(..   
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24840 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
24850 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74  AssemblyTitleAtt
24860 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29  ribute), false))
24870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24880 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248a0 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74   AssemblyTitleAt
248b0 74 72 69 62 75 74 65 20 74 69 74 6c 65 20 3d 0d  tribute title =.
248c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41 73               (As
248e0 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
248f0 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bute)..         
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24910 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43     assembly.GetC
24920 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28  ustomAttributes(
24930 0d 0a 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 20 20 20 20 20 20                  
24950 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c    typeof(Assembl
24960 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29  yTitleAttribute)
24970 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a  , false)[0];....
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24990 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
249a0 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20  itle.Title;..   
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
249d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
249e0 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
24a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24a10 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
24a20 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
24a30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24a40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24a50 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
24a60 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
24a70 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
24a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
24ad0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
24ae0 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d  region .NET Fram
24af0 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a  ework Handling..
24b00 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24b10 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
24b20 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65  tFrameworkRootKe
24b30 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
24b40 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
24b50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
24b60 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
24b70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
24b80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24b90 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
24ba0 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72  ormat("{0}\\Micr
24bb0 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65  osoft\\.NETFrame
24bc0 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20  work",..        
24bd0 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b          GetRootK
24be0 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20  eyName(perUser, 
24bf0 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20  wow64));..      
24c00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
24c50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24c60 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
24c70 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
24c80 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  workKeyName(..  
24c90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
24ca0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
24cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
24cc0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
24cd0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
24ce0 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
24cf0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
24d00 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
24d10 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
24d20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
24d30 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
24d40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24d50 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74     string format
24d60 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c   = !String.IsNul
24d70 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72  lOrEmpty(platfor
24d80 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  mName) ?..      
24d90 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
24da0 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c  Microsoft\\{1}\\
24db0 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20 20  v{2}\\{3}" :..  
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
24dd0 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b  0}\\Microsoft\\{
24de0 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20 20  1}\\v{2}";....  
24df0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24e00 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66   String.Format(f
24e10 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65  ormat, GetRootKe
24e20 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77  yName(perUser, w
24e30 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20  ow64),..        
24e40 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
24e50 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
24e60 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
24e70 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  mName);..       
24e80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
24ed0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24ee0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
24ef0 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67 65 52  string GetImageR
24f00 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
24f10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
24f20 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  ng fileName..   
24f30 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
24f40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24f50 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
24f60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24f70 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
24f80 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20 20 20 20  assembly =..    
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fa0 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74  Assembly.Reflect
24fb0 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28  ionOnlyLoadFrom(
24fc0 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  fileName); /* th
24fd0 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  row */....      
24fe0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
24ff0 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
25000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25010 20 20 20 20 20 72 65 74 75 72 6e 20 61 73 73 65       return asse
25020 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d  mbly.ImageRuntim
25030 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  eVersion;..     
25040 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25050 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
25060 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
25080 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
25090 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
250a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
250b0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
250c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
25110 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
25120 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
25130 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72  ring GetFramewor
25140 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  kDirectory(..   
25150 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
25160 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
25170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
25180 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
25190 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
251a0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
251b0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
251c0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
251d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
251e0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
251f0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
25200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
25210 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
25220 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
25230 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
25240 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
25250 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
25260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25270 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65       rootKey, Ge
25280 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65  tFrameworkRootKe
25290 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77  yName(perUser, w
252a0 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20  ow64),..        
252b0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
252c0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
252d0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
252e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
252f0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
25300 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
25310 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25320 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
25330 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
25340 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74  t value = Regist
25350 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75  ryHelper.GetValu
25360 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
25370 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e          key, "In
25380 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c  stallRoot", null
25390 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
253a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
253b0 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c         if (!(val
253c0 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a  ue is string))..
253d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253e0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
253f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25400 20 20 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e      return Path.
25410 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20  Combine(..      
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
25430 74 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72  tring)value, Str
25440 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d  ing.Format("v{0}
25450 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ", frameworkVers
25460 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion));..        
25470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
25480 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
25490 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
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 2f  ////////////////
254e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
254f0 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46     #region Per-F
25500 72 61 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72  ramework/Platfor
25510 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  m Handling..    
25520 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
25530 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69  ic void Initiali
25540 7a 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28  zeFrameworkList(
25550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
25560 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
25570 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
25580 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f      Configuratio
25590 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
255a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
255b0 66 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20  f FrameworkList 
255c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20  frameworkList.. 
255d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
255e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
255f0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
25600 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  rkList == null).
25610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25620 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d   frameworkList =
25630 20 6e 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69   new FrameworkLi
25640 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
25650 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
25660 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d  rkList.RootKey =
25670 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25680 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
25690 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d  rkList.RootKey =
256a0 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20   rootKey;....   
256b0 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25700 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25710 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
25720 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
25730 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
25750 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
25760 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
25770 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
25780 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
25790 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
257a0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
257b0 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
257c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
257d0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
257e0 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e  ist.Names.Add(".
257f0 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  NETFramework");.
25800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25810 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
25820 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
25830 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
25840 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20  .NoCompact)..   
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25870 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
25880 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
25890 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
258a0 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
258b0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
258c0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
258d0 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
258e0 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20  amework");..    
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25900 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
25910 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  mes.Add(".NETCom
25920 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b  pactFramework");
25930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25940 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
25950 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25960 20 20 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 2f 2f 2f  ////////////////
259a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
259b0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
259c0 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  rkList.Versions 
259d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
259e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
259f0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
25a00 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  rkList.Versions 
25a10 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70  = new VersionMap
25a20 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
25a30 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
25a40 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
25a50 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
25a60 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d  tion.NoDesktop).
25a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25a90 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c          VersionL
25aa0 69 73 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69  ist desktopVersi
25ab0 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72  onList = new Ver
25ac0 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  sionList();.... 
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
25af0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
25b00 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
25b10 2e 4e 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20  .NoNetFx20)..   
25b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b30 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
25b40 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
25b50 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30  Version(2, 0, 50
25b60 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  727));....      
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
25b80 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
25b90 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
25ba0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
25bb0 74 46 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20  tFx40)..        
25bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bd0 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
25be0 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
25bf0 6f 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29  on(4, 0, 30319))
25c00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25c10 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
25c20 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
25c30 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
25c40 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35  ration.NoNetFx45
25c50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25c60 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
25c70 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
25c80 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c  d(new Version(4,
25c90 20 35 2c 20 35 30 37 30 39 29 29 3b 0d 0a 0d 0a   5, 50709));....
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cb0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
25cc0 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22  t.Versions.Add("
25cd0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d  .NETFramework",.
25ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25cf0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
25d00 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20  VersionList);.. 
25d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25d20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25d30 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
25d40 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
25d50 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
25d60 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20  n.NoCompact)..  
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d90 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
25da0 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  st.Versions.Add(
25db0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
25dc0 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20  ework",..       
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25de0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
25df0 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b  (new Version[] {
25e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25e10 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65            new Ve
25e20 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30  rsion(2, 0, 0, 0
25e30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 33  ), new Version(3
25e40 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20  , 5, 0, 0)..    
25e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e60 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }));..          
25e70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25e90 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25ee0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
25ef0 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
25f00 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  ormNames == null
25f10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
25f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25f30 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
25f40 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20  PlatformNames = 
25f50 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29  new StringList()
25f60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25f70 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
25f80 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
25f90 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
25fa0 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fc0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
25fd0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
25fe0 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  dd(null);....   
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26000 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
26010 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
26020 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d  figuration.NoCom
26030 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  pact)..         
26040 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
26060 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
26070 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50  formNames.Add("P
26080 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20  ocketPC");..    
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
260b0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
260c0 22 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a  "Smartphone");..
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260e0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
260f0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
26100 41 64 64 28 22 57 69 6e 64 6f 77 73 43 45 22 29  Add("WindowsCE")
26110 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26120 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
26130 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
26140 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
26190 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
261a0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
261b0 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69   HaveFrameworkDi
261c0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
261d0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
261e0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
261f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
26200 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
26210 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
26220 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
26230 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
26240 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
26250 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
26260 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
26270 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
26280 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
26290 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
262a0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
262b0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
262c0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
262d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
262e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
262f0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72   keyName = GetFr
26300 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
26310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26320 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
26330 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
26340 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
26350 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
26360 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
26370 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26380 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
26390 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
263a0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
263b0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
263d0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
263e0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
263f0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
26400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26410 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
26420 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
26440 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26460 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
26470 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54   != null) // NOT
26480 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b  E: Skip non-desk
26490 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  top...          
264a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
264b0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
264c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
264d0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74   directory = Get
264e0 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
264f0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
26500 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
26510 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
26520 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  on, perUser, wow
26530 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  64, whatIf,..   
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26550 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26570 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
26580 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
26590 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
265a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
265b0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
265c0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
265d0 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
265e0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26600 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
26610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26620 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
26630 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
26640 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26660 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
26670 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
26680 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266a0 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
266b0 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69  ork {0} found vi
266c0 61 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e  a directory {1}.
266d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
266e0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
266f0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
26700 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion), ForDisplay
26710 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26730 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
26740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26750 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
26760 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26770 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
26780 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
267d0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
267e0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48  te static bool H
267f0 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  aveFrameworkRegi
26800 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
26810 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
26820 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
26830 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26840 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
26850 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
26860 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
26870 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
26880 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
26890 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
268a0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
268b0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
268c0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
268d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
268e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
268f0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
26900 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
26910 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26920 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
26930 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65  yName = GetFrame
26940 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  workKeyName(..  
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
26960 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
26970 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
26980 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72  latformName, per
26990 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
269a0 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a         wow64);..
269b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
269c0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
269d0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
269e0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
269f0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
26a00 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
26a10 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
26a20 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
26a30 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
26a40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26a50 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
26a60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
26a70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26a80 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
26a90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26aa0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
26ab0 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20   null) // NOTE: 
26ac0 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70  Skip non-desktop
26ad0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26ae0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
26af0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
26b00 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
26b10 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
26b20 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
26b30 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
26b40 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
26b50 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
26b60 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
26b70 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
26b80 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
26b90 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f  Framework {0} fo
26ba0 75 6e 64 20 76 69 61 20 72 65 67 69 73 74 72 79  und via registry
26bb0 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20   {1}.",..       
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
26bd0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
26be0 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69  kVersion), ForDi
26bf0 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c  splay(keyName)),
26c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26c10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
26c20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
26c30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26c40 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
26c50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
26c60 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
26cb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d  //....        [M
26cc0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
26cd0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
26ce0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
26cf0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
26d00 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61   bool ForEachFra
26d10 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20  meworkConfig(.. 
26d20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
26d30 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
26d40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
26d50 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
26d60 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20  meworkList,..   
26d70 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
26d80 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b  rkConfigCallback
26d90 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20   callback,..    
26da0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
26db0 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a  ersion, /* NOTE:
26dc0 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20   Optional. */.. 
26dd0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
26de0 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20  g invariant,..  
26df0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
26e00 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
26e10 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72      string descr
26e20 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  iption,..       
26e30 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
26e40 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
26e50 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
26e60 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
26e70 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
26e80 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
26e90 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26ea0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
26eb0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
26ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
26ed0 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
26ee0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
26ef0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
26f00 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26f10 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
26f20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
26f30 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
26f40 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
26f50 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
26f60 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
26f70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
26f80 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29  egistry == null)
26f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26fb0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
26fc0 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20  d registry";..  
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26fe0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
26ff0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27000 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
27010 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e  ameworkList == n
27020 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27030 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27040 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
27050 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
27060 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20  list";..        
27070 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
27080 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
27090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
270a0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
270b0 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72  Key rootKey = fr
270c0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
270d0 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
270e0 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
270f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27110 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
27120 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b   "invalid root k
27130 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ey";..          
27140 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
27150 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
27160 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27170 20 20 69 66 20 28 21 49 73 53 75 70 70 6f 72 74    if (!IsSupport
27180 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74  edRootKey(regist
27190 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20  ry, rootKey)).. 
271a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
271b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
271c0 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20  ror = "root key 
271d0 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72  must be per-user
271e0 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22   or per-machine"
271f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27200 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27230 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
27240 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  .Names == null).
27250 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27270 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
27280 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e  ework names foun
27290 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
272a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
272b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
272c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
272d0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
272e0 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e  st.Versions == n
272f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27300 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27310 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
27320 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   framework versi
27330 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  ons found";..   
27340 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27350 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
27360 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27370 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
27380 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
27390 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  ormNames == null
273a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
273b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
273c0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c    error = "no pl
273d0 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75  atform names fou
273e0 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
273f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
27400 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
27410 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27420 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
27430 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20  ist.Names.Count 
27440 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  != frameworkList
27450 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43  .PlatformNames.C
27460 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20  ount)..         
27470 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27480 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
27490 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61  ring.Format("fra
274a0 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e  mework name coun
274b0 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22  t {0} does not "
274c0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
274d0 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70          "match p
274e0 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75  latform name cou
274f0 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f  nt {1}", framewo
27500 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
27510 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
27520 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
27530 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
27540 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  ames.Count);....
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27560 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
27570 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27580 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
27590 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
275a0 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72  index < framewor
275b0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
275c0 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  t; index++)..   
275d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
275e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
275f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27600 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
27610 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72  e name of the fr
27620 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e  amework (e.g. ".
27630 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a  NETFramework")..
27640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27650 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65  //       and the
27660 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61   name of the pla
27670 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e  tform (e.g. "Win
27680 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20  dowsCE")...     
27690 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
276a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
276b0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
276c0 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
276d0 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d  ist.Names[index]
276e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
276f0 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
27700 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f  rmName = framewo
27710 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
27720 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a  ames[index];....
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27740 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
27750 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69      // NOTE: Ski
27760 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f  p all non-deskto
27770 70 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e  p frameworks (i.
27780 65 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f  e. if the platfo
27790 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..            
277a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d      //       nam
277b0 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d  e is not null)..
277c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
277d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
277e0 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72       if (platfor
277f0 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  mName != null)..
27800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27810 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
27820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27830 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
27840 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
27850 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ab the supported
27860 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69   versions of thi
27870 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20  s particular..  
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27890 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
278a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
278b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
278c0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69         VersionLi
278d0 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  st frameworkVers
278e0 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20  ionList;....    
278f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27900 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29  version != null)
27910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27920 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27930 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
27940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27950 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c   // NOTE: Manual
27960 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68 65   override of the
27970 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b   *ONE* framework
27980 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20   version..      
27990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
279a0 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73         to proces
279b0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
279c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
279d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279e0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
279f0 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69  List = new Versi
27a00 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20  onList();..     
27a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
27a20 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
27a30 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
27a40 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a  ion(version));..
27a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
27a70 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
27a80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27aa0 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69  if (!frameworkLi
27ab0 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47  st.Versions.TryG
27ac0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ae0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
27af0 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f  ame, out framewo
27b00 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c  rkVersionList) |
27b10 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
27b20 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d             (fram
27b30 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
27b40 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27b70 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
27b80 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
27b90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
27bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27bc0 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69    foreach (Versi
27bd0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
27be0 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b  ion in framework
27bf0 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20  VersionList)..  
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
27c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27c20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
27c30 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
27c40 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
27c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c60 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
27c70 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
27c80 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
27c90 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cb0 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d  "frameworkName =
27cc0 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56   {0}, frameworkV
27cd0 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20  ersion = {1}, " 
27ce0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
27cf0 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74             "plat
27d00 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c  formName = {2}",
27d10 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
27d20 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20  eworkName),..   
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d40 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
27d50 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27d60 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
27d70 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
27d80 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e  isplay(platformN
27d90 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ame)), traceCate
27da0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
27dc0 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b   (!HaveFramework
27dd0 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27df0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
27e00 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
27e10 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27e20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
27e40 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72  latformName, per
27e50 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61  User, wow64, wha
27e60 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
27e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
27ea0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
27eb0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
27ec0 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
27ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ee0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
27ef0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
27f00 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
27f10 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
27f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f30 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
27f40 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 6e 6f  {0} directory no
27f50 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20  t found, " +..  
27f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f70 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70            "skipp
27f80 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
27f90 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
27fa0 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
27fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fc0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
27fd0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
27fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ff0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
28000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28020 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
28030 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
28040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28050 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
28060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28070 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
28080 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72  irectory = GetFr
28090 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
280a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
280b0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
280c0 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ey, frameworkVer
280d0 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20 77  sion, perUser, w
280e0 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ow64, whatIf,.. 
280f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28100 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
28110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28120 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
28130 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
28140 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28160 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28170 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
28180 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
28190 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
281a0 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
281b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281c0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
281d0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
281e0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
281f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
28210 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
28220 7d 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 69  } directory is i
28230 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20  nvalid, " +..   
28240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28250 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69           "skippi
28260 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c  ng...", ForDispl
28270 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
28280 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
28290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282a0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
282b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
282c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
282d0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
282f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28300 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
28310 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
28320 64 69 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66  directory, "Conf
28330 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ig");....       
28340 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28350 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73  (!Directory.Exis
28360 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ts(directory))..
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28380 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
283a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
283b0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
283c0 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
283d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283e0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
283f0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
28400 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
28410 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28430 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
28440 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31  {0} directory {1
28450 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a  } does not " +..
28460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28470 20 20 20 20 20 20 20 20 20 20 20 20 22 65 78 69              "exi
28480 73 74 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22  st, skipping..."
28490 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
284a0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
284b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
284c0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
284d0 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72  Display(director
284e0 79 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  y)), traceCatego
284f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28510 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
28520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28540 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
28550 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
28560 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
28570 2c 20 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69  , "machine.confi
28580 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  g");....        
28590 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
285a0 21 46 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c  !File.Exists(fil
285b0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
285f0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
28600 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
28610 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
28630 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
28640 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
28650 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
28660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28670 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
28680 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c  ramework {0} fil
28690 65 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65  e {1} does not e
286a0 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20  xist, " +..     
286b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286c0 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67         "skipping
286d0 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
286e0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
286f0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
28700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28710 20 46 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65   ForDisplay(file
28720 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74  Name)), traceCat
28730 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28750 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
28760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28770 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28780 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
28790 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c  localSaved = fal
287a0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
287b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
287c0 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  callback(..     
287d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287e0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
287f0 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65   invariant, name
28800 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74  , description, t
28810 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
28820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28830 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61        assemblyNa
28840 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  me, clientData, 
28850 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d  perUser, wow64,.
28860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28870 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
28880 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61  owOnMissing, wha
28890 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
288a0 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 0d 0a 20  f localSaved,.. 
288b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288c0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
288d0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
288e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
288f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28900 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
28910 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
28920 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28940 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
28950 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28970 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 53        if (localS
28980 61 76 65 64 20 26 26 20 21 73 61 76 65 64 29 0d  aved && !saved).
28990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
289a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76               sav
289b0 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  ed = true;....  
289c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289d0 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
289e0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
289f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a00 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
28a10 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
28a20 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20  rity.Lowest,..  
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
28a50 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
28a60 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
28a70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a90 20 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63              "loc
28aa0 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73  alSaved = {0}, s
28ab0 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  aved = {1}",..  
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
28ae0 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61  rDisplay(localSa
28af0 76 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ved), ForDisplay
28b00 28 73 61 76 65 64 29 29 2c 0d 0a 20 20 20 20 20  (saved)),..     
28b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
28b30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
28b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
28b60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
28b70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28b80 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
28b90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
28ba0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28bf0 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
28c00 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
28c10 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
28c20 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
28c30 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
28c40 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72   ForEachFramewor
28c50 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  kRegistry(..    
28c60 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
28c70 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
28c80 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
28c90 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
28ca0 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20  orkList,..      
28cb0 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 52        FrameworkR
28cc0 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20  egistryCallback 
28cd0 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
28ce0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 65         string ve
28cf0 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20  rsion, /* NOTE: 
28d00 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20  Optional. */..  
28d10 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
28d20 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
28d30 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
28d40 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
28d50 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
28d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28d70 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
28d80 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
28d90 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
28da0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
28db0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
28dc0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
28dd0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
28de0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
28df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28e00 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c  (registry == nul
28e10 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
28e20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28e30 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
28e40 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a  lid registry";..
28e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
28e70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28e80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28e90 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d  frameworkList ==
28ea0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28eb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28ec0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
28ed0 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
28ee0 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20  k list";..      
28ef0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28f00 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
28f10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28f20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
28f30 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20  ryKey rootKey = 
28f40 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f  frameworkList.Ro
28f50 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
28f60 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
28f70 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
28f80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28f90 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
28fa0 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74   = "invalid root
28fb0 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20   key";..        
28fc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
28fd0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
28fe0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28ff0 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f      if (!IsSuppo
29000 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69  rtedRootKey(regi
29010 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d  stry, rootKey)).
29020 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29040 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65  error = "root ke
29050 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73  y must be per-us
29060 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e  er or per-machin
29070 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
29080 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
29090 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
290a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
290b0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
290c0 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  st.Names == null
290d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
290e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
290f0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
29100 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f  amework names fo
29110 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
29120 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29130 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29140 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29150 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
29160 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
29170 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
29180 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29190 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
291a0 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  no framework ver
291b0 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  sions found";.. 
291c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
291d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
291e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
291f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
29200 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
29210 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75  tformNames == nu
29220 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29230 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29240 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
29250 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66  platform names f
29260 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
29270 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
29280 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
29290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
292a0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
292b0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
292c0 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  t != frameworkLi
292d0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
292e0 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20  .Count)..       
292f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29300 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
29310 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66  String.Format("f
29320 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f  ramework name co
29330 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74  unt {0} does not
29340 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
29350 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68            "match
29360 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63   platform name c
29370 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65  ount {1}", frame
29380 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
29390 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ount,..         
293a0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
293b0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
293c0 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a  mNames.Count);..
293d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
293e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
293f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
29410 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
29420 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77  ; index < framew
29430 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
29440 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  unt; index++).. 
29450 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29480 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
29490 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
294a0 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20  framework (e.g. 
294b0 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29  ".NETFramework")
294c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
294d0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74    //       and t
294e0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70  he name of the p
294f0 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57  latform (e.g. "W
29500 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20  indowsCE")...   
29510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
29520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29530 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
29540 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  kName = framewor
29550 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65  kList.Names[inde
29560 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x];..           
29570 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
29580 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65  formName = frame
29590 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
295a0 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  mNames[index];..
295b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
295c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
295d0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
295e0 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65  rab the supporte
295f0 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  d versions of th
29600 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20  is particular.. 
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29620 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72  /       framewor
29630 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
29640 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
29650 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c          VersionL
29660 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ist frameworkVer
29670 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  sionList;....   
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
29690 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c  (version != null
296a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
296b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
296c0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61    // NOTE: Manua
296f0 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68  l override of th
29700 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72  e *ONE* framewor
29710 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  k version..     
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29730 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65  /       to proce
29740 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss...           
29750 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
29760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29770 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
29780 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73  nList = new Vers
29790 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20  ionList();..    
297a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297b0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
297c0 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
297d0 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d  sion(version));.
297e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29800 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
29810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29830 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c   if (!frameworkL
29840 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79  ist.Versions.Try
29850 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
29860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29870 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
29880 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
29890 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
298a0 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
298b0 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61              (fra
298c0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
298d0 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  t == null))..   
298e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29900 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
29910 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
29920 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
29940 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29950 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73     foreach (Vers
29960 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
29970 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72  sion in framewor
29980 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20  kVersionList).. 
29990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
299a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
299b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
299c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
299d0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
299e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
299f0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
29a00 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
29a10 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
29a20 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
29a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a40 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20   "frameworkName 
29a50 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b  = {0}, framework
29a60 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22  Version = {1}, "
29a70 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
29a80 20 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61              "pla
29a90 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22  tformName = {2}"
29aa0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
29ab0 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20  meworkName),..  
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ad0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
29ae0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
29af0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
29b00 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
29b10 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d  Display(platform
29b20 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74  Name)), traceCat
29b30 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
29b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29b50 66 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72  f (!HaveFramewor
29b60 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  kRegistry(..    
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b80 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
29b90 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
29ba0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
29bb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
29bd0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72  latformName, per
29be0 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61  User, wow64, wha
29bf0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
29c30 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
29c40 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
29c50 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
29c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c70 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
29c80 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
29c90 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
29ca0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cc0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
29cd0 7b 30 7d 20 72 65 67 69 73 74 72 79 20 6e 6f 74  {0} registry not
29ce0 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20   found, " +..   
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69           "skippi
29d10 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c  ng...", ForDispl
29d20 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
29d30 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
29d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d50 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
29d60 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
29d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
29d80 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
29d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
29da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29db0 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
29dc0 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
29dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29de0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
29df0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29e00 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
29e10 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e30 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
29e40 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
29e50 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
29e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e70 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
29e80 72 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61  rmName, clientDa
29e90 74 61 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ta, perUser, wow
29ea0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ec0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
29ed0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
29ee0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29f20 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29f50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29f60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29f70 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
29f80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
29f90 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
29fa0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
29fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ff0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2a000 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c  egion Per-Visual
2a010 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20   Studio Version 
2a020 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
2a030 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2a040 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
2a050 56 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20  VsList(..       
2a060 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2a070 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2a080 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69             Confi
2a090 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
2a0a0 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
2a0b0 20 20 20 20 20 72 65 66 20 56 73 4c 69 73 74 20       ref VsList 
2a0c0 76 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  vsList..        
2a0d0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2a0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2a0f0 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c   (vsList == null
2a100 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a110 20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20     vsList = new 
2a120 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  VsList();....   
2a130 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
2a140 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e  ist.RootKey == n
2a150 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2a160 20 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f        vsList.Roo
2a170 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d  tKey = rootKey;.
2a180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2a190 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f  f (vsList.Versio
2a1a0 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
2a1b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a1c0 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
2a1d0 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65  st.Versions = ne
2a1e0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
2a1f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a200 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a210 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a220 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a230 6e 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20  n.NoVs2005)..   
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a250 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a260 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a270 28 38 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35  (8, 0)); // 2005
2a280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a290 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a2a0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a2b0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a2c0 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20  n.NoVs2008)..   
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2e0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a2f0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a300 28 39 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38  (9, 0)); // 2008
2a310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a320 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a330 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a340 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a350 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20  n.NoVs2010)..   
2a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a370 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a380 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a390 28 31 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30  (10, 0));// 2010
2a3a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a3b0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a3c0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a3d0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a3e0 6e 2e 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20  n.NoVs2012)..   
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a400 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a410 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a420 28 31 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32  (11, 0));// 2012
2a430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a440 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a450 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a460 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a470 6e 2e 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20  n.NoVs2013)..   
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a490 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2a4a0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2a4b0 28 31 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33  (12, 0));// 2013
2a4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a4d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2a4e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2a4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2a530 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2a540 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
2a550 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  eVsVersion(..   
2a560 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2a570 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2a580 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2a590 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2a5a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2a5b0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
2a5c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a5d0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2a5e0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2a5f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2a600 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2a610 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2a620 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
2a630 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2a640 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2a650 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
2a660 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a670 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2a680 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2a690 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
2a6a0 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
2a6b0 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
2a6c0 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  x, perUser, wow6
2a6d0 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2a6e0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2a6f0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2a700 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2a710 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a730 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2a740 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
2a750 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2a760 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a770 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2a780 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7c0 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
2a7d0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2a7e0 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
2a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2a800 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22  ey, "InstallDir"
2a810 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
2a820 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2a830 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2a840 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69  (!(value is stri
2a850 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng))..          
2a860 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a870 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2a880 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a890 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73  g directory = (s
2a8a0 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a  tring)value;....
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8c0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
2a8d0 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f  lOrEmpty(directo
2a8e0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
2a8f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a900 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2a910 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2a920 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
2a930 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
2a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a950 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2a960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a970 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2a980 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2a990 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
2a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9b0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2a9c0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2a9d0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2a9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a9f0 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74        "Visual St
2aa00 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69  udio {0} found i
2aa10 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e  n directory {1}.
2aa20 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2aa30 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2aa40 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46  ay(vsVersion), F
2aa50 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74  orDisplay(direct
2aa60 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ory)),..        
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2aa80 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2aaa0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2aab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2aac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2aad0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2aae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ab20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2ab30 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2ab40 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2ab50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2ab60 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
2ab70 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
2ab80 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2ab90 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20     MockRegistry 
2aba0 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20  registry,..     
2abb0 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73         VsList vs
2abc0 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
2abd0 20 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52     VisualStudioR
2abe0 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20  egistryCallback 
2abf0 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
2ac00 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
2ac10 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
2ac20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
2ac30 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
2ac40 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
2ac50 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2ac60 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ac80 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2ac90 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2aca0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2acb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2acc0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2acd0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2ace0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2acf0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2ad00 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2ad10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ad20 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79      if (registry
2ad30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2ad40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ad50 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2ad60 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73  = "invalid regis
2ad70 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  try";..         
2ad80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ad90 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2ada0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2adb0 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
2adc0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2add0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ade0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2adf0 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22  invalid VS list"
2ae00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ae10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2ae20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ae30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
2ae40 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2ae50 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e  ootKey = vsList.
2ae60 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
2ae70 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
2ae80 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2ae90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2aeb0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
2aec0 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
2aed0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2aee0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2aef0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2af00 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70        if (!IsSup
2af10 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65  portedRootKey(re
2af20 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29  gistry, rootKey)
2af30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2af40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2af50 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
2af60 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
2af70 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
2af80 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
2af90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2afa0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2afb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2afc0 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65     if (vsList.Ve
2afd0 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
2afe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b000 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76  error = "no VS v
2b010 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
2b020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b030 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2b040 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2b050 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
2b060 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73  each (Version vs
2b070 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73  Version in vsLis
2b080 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20  t.Versions)..   
2b090 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2b0b0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2b0c0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2b0d0 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2b0f0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2b100 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2b110 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2b130 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22  vsVersion = {0}"
2b140 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56  , ForDisplay(vsV
2b150 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
2b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2b170 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2b180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b190 20 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72    if (!HaveVsVer
2b1a0 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
2b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b1c0 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
2b1d0 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73  n, suffix, perUs
2b1e0 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  er, wow64, whatI
2b1f0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2b200 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2b210 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2b220 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2b240 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2b250 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2b260 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
2b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b280 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2b290 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2b2a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2c0 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53         "Visual S
2b2d0 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 66 6f  tudio {0} not fo
2b2e0 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e  und, skipping...
2b2f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2b300 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2b310 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e  isplay(vsVersion
2b320 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
2b330 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2b340 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
2b350 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
2b360 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b370 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
2b380 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29  allback == null)
2b390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b3a0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
2b3b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b3c0 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b     if (!callback
2b3d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2b3e0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2b3f0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
2b400 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20  uffix, package, 
2b410 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
2b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b430 20 20 20 20 20 70 65 72 55 73 65 72 2c 20 77 6f       perUser, wo
2b440 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  w64, throwOnMiss
2b450 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ing, whatIf, ver
2b460 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b480 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
2b490 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2b4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b4d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2b4e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b4f0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2b500 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2b510 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2b520 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2b530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2b580 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ion Configuratio
2b590 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d  n File Handling.
2b5a0 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
2b5b0 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
2b5c0 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
2b5d0 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
2b5e0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2b5f0 20 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61   AddDbProviderFa
2b600 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
2b610 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
2b620 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2b630 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61    string invaria
2b640 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
2b650 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
2b660 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b670 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
2b680 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2b690 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
2b6a0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
2b6b0 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
2b6c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2b6d0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2b6f0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2b700 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
2b710 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
2b720 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2b730 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2b740 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2b750 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2b760 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d   dirty = false;.
2b770 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
2b780 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e  Document documen
2b790 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d  t = new XmlDocum
2b7a0 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ent();....      
2b7b0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50        document.P
2b7c0 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63  reserveWhitespac
2b7d0 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
2b7e0 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
2b7f0 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Load(fileName);.
2b800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ...            X
2b810 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65  mlElement addEle
2b820 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
2b830 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
2b840 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2b850 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
2b860 28 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d  (XPathForAddElem
2b870 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29  ent, invariant))
2b880 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
2b890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2b8a0 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d  f (addElement ==
2b8b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b8c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b8d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
2b8e0 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b  elementNames = {
2b8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b900 20 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61        "system.da
2b910 74 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72  ta", "DbProvider
2b920 46 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20  Factories"..    
2b930 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a              };..
2b940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b950 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65    XmlElement pre
2b960 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a  viousElement =..
2b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b980 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63      document.Doc
2b990 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a  umentElement; /*
2b9a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
2b9b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2b9c0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74       foreach (st
2b9d0 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65  ring elementName
2b9e0 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73   in elementNames
2b9f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2ba00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ba10 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2ba20 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45  ment = previousE
2ba30 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  lement.SelectSin
2ba40 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
2ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba60 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61    elementName) a
2ba70 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
2ba80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ba90 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d       if (addElem
2baa0 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bac0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2bae0 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  Element = docume
2baf0 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74  nt.CreateElement
2bb00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2bb20 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69  lementName, Stri
2bb30 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb50 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c        previousEl
2bb60 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c  ement.AppendChil
2bb70 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a  d(addElement);..
2bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
2bbb0 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61  viousElement = a
2bbc0 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20  ddElement;..    
2bbd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2bbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bbf0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
2bc00 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65  cument.CreateEle
2bc10 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  ment(..         
2bc20 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64 22             "add"
2bc30 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
2bc40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2bc50 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d      previousElem
2bc60 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28  ent.AppendChild(
2bc70 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a  addElement);....
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2bca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2bcc0 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
2bcd0 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
2bce0 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d  ribute("name"),.
2bcf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd00 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e       name, Strin
2bd10 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
2bd20 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
2bd30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2bd40 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
2bd50 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 6e  .SetAttribute("n
2bd60 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20  ame", name);..  
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2bd80 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2bd90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2bda0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
2bdb0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64  tring.Equals(add
2bdc0 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  Element.GetAttri
2bdd0 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
2bde0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2bdf0 20 20 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e          invarian
2be00 74 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  t, StringCompari
2be10 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
2be20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2be40 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72  dElement.SetAttr
2be50 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74  ibute("invariant
2be60 22 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a  ", invariant);..
2be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be80 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2be90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2beb0 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
2bec0 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
2bed0 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74  ribute("descript
2bee0 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion"),..        
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 63              desc
2bf00 72 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43  ription, StringC
2bf10 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
2bf20 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
2bf30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bf40 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
2bf50 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73  etAttribute("des
2bf60 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72  cription", descr
2bf70 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  iption);..      
2bf80 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
2bf90 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2bfa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2bfb0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c        string ful
2bfc0 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69  lTypeName = Stri
2bfd0 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20  ng.Format("{0}, 
2bfe0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2bff0 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c         typeName,
2c000 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d   assemblyName);.
2c010 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c020 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
2c030 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74  s(addElement.Get
2c040 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22  Attribute("type"
2c050 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2c060 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65          fullType
2c070 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70  Name, StringComp
2c080 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
2c090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c0b0 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
2c0c0 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c  ttribute("type",
2c0d0 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d   fullTypeName);.
2c0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c0f0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
2c100 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c110 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2c120 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66  (dirty || whatIf
2c130 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c150 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
2c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c170 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2c180 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2c190 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
2c1a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c1b0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2c1c0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2c1d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2c1e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c200 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b   "addElement = {
2c210 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
2c220 61 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20  addElement)),.. 
2c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c240 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2c250 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2c260 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
2c270 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
2c280 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
2c290 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61  ment.Save(fileNa
2c2a0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2c2b0 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64          filesMod
2c2c0 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  ified++;....    
2c2d0 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65              save
2c2e0 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
2c2f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2c300 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2c310 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2c320 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2c330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c370 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d  //....        [M
2c380 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
2c390 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
2c3a0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
2c3b0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2c3c0 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72   bool RemoveDbPr
2c3d0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
2c3e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2c3f0 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
2c400 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2c410 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
2c420 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2c430 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2c440 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2c450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2c460 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
2c470 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2c480 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2c490 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2c4a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c4b0 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20     bool dirty = 
2c4c0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2c4d0 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20      XmlDocument 
2c4e0 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58  document = new X
2c4f0 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d  mlDocument();...
2c500 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
2c510 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68  ument.PreserveWh
2c520 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b  itespace = true;
2c530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
2c540 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65  cument.Load(file
2c550 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2c560 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
2c570 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
2c580 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
2c590 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
2c5a0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
2c5b0 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72  .Format(XPathFor
2c5c0 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  AddElement, inva
2c5d0 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c  riant)) as XmlEl
2c5e0 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ement;....      
2c5f0 20 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65        if (addEle
2c600 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ment != null).. 
2c610 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
2c630 64 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e  dElement.ParentN
2c640 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28  ode.RemoveChild(
2c650 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20  addElement);..  
2c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2c670 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
2c680 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c690 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65            XmlEle
2c6a0 6d 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65  ment removeEleme
2c6b0 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
2c6c0 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d  lectSingleNode(.
2c6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c6e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58   String.Format(X
2c6f0 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
2c700 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29  ment, invariant)
2c710 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
2c720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c730 69 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  if (removeElemen
2c740 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
2c750 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c760 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
2c770 65 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e  eElement.ParentN
2c780 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28  ode.RemoveChild(
2c790 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d  removeElement);.
2c7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c7b0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2c7e0 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66  (dirty || whatIf
2c7f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c810 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c830 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2c840 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2c850 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
2c860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c870 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2c880 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2c890 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2c8a0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8c0 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b   "addElement = {
2c8d0 30 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  0}, removeElemen
2c8e0 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  t = {1}",..     
2c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c900 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64     ForDisplay(ad
2c910 64 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69  dElement), ForDi
2c920 73 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d  splay(removeElem
2c930 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ent)),..        
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c950 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2c960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c970 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
2c980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c990 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
2c9a0 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
2c9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c9c0 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b   filesModified++
2c9d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c9e0 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75       saved = tru
2c9f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2ca00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ca10 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2ca20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ca30 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2ca40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ca80 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2ca90 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
2caa0 73 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ssDbProviderFact
2cab0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
2cac0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
2cad0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2cae0 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
2caf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2cb00 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
2cb10 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2cb20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  description,..  
2cb30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2cb40 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
2cb50 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
2cb60 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d  Name assemblyNam
2cb70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2cb80 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
2cb90 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
2cba0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2cbb0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2cbc0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2cbd0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
2cbe0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
2cbf0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2cc00 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2cc10 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2cc20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
2cc30 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
2cc40 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2cc50 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2cc60 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2cc70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2cc80 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
2cc90 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69  bool> pair = cli
2cca0 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61  entData as AnyPa
2ccb0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
2ccc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ccd0 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c   if (pair == nul
2cce0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ccf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cd00 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2cd10 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f  lid framework co
2cd20 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64 61  nfig callback da
2cd30 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
2cd40 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2cd50 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2cd60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2cd70 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
2cd80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2cda0 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f  turn RemoveDbPro
2cdb0 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdd0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
2cde0 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20  ariant, whatIf, 
2cdf0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76  verbose, ref sav
2ce00 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
2ce10 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
2ce20 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  or) &&..        
2ce30 20 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f          AddDbPro
2ce40 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce60 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
2ce70 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65  ariant, name, de
2ce80 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e  scription, typeN
2ce90 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2cea0 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62            assemb
2ceb0 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  lyName, whatIf, 
2cec0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76  verbose, ref sav
2ced0 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  ed, ref error);.
2cee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2cef0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2cf00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2cf10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62   return RemoveDb
2cf30 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
2cf40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cf50 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
2cf60 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49  invariant, whatI
2cf70 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
2cf80 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2cfa0 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2cfb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2cfc0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2cfd0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2cfe0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2cff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d020 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d030 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65      #region Asse
2d040 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e  mbly Folders Han
2d050 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
2d060 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
2d070 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79  ring GetAssembly
2d080 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
2d090 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2d0a0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2d0b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2d0c0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2d0d0 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2d0e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2d0f0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2d100 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
2d110 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2d120 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
2d130 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2d140 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d150 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2d160 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
2d170 68 69 73 20 72 65 67 69 73 74 72 79 20 6b 65 79  his registry key
2d180 20 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61   appears to alwa
2d190 79 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c  ys be 32-bit onl
2d1a0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  y..            /
2d1b0 2f 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72  /       (i.e. pr
2d1c0 6f 62 61 62 6c 79 20 62 65 63 61 75 73 65 20 69  obably because i
2d1d0 74 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62  t is only used b
2d1e0 79 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20  y Visual..      
2d1f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53        //       S
2d200 74 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20  tudio, which is 
2d210 63 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73  currently always
2d220 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a   32-bit only)...
2d230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2d240 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2d250 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72  ng format = !Str
2d260 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2d270 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20  y(platformName) 
2d280 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
2d290 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
2d2a0 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b  ft\\{1}\\v{2}\\{
2d2b0 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64  3}\\AssemblyFold
2d2c0 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20  ersEx" :..      
2d2d0 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
2d2e0 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c  Microsoft\\{1}\\
2d2f0 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f  v{2}\\AssemblyFo
2d300 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20  ldersEx";....   
2d310 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d320 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f  String.Format(fo
2d330 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79  rmat, GetRootKey
2d340 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f  Name(perUser, wo
2d350 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  w64),..         
2d360 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2d370 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2d380 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
2d390 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
2d3a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2d3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2d400 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2d410 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c  ool AddToAssembl
2d420 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
2d430 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2d440 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2d450 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2d460 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2d470 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2d480 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2d490 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2d4a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2d4b0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2d4c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d4d0 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
2d4e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d4f0 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
2d500 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2d510 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2d520 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2d530 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2d540 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2d550 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2d560 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2d570 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2d580 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2d590 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2d5a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d5b0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73  keyName = GetAss
2d5c0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e  emblyFoldersKeyN
2d5d0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
2d5e0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
2d5f0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2d600 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2d610 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20  ame, perUser,.. 
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2d630 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
2d640 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
2d650 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
2d660 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2d670 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d690 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2d6a0 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49  ame, true, whatI
2d6b0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2d6c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2d6e0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
2d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2d700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d710 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2d720 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d740 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
2d750 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
2d760 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
2d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d780 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2d790 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
2d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2d7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d7e0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
2d7f0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
2d800 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
2d810 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
2d820 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2d830 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2d840 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
2d850 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d870 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d880 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
2d890 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d8c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2d8d0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2d8e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2d900 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
2d910 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2d920 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d940 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
2d950 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
2d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d970 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d980 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d990 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9b0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2d9c0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9e0 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20    subKey, null, 
2d9f0 64 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49  directory, whatI
2da00 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
2da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2da20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2da30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2da40 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2da50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2da60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2daa0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2dab0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2dac0 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72  ic bool RemoveFr
2dad0 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  omAssemblyFolder
2dae0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2daf0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2db00 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2db10 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
2db20 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
2db30 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2db40 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2db50 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2db60 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
2db70 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2db80 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
2db90 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2dba0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2dbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2dbc0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2dbd0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
2dbe0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
2dbf0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2dc00 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2dc10 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2dc20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2dc30 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2dc40 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2dc50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2dc60 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
2dc70 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c  ame = GetAssembl
2dc80 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
2dc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dca0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
2dcb0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2dcc0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2dcd0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2dce0 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34             wow64
2dcf0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2dd00 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2dd10 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
2dd20 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2dd30 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2dd50 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
2dd60 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
2dd70 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2dd80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2dd90 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
2dda0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2ddb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ddd0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2dde0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de00 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2de10 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2de20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de40 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2de50 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2de70 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2de80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2de90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dea0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2deb0 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a  .DeleteSubKey(..
2dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ded0 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
2dee0 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ame, throwOnMiss
2def0 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ing, whatIf, ver
2df00 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
2df10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2df20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2df30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2df40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2df50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2df90 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2dfa0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
2dfb0 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f  rocessAssemblyFo
2dfc0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
2dfd0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2dfe0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2dff0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2e000 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
2e010 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2e020 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
2e030 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2e040 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
2e050 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
2e060 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
2e070 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
2e080 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
2e090 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2e0a0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
2e0b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
2e0c0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
2e0d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e0e0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2e0f0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2e100 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2e110 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2e120 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2e130 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2e140 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
2e150 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
2e160 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
2e170 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
2e180 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
2e190 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2e1a0 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
2e1b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2e1d0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
2e1e0 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20  mework callback 
2e1f0 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
2e200 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2e210 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2e220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e230 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
2e240 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e260 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f  return RemoveFro
2e270 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
2e280 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e290 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2e2a0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
2e2b0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2e2c0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2e0 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a 65 63      LegacyProjec
2e2f0 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20  tName, perUser, 
2e300 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 77 68  wow64, false, wh
2e310 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
2e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e330 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 20 26      ref error) &
2e340 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
2e350 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79     AddToAssembly
2e360 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
2e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2e380 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
2e390 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2e3a0 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
2e3b0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2e3c0 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65             Proje
2e3d0 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20  ctName, pair.X, 
2e3e0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
2e3f0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2e400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e410 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2e420 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2e430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2e440 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2e450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e460 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
2e470 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64  FromAssemblyFold
2e480 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
2e490 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2e4a0 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
2e4b0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2e4c0 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
2e4d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e4e0 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61         ProjectNa
2e4f0 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  me, perUser, wow
2e500 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  64, throwOnMissi
2e510 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ng, whatIf,..   
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e530 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
2e540 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
2e550 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2e560 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2e570 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2e580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e5c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2e5d0 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
2e5e0 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67   Studio Handling
2e5f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2e600 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
2e610 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65  GetVsRootKeyName
2e620 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
2e630 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2e640 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2e650 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2e660 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2e670 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e680 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2e690 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74  ("{0}\\Microsoft
2e6a0 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c  \\VisualStudio",
2e6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e6c0 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65    GetRootKeyName
2e6d0 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
2e6e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
2e6f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2e750 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2e760 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d  g GetVsKeyName(.
2e770 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2e780 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
2e790 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2e7a0 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
2e7b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
2e7c0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2e7d0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
2e7e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2e7f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e800 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2e810 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2e830 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
2e840 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e850 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2e860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e870 20 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20   "{0}\\{1}{2}", 
2e880 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65  GetVsRootKeyName
2e890 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
2e8a0 2c 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  , vsVersion,..  
2e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
2e8c0 66 66 69 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffix);..        
2e8d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2e8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e920 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2e930 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
2e940 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63  tudio Data Sourc
2e950 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  e Handling..    
2e960 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2e970 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74  ic bool AddVsDat
2e980 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20  aSource(..      
2e990 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2e9a0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2e9c0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
2e9d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2e9e0 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
2e9f0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
2ea00 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
2ea10 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
2ea20 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2ea30 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
2ea40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2ea50 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2ea60 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2ea70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2ea80 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
2ea90 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2eaa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2eab0 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
2eac0 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
2ead0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2eaf0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
2eb00 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
2eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2eb20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2eb30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2eb40 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
2eb50 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
2eb60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2eb80 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
2eb90 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
2eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ebb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2ebc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ebd0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2ebe0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
2ebf0 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
2ec00 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65  , suffix, perUse
2ec10 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  r, wow64);....  
2ec20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2ec30 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2ec40 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
2ec50 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2ec60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ec70 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2ec80 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
2ec90 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2eca0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ecb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ecc0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
2ecd0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ece0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ecf0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2ed00 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2ed10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ed20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2ed30 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2ed40 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2ed50 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2ed70 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
2ed80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ed90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2eda0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2edb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2edc0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2edd0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2ede0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2edf0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2ee00 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2ee20 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73  ey, "DataSources
2ee30 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
2ee40 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee70 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2ee80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ee90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eeb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2eec0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eee0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2eef0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2ef00 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
2ef10 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20  taSources",..   
2ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef30 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
2ef40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ef50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ef60 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2ef80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ef90 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
2efa0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74  kRegistryKey dat
2efb0 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20  aSourceKey =..  
2efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efd0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2efe0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
2eff0 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
2f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f010 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2f020 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e  ge.DataSourceId.
2f030 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2f040 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
2f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f060 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2f070 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2f080 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0a0 20 20 20 20 20 69 66 20 28 64 61 74 61 53 6f 75       if (dataSou
2f0b0 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  rceKey == null).
2f0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f0d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 65 72 72 6f 72 20 3d 20          error = 
2f100 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f130 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
2f140 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
2f150 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d  {0}\\{1}", key,.
2f160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f180 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75   package.DataSou
2f190 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  rceId.ToString(V
2f1a0 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
2f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f1d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f210 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2f220 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f240 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65        dataSource
2f250 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e  Key, null, Strin
2f260 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f280 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61         "{0} Data
2f290 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a  base File", Proj
2f2a0 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  ectName), whatIf
2f2b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2f2d0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f310 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61  // NOTE: This va
2f320 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66  lue is new as of
2f330 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20   1.0.83.0...    
2f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f350 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f370 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2f380 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3a0 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65        dataSource
2f3b0 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 50 72 6f  Key, "DefaultPro
2f3c0 76 69 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20  vider",..       
2f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3e0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
2f3f0 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
2f400 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2f410 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2f430 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2f440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f450 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2f460 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
2f470 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72  eSubKey(dataSour
2f480 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ceKey,..        
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4a0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
2f4b0 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f  t("SupportingPro
2f4c0 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20  viders\\{0}",.. 
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4e0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2f4f0 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
2f500 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2f510 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20  ormat)),..      
2f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f530 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
2f540 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f570 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2f580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f590 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2f5a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2f5b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2f5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2f600 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2f610 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2f620 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
2f630 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2f640 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2f650 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2f660 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
2f670 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2f680 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
2f690 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
2f6a0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
2f6b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2f6c0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2f6d0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2f6e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2f6f0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2f700 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2f710 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2f720 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2f730 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2f740 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2f750 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f760 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
2f770 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f780 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f790 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2f7a0 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
2f7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f7c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2f7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2f7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2f7f0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
2f800 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2f810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f820 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2f830 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
2f840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f850 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2f860 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2f870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2f880 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
2f890 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
2f8a0 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
2f8b0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d  erUser, wow64);.
2f8c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2f8d0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2f8e0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2f8f0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2f900 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2f910 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2f920 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
2f930 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
2f940 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2f950 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f960 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
2f970 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2f980 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9a0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2f9b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9d0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2f9e0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2f9f0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
2fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa10 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2fa20 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2fa30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fa40 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2fa50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa70 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2fa80 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
2fa90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2faa0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f      key, "DataSo
2fad0 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  urces", true, wh
2fae0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2faf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fb00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2fb10 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
2fb20 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2fb50 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2fb60 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2fb70 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb90 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2fba0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2fbb0 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c  }\\DataSources",
2fbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2fbe0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2fc00 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2fc30 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2fc40 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65  tryHelper.Delete
2fc50 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
2fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc70 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
2fc80 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
2fc90 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2fca0 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
2fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcc0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2fcd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2fce0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2fcf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2fd00 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2fd10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2fd20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2fd70 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2fd80 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
2fd90 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75 72 63  ocessVsDataSourc
2fda0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2fdb0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2fdc0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2fdd0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2fde0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2fdf0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2fe00 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2fe10 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2fe20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2fe30 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
2fe40 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
2fe50 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2fe60 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2fe70 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2fe80 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
2fe90 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
2fea0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2feb0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2fec0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2fed0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2fee0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2fef0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2ff00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ff10 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
2ff20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2ff30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ff40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2ff50 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
2ff60 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
2ff70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ff80 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2ff90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ffa0 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
2ffb0 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
2ffc0 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
2ffd0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2ffe0 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
2fff0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
30000 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
30010 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30020 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
30030 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61  nvalid VS callba
30040 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20  ck data";..     
30050 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30060 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
30070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
30080 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e         if (pair.
30090 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Y)..            
300a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
300b0 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44     return AddVsD
300c0 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300e0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
300f0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b  on, suffix, pack
30100 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  age, perUser, wo
30110 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
30120 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
30130 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
30140 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
30150 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
30160 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
30170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30180 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
30190 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63  emoveVsDataSourc
301a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
301b0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
301c0 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66   vsVersion, suff
301d0 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65 72  ix, package, per
301e0 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20  User, wow64,..  
301f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30200 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
30210 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  e, ref error);..
30220 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30230 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
30240 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
30250 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
30260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
302a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
302b0 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  on Visual Studio
302c0 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 48   Data Provider H
302d0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
302e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
302f0 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50 72  bool AddVsDataPr
30300 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
30310 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
30320 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
30330 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
30340 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
30350 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30360 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
30370 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
30380 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
30390 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
303a0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
303b0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
303c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
303d0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
303e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
303f0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
30400 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
30410 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
30420 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
30430 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
30440 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30450 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
30460 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
30470 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30480 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
30490 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
304a0 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
304b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
304c0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
304d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
304e0 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
304f0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
30500 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30510 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
30520 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
30530 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
30540 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30550 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30560 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30570 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
30580 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
30590 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73  ame(vsVersion, s
305a0 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20  uffix, perUser, 
305b0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
305c0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
305d0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
305e0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
305f0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
30600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30610 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
30620 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
30630 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
30640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
30660 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
30670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30680 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30690 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
306a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
306b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306c0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
306d0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
306e0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
306f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30700 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
30710 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
30720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30730 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30740 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30750 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30760 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
30770 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
30780 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
30790 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
307a0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
307b0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
307c0 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22   "DataProviders"
307d0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
307e0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
307f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30810 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
30820 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
30830 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30850 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
30860 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
30870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30880 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
30890 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
308a0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
308b0 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20  aProviders",..  
308c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308d0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
308e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
308f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30900 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
30910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
30920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30930 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
30940 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61  ckRegistryKey da
30950 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d  taProviderKey =.
30960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
30980 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
30990 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c  teSubKey(subKey,
309a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
309c0 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
309d0 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
309e0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
309f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a00 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
30a10 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
30a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
30a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30a40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61            if (da
30a50 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d  taProviderKey ==
30a60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a80 7b 0d 0a 20 20 20 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 65                 e
30aa0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
30ab0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
30ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ad0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
30ae0 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
30af0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
30b00 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  , key,..        
30b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
30b30 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
30b40 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
30b50 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
30b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b70 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
30b80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
30b90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30bb0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
30bc0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
30bd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
30bf0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
30c00 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69 6f  null, Descriptio
30c10 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  n, whatIf,..    
30c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c30 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
30c40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
30c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c70 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
30c80 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20  : This value is 
30c90 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33  new as of 1.0.83
30ca0 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20  .0.  However,.. 
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cc0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
30cd0 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62  it should only b
30ce0 65 20 73 65 74 20 69 66 20 74 68 65 20 70 61 63  e set if the pac
30cf0 6b 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  kage assembly.. 
30d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
30d20 61 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73 65  and all the asse
30d30 6d 62 6c 69 65 73 20 69 74 20 72 65 66 65 72 73  mblies it refers
30d40 20 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a 20   to are being.. 
30d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d60 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
30d70 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 20  placed into the 
30d80 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20  global assembly 
30d90 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20  cache...        
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30db0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30dd0 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73  package.GlobalAs
30de0 73 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20 20  semblyCache)..  
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
30e30 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
30e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
30e60 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
30e70 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20  "Assembly",..   
30e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e90 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
30ea0 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d  kage.AssemblyNam
30eb0 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20  e.ToString(),.. 
30ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
30ee0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
30ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30f00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
30f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f40 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
30f50 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73   value is new as
30f60 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20   of 1.0.83.0... 
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
30f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fa0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
30fb0 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
30fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fd0 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
30fe0 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f 63  viderKey, "Assoc
30ff0 69 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a 20  iatedSource",.. 
31000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31010 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
31020 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e  ge.DataSourceId.
31030 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
31040 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
31050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31060 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
31070 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31090 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
310a0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
310b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310c0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
310d0 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e  erKey, "Invarian
310e0 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e  tName", Invarian
310f0 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31110 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
31120 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
31130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31140 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
31150 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
31160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31170 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
31180 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c  derKey, "Technol
31190 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ogy",..         
311a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311b0 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65     package.AdoNe
311c0 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f  tTechnologyId.To
311d0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
311e0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
311f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31200 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
31210 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
31230 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
31240 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
31250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31260 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
31270 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c  Key, "CodeBase",
31280 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49   fileName, whatI
31290 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312b0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
312c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312d0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
312e0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31300 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
31310 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63  roviderKey, "Fac
31320 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20  toryService",.. 
31330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31340 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
31350 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
31360 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
31370 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
31380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31390 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
313a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
313b0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
313c0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
313d0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
313e0 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
313f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31400 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
31410 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
31420 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f  nnectionUIContro
31430 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l",..           
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31450 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
31460 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
31480 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
31490 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
314a0 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
314b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314c0 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
314d0 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
314e0 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74  onnectionPropert
314f0 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ies",..         
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31510 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
31520 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31540 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
31550 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
31560 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
31570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31580 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
31590 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
315a0 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f  aConnectionSuppo
315b0 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  rt", whatIf,..  
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315d0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
315e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
315f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31600 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
31610 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
31620 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31640 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
31650 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
31660 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20  ObjectSupport", 
31670 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
31680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31690 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
316a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
316b0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
316c0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
316d0 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
316e0 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31700 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
31710 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53  jects\\DataViewS
31720 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c  upport", whatIf,
31730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
31750 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
31760 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31780 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
31790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
317a0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
317b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
317c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
317d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
317f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
31810 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
31820 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
31830 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
31840 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
31850 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
31860 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
31870 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
31880 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
31890 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
318a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
318b0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
318c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
318d0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
318e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
318f0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
31900 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
31910 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
31920 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
31930 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
31940 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
31950 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
31960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
31970 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
31980 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31990 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
319a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
319b0 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
319c0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
319d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
319e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
319f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31a00 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
31a10 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
31a20 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
31a30 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29   perUser, wow64)
31a40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31a50 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
31a60 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
31a70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
31a80 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
31a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
31aa0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
31ab0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
31ac0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
31ad0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31ae0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
31af0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
31b00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
31b30 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b50 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
31b60 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
31b70 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b90 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
31ba0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31bc0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31bf0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
31c00 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
31c10 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
31c20 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
31c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c40 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
31c50 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65  Providers", true
31c60 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
31c70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
31c80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31c90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
31ca0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
31cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31cc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ce0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
31cf0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
31d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d10 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
31d20 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
31d30 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69  : {0}\\DataProvi
31d40 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ders",..        
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d60 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
31d90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
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 20 20 20 20 20 20 20                  
31dc0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
31dd0 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
31de0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31df0 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
31e00 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50  y, package.DataP
31e10 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
31e20 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
31e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31e40 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
31e50 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
31e60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
31e70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31e80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
31e90 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
31ea0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
31eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ef0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
31f00 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
31f10 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44   bool ProcessVsD
31f20 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
31f30 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
31f40 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
31f50 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
31f60 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
31f70 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
31f80 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
31f90 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
31fa0 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
31fb0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
31fc0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
31fd0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
31fe0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
31ff0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
32000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32010 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
32020 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
32030 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
32040 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
32050 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
32060 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
32070 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
32080 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
32090 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
320a0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
320b0 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
320c0 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
320d0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
320e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
320f0 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
32100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
32110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32120 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
32130 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74   VS callback dat
32140 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
32150 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32160 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32180 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
32190 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
321a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
321b0 75 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f  urn AddVsDataPro
321c0 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
321d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
321e0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
321f0 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
32200 20 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72   pair.X, perUser
32210 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32220 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20 77 68         wow64, wh
32230 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
32240 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
32250 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
32260 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
32270 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32290 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50  rn RemoveVsDataP
322a0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
322b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
322c0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
322d0 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67  , suffix, packag
322e0 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  e, perUser, wow6
322f0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
32300 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
32310 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
32320 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
32330 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
32340 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
32350 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
32360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
323b0 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
323c0 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48  Studio Package H
323d0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
323e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
323f0 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56  void InitializeV
32400 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
32410 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
32420 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
32430 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32440 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62  ool globalAssemb
32450 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20 20  lyCache,..      
32460 20 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67        ref Packag
32470 65 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  e package..     
32480 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
32490 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
324a0 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
324b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
324c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
324d0 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20        package = 
324e0 6e 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a  new Package();..
324f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32500 20 20 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62    package.Assemb
32510 6c 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c  lyName = assembl
32520 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
32530 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
32540 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
32550 63 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65  che = globalAsse
32560 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20  mblyCache;....  
32570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
32580 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68  ckage.AdoNetTech
32590 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47  nologyId = new G
325a0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
325b0 20 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39            "77AB9
325c0 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31  A9D-78B9-4BA7-91
325d0 41 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22  AC-873F5338F1D2"
325e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
325f0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61        package.Pa
32600 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75  ckageId = new Gu
32610 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
32620 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43           "DCBE6C
32630 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38  8D-0E57-4099-A18
32640 33 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29  3-98FF74C64D9C")
32650 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32660 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72       package.Ser
32670 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69  viceId = new Gui
32680 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
32690 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38          "DCBE6C8
326a0 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33  D-0E57-4099-A183
326b0 2d 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b  -98FF74C64D9D");
326c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
326d0 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
326e0 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47  SourceId = new G
326f0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
32700 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41            "0EBAA
32710 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44  B6E-CA80-4B4A-8D
32720 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22  DF-CBE6BF058C71"
32730 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32740 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
32750 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e  taProviderId = n
32760 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
32770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30                "0
32780 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34  EBAAB6E-CA80-4B4
32790 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38  A-8DDF-CBE6BF058
327a0 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  C70");..        
327b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
327c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
327d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
327e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
327f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32810 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
32820 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
32830 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28  ol AddVsPackage(
32840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
32850 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
32860 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
32870 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
32880 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
32890 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
328a0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
328b0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
328c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
328d0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
328e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
328f0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
32900 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
32910 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
32920 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
32930 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
32940 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
32950 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
32960 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
32970 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
32980 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32990 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
329a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
329b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
329c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
329d0 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
329e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
329f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
32a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
32a10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
32a20 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
32a30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
32a40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32a50 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
32a60 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
32a70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32a80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
32a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
32aa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
32ab0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
32ac0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
32ad0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
32ae0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b  perUser, wow64);
32af0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32b00 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
32b10 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
32b20 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
32b30 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
32b40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
32b50 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
32b60 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
32b70 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
32b80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32b90 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
32ba0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
32bb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bd0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
32be0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c00 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
32c10 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
32c20 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
32c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c40 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
32c50 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32c70 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
32c80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32ca0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
32cb0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
32cc0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
32cd0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cf0 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61       key, "Packa
32d00 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ges", true, what
32d10 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
32d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
32d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32d40 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
32d50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
32d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
32d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32d80 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
32d90 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
32da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
32dc0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
32dd0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
32de0 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20  \Packages",..   
32df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e00 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
32e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32e20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32e30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32e60 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
32e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32e80 20 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a   NOTE: *WARNING*
32e90 20 43 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66   Changing any of
32ea0 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 77 69   these values wi
32eb0 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20  ll likely..     
32ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32ed0 2f 20 20 20 20 20 20 20 72 65 71 75 69 72 65 20  /       require 
32ee0 61 20 6e 65 77 20 22 70 61 63 6b 61 67 65 20 6c  a new "package l
32ef0 6f 61 64 20 6b 65 79 22 20 28 50 4c 4b 29 20 74  oad key" (PLK) t
32f00 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  o be..          
32f10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
32f20 20 20 20 67 65 6e 65 72 61 74 65 64 20 69 6e 20     generated in 
32f30 6f 72 64 65 72 20 74 6f 20 70 72 6f 70 65 72 6c  order to properl
32f40 79 20 73 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e  y support loadin
32f50 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  g the..         
32f60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
32f70 20 20 20 20 70 61 63 6b 61 67 65 20 69 6e 74 6f      package into
32f80 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32   Visual Studio 2
32f90 30 30 38 20 61 6e 64 20 65 61 72 6c 69 65 72 20  008 and earlier 
32fa0 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20  without..       
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
32fc0 20 20 20 20 20 20 74 68 65 20 6d 61 74 63 68 69        the matchi
32fd0 6e 67 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  ng Visual Studio
32fe0 20 53 44 4b 20 62 65 69 6e 67 20 69 6e 73 74 61   SDK being insta
32ff0 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  lled...         
33000 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33010 20 20 20 20 50 6c 65 61 73 65 20 72 65 66 65 72      Please refer
33020 20 74 6f 20 74 68 65 20 22 53 51 4c 69 74 65 2e   to the "SQLite.
33030 44 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74  Designer\plk.txt
33040 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  " file..        
33050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
33060 20 20 20 20 20 66 6f 72 20 74 68 65 20 65 78 69       for the exi
33070 73 74 69 6e 67 20 6f 66 66 69 63 69 61 6c 20 76  sting official v
33080 61 6c 75 65 73 20 61 6e 64 20 75 70 64 61 74 65  alues and update
33090 20 74 68 65 6d 20 69 66 0d 0a 20 20 20 20 20 20   them if..      
330a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
330b0 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79         necessary
330c0 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77  .  Also, the new
330d0 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 61 63  ly generated pac
330e0 6b 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20  kage load..     
330f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33100 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 73 65  /       key itse
33110 6c 66 2c 20 77 68 69 63 68 20 69 73 20 61 20 31  lf, which is a 1
33120 32 38 20 63 68 61 72 61 63 74 65 72 20 61 6c 70  28 character alp
33130 68 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20 20  hanumeric..     
33140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33150 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20  /       string, 
33160 6d 75 73 74 20 62 65 20 70 6c 61 63 65 64 20 69  must be placed i
33170 6e 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 73  n the resource s
33180 74 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20  tring named..   
33190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331a0 20 2f 2f 20 20 20 20 20 20 20 22 34 30 30 22 20   //       "400" 
331b0 69 6e 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44  in the "SQLite.D
331c0 65 73 69 67 6e 65 72 5c 56 53 50 61 63 6b 61 67  esigner\VSPackag
331d0 65 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a 20 20  e.resx" file..  
331e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331f0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74    //       and t
33200 68 65 6e 20 74 68 65 20 64 65 73 69 67 6e 65 72  hen the designer
33210 20 61 73 73 65 6d 62 6c 79 20 69 74 73 65 6c 66   assembly itself
33220 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20   must be..      
33230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33240 20 20 20 20 20 20 20 72 65 63 6f 6d 70 69 6c 65         recompile
33250 64 2e 20 20 41 73 20 6f 66 20 74 68 69 73 20 77  d.  As of this w
33260 72 69 74 69 6e 67 20 28 69 6e 20 46 65 62 72 75  riting (in Febru
33270 61 72 79 20 32 30 31 32 29 2c 0d 0a 20 20 20 20  ary 2012),..    
33280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33290 2f 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c  //       the fol
332a0 6c 6f 77 69 6e 67 20 55 52 4c 20 69 73 20 74 68  lowing URL is th
332b0 65 20 70 72 6f 70 65 72 20 70 6c 61 63 65 20 74  e proper place t
332c0 6f 20 67 65 6e 65 72 61 74 65 0d 0a 20 20 20 20  o generate..    
332d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332e0 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65  //       package
332f0 20 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20   load keys:..   
33300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33310 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
33320 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
33330 20 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69    http://msdn.mi
33340 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75  crosoft.com/en-u
33350 73 2f 76 73 74 75 64 69 6f 2f 63 63 36 35 35 37  s/vstudio/cc6557
33360 39 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  95..            
33370 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
33380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33390 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
333a0 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65  tryKey packageKe
333b0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
333c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333d0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
333e0 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
333f0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
33400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33410 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67    package.Packag
33420 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
33430 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
33440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
33460 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33480 0a 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 69 66 20 28 70 61 63           if (pac
334a0 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  kageKey == null)
334b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
334c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 20 20 65 72 72 6f 72 20 3d           error =
334f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
33500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33520 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
33530 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
33540 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
33550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33560 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
33570 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
33580 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
33590 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
335a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
335c0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
335d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
335f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
33600 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
33610 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
33620 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
33630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33640 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
33650 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72  at("{0} Designer
33660 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65   Package", Proje
33670 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  ctName),..      
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33690 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
336a0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
336b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336c0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
336d0 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
336e0 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d  geKey, "Class",.
336f0 0a 20 20 20 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 20 22 53 51               "SQ
33710 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51  Lite.Designer.SQ
33720 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68  LitePackage", wh
33730 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
33740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33750 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
33760 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
33770 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
33780 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20  CodeBase",..    
33790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337a0 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
337b0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
337c0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
337d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
337e0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
337f0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
33800 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68  y, "ID", 400, wh
33810 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33830 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
33840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33850 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
33860 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 53 79  irectory = GetSy
33870 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 77 6f  stemDirectory(wo
33880 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
33890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338a0 20 69 66 20 28 64 69 72 65 63 74 6f 72 79 20 3d   if (directory =
338b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
338c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338d0 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d       directory =
338e0 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
338f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33900 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
33910 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
33920 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49  e(packageKey, "I
33930 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d  nprocServer32",.
33940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33950 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74               Pat
33960 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
33970 6f 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c  ory, "mscoree.dl
33980 6c 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  l"),..          
33990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339a0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
339b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
339c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
339d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
339e0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
339f0 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22  y, "CompanyName"
33a00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
33a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
33a20 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61  http://system.da
33a30 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c  ta.sqlite.org/",
33a40 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33a50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
33a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
33a70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
33a80 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
33a90 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d  , "MinEdition",.
33aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 74               "st
33ac0 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c  andard", whatIf,
33ad0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
33ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33af0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
33b00 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
33b10 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75  ckageKey, "Produ
33b20 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20  ctName",..      
33b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b40 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
33b50 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65  mat("{0} Designe
33b60 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a  r Package", Proj
33b70 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  ectName),..     
33b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b90 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
33ba0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bc0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
33bd0 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
33be0 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74  ageKey, "Product
33bf0 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20  Version",..     
33c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c10 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68         "1.0", wh
33c20 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
33c30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33c40 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
33c50 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
33c60 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a  y toolboxKey =..
33c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
33ca0 72 65 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b  reateSubKey(pack
33cb0 61 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ageKey,..       
33cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cd0 20 20 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f           "Toolbo
33ce0 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  x", whatIf, verb
33cf0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
33d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
33d30 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20   (toolboxKey == 
33d40 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d80 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
33d90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dc0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
33dd0 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
33de0 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  : " +..         
33df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e00 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
33e10 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61  \Toolbox", packa
33e20 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  geKey);....     
33e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
33e50 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
33e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e90 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
33ea0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
33eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ed0 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65   toolboxKey, "De
33ee0 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c  fault Items", 3,
33ef0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
33f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f10 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
33f20 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
33f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
33f60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33f70 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
33f80 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
33f90 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
33fa0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
33fb0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
33fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fd0 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72  key, "Menus", tr
33fe0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
33ff0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
34000 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
34020 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
34030 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34040 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34060 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
34070 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
34080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34090 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
340a0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
340b0 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c  ey: {0}\\Menus",
340c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
340d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
340e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34100 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
34110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34120 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34130 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
34140 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
34150 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
34160 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
34170 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  Key, package.Pac
34180 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
34190 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
341a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341b0 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33        ", 1000, 3
341c0 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
341d0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
341e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
341f0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34200 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34210 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
34220 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
34230 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
34250 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20  ey, "Services", 
34260 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
34270 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
34280 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
34290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342a0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
342b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
342c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
342d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342e0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
342f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
34300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34310 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
34320 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
34330 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69   key: {0}\\Servi
34340 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
34350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34360 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
34370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34380 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
34390 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
343a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
343b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343c0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
343d0 74 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65  tryKey serviceKe
343e0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
343f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34400 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
34410 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
34420 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
34430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34440 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63    package.Servic
34450 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
34460 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
34470 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
34490 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
344a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
344b0 0a 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 69 66 20 28 73 65 72           if (ser
344d0 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  viceKey == null)
344e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
344f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 20 20 65 72 72 6f 72 20 3d           error =
34520 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
34530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34550 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
34560 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
34570 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
34580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34590 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
345a0 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63  , package.Servic
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 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
345d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
345f0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
34620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
34630 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
34640 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79  Value(serviceKey
34650 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
34660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34670 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63       package.Pac
34680 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
34690 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
346a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
346b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346c0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346e0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
346f0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73  elper.SetValue(s
34700 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65  erviceKey, "Name
34710 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
34720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34730 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
34740 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65 72 76  0} Designer Serv
34750 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d  ice", ProjectNam
34760 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
34770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34780 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34790 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
347a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
347b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
347c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
347d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
347e0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
347f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
34800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34840 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
34850 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
34860 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63  bool RemoveVsPac
34870 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
34880 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
34890 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
348a0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
348b0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
348c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
348d0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
348e0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
348f0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
34900 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
34910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34920 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
34930 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
34940 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
34950 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
34960 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
34970 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
34980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
34990 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
349a0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
349b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
349c0 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
349d0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
349e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
349f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
34a00 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
34a10 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
34a20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34a30 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
34a40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34a50 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
34a60 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
34a70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34a80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
34a90 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
34aa0 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
34ab0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34ac0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
34ad0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34ae0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
34af0 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
34b00 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
34b10 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72   suffix, perUser
34b20 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
34b30 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
34b40 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
34b50 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
34b60 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
34b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34b80 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
34b90 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
34ba0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
34bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
34bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34bd0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
34be0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34bf0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34c00 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
34c10 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
34c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34c30 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
34c40 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
34c50 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
34c60 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
34c70 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
34c80 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
34c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ca0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
34cb0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
34cc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34cd0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
34ce0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
34cf0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
34d00 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
34d10 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
34d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
34d30 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74  y, "Packages", t
34d40 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
34d50 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
34d60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
34d80 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
34d90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34da0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34dc0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
34dd0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
34de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34df0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
34e00 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
34e10 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67  key: {0}\\Packag
34e20 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
34e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e40 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
34ea0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
34eb0 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
34ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ed0 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
34ee0 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
34ef0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
34f00 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
34f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
34f30 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
34f40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34f50 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
34f60 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
34f70 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
34f80 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
34f90 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
34fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
34fb0 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65  y, "Menus", true
34fc0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
34fd0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
34fe0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35000 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
35010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35020 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35040 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
35050 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35070 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
35080 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
35090 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a  : {0}\\Menus",..
350a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350b0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
350c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
350d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
350e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35100 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
35110 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
35120 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61  yHelper.DeleteVa
35130 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
35140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
35150 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61  bKey, package.Pa
35160 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
35170 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
35180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35190 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69         throwOnMi
351a0 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
351b0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
351c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
351e0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
351f0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
35200 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
35210 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
35220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35230 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65     key, "Service
35240 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
35250 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
35260 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35280 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
35290 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
352a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
352b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
352d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
352e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352f0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
35300 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
35310 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53  stry key: {0}\\S
35320 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20  ervices",..     
35330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35340 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
35350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35360 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
35370 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
35380 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353a0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
353b0 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
353c0 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
353d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
353e0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65  bKey, package.Se
353f0 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  rviceId.ToString
35400 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
35410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35420 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
35430 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
35440 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
35450 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35460 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35470 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
35480 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
35490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
354d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
354e0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
354f0 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63  ool ProcessVsPac
35500 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
35510 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
35520 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
35530 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
35540 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
35550 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
35560 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
35570 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
35580 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
35590 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
355a0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
355b0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
355c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
355d0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
355e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
355f0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
35600 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
35610 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
35620 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
35630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
35640 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
35650 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
35660 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35670 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
35680 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
35690 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
356a0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
356b0 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
356c0 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
356d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
356e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
356f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
35700 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c   "invalid VS cal
35710 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
35720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
35730 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
35740 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35750 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
35760 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
35770 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35780 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64        return Add
35790 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
357a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357b0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
357c0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b  on, suffix, pack
357d0 61 67 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72  age, pair.X, per
357e0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
357f0 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34             wow64
35800 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
35810 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  e, ref error);..
35820 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35830 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
35840 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
35850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35860 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50  return RemoveVsP
35870 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
35880 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
35890 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
358a0 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
358b0 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
358c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
358d0 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69         throwOnMi
358e0 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
358f0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
35900 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
35910 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
35920 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
35930 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  n..        #endr
35940 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
35950 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
35960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35990 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
359a0 20 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c      #region Appl
359b0 69 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f  ication Entry Po
359c0 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  int..        [Me
359d0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
359e0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
359f0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
35a00 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
35a10 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20  int Main(..     
35a20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
35a30 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  args..          
35a40 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
35a50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
35a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
35a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a80 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
35a90 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75  nfiguration = nu
35aa0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
35ab0 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f       string erro
35ac0 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
35ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
35ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b30 23 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65 72  #region Debugger
35b40 20 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20   Hook..         
35b50 20 20 20 20 20 20 20 69 66 20 28 45 6e 76 69 72         if (Envir
35b60 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f  onment.GetEnviro
35b70 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22 42  nmentVariable("B
35b80 72 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d  reak") != null).
35b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35ba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35bb0 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
35bc0 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20  WriteLine(..    
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35be0 20 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65      "Attach a de
35bf0 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73  bugger to proces
35c00 73 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20  s {0} and " +.. 
35c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c20 20 20 20 20 20 20 20 22 70 72 65 73 73 20 61 6e         "press an
35c30 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75  y key to continu
35c40 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
35c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
35c60 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74  ocess.GetCurrent
35c70 50 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a  Process().Id);..
35c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35c90 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
35ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35cc0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
35cd0 65 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b  e.ReadKey(true);
35ce0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
35cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
35d10 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
35d20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
35d30 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f  Exception) // Co
35d40 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20  nsole.ReadKey.. 
35d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
35d80 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
35d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35da0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
35db0 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67             Debug
35dc0 67 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20  ger.Break();..  
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
35de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35df0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
35e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35e60 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e    #region Comman
35e70 64 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e  d Line Processin
35e80 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
35e90 20 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72     if (!Configur
35ea0 61 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d  ation.FromArgs(.
35eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35ec0 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74           args, t
35ed0 72 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75  rue, ref configu
35ee0 72 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f  ration, ref erro
35ef0 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  r) ||..         
35f00 20 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66             !Conf
35f10 69 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73  iguration.Proces
35f20 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
35f30 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73              args
35f40 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  , configuration,
35f50 20 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72   true, ref error
35f60 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
35f70 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69            !Confi
35f80 67 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75  guration.CheckRu
35f90 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
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 63 6f 6e 66 69 67 75 72 61         configura
35fc0 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20  tion, true, ref 
35fd0 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
35fe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36000 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73  TraceOps.ShowMes
36010 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69  sage(TracePriori
36020 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
36030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36040 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
36050 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
36060 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
36070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36080 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c            error,
36090 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
360a0 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
360b0 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20  s.OK,..         
360c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
360d0 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
360e0 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
360f0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
36100 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
36110 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
36120 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
36130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36140 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
36150 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
36160 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c  ack, "Failure.",
36170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36180 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
36190 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
361a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361b0 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41   return 1; /* FA
361c0 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20  ILURE */..      
361d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
361e0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
361f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
36200 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
36210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
36250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
36260 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
36270 79 20 72 65 67 69 73 74 72 79 20 3d 20 6e 65 77  y registry = new
36280 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a   MockRegistry(..
36290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362a0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
362b0 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61  ation.WhatIf, fa
362c0 6c 73 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  lse, false))..  
362d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
362e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
362f0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 72       #region Cor
36300 65 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d 65 20  e Assembly Name 
36310 43 68 65 63 6b 0d 0a 20 20 20 20 20 20 20 20 20  Check..         
36320 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
36330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36340 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 74     // NOTE: Do t
36350 68 69 73 20 66 69 72 73 74 2c 20 62 65 66 6f 72  his first, befor
36360 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63 68 61  e making any cha
36370 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20  nges to the..   
36380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36390 20 2f 2f 20 20 20 20 20 20 20 73 79 73 74 65 6d   //       system
363a0 2c 20 62 65 63 61 75 73 65 20 69 74 20 77 69 6c  , because it wil
363b0 6c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  l throw an excep
363c0 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20 20 20  tion if the..   
363d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363e0 20 2f 2f 20 20 20 20 20 20 20 66 69 6c 65 20 6e   //       file n
363f0 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 70  ame does not rep
36400 72 65 73 65 6e 74 20 61 20 76 61 6c 69 64 20 6d  resent a valid m
36410 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20  anaged..        
36420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
36430 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 0d 0a       assembly...
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36450 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
36460 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
36470 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73 73  mblyName coreAss
36480 65 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20 20  emblyName =..   
36490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364a0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
364b0 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d  e.GetAssemblyNam
364c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
364d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
364f0 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  reFileName); /* 
36500 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36520 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73  AssemblyName des
36530 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
36540 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
36550 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
36560 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
36570 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
365a0 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69  ation.DesignerFi
365b0 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
365c0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
365d0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
365e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
365f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
36600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36630 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
36650 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 20 44 69  region System Di
36660 72 65 63 74 6f 72 79 20 43 68 65 63 6b 0d 0a 20  rectory Check.. 
36670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36680 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
36690 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
366a0 54 45 3a 20 47 65 74 74 69 6e 67 20 74 68 65 20  TE: Getting the 
366b0 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
366c0 20 76 61 6c 75 65 20 68 65 72 65 20 73 65 72 76   value here serv
366d0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
366e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
366f0 20 74 77 6f 20 70 75 72 70 6f 73 65 73 3a 0d 0a   two purposes:..
36700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36710 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
36720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
36730 20 20 20 20 20 31 2e 20 49 74 20 65 6e 61 62 6c       1. It enabl
36740 65 73 20 75 73 20 74 6f 20 6c 6f 67 20 74 68 65  es us to log the
36750 20 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72   system director
36760 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
36770 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
36780 20 20 20 76 61 6c 75 65 20 76 65 72 79 20 65 61     value very ea
36790 72 6c 79 20 69 6e 20 74 68 65 20 69 6e 73 74 61  rly in the insta
367a0 6c 6c 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 0d  llation process.
367b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
367c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
367d0 20 28 69 2e 65 2e 20 65 76 65 6e 20 74 68 6f 75   (i.e. even thou
367e0 67 68 20 74 68 65 20 76 61 6c 75 65 20 69 74 73  gh the value its
367f0 65 6c 66 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20  elf is not..    
36800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36810 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 65 65 64  //          need
36820 65 64 20 75 6e 74 69 6c 20 6d 75 63 68 20 6c 61  ed until much la
36830 74 65 72 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  ter)...         
36840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
36850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36860 20 20 20 2f 2f 20 20 20 20 20 20 20 32 2e 20 53     //       2. S
36870 69 6e 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  ince the value i
36880 73 20 63 61 63 68 65 64 2c 20 69 74 20 70 72 65  s cached, it pre
36890 76 65 6e 74 73 20 61 6e 0d 0a 20 20 20 20 20 20  vents an..      
368a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
368b0 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70 74            except
368c0 69 6f 6e 20 66 72 6f 6d 20 62 65 69 6e 67 20 74  ion from being t
368d0 68 72 6f 77 6e 20 6d 75 63 68 20 6c 61 74 65 72  hrown much later
368e0 20 64 75 72 69 6e 67 0d 0a 20 20 20 20 20 20 20   during..       
368f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
36900 20 20 20 20 20 20 20 20 20 74 68 65 20 69 6e 73           the ins
36910 74 61 6c 6c 20 77 68 65 6e 20 74 68 65 20 76 61  tall when the va
36920 6c 75 65 20 69 73 20 71 75 65 72 69 65 64 20 61  lue is queried a
36930 67 61 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  gain..          
36940 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
36950 20 20 20 20 20 20 28 69 2e 65 2e 20 77 69 74 68        (i.e. with
36960 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
36970 66 6f 72 20 74 68 65 20 22 77 6f 77 36 34 22 0d  for the "wow64".
36980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36990 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
369a0 20 70 61 72 61 6d 65 74 65 72 29 2e 0d 0a 20 20   parameter)...  
369b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
369d0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
369e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
369f0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
36a00 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20  ediumLow,..     
36a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
36a30 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
36a40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
36a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36a60 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d           "System
36a70 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 7b 30   directory is {0
36a80 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  }.", ForDisplay(
36a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36aa0 20 20 20 20 20 20 20 20 20 20 47 65 74 53 79 73            GetSys
36ab0 74 65 6d 44 69 72 65 63 74 6f 72 79 28 63 6f 6e  temDirectory(con
36ac0 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34  figuration.Wow64
36ad0 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ))),..          
36ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
36af0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 20 2f 2a  aceCategory); /*
36b00 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
36b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
36b20 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
36b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
36b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
36b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b90 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
36ba0 20 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73   Framework / Vis
36bb0 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d  ual Studio Data.
36bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36bd0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
36be0 6b 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  kage = null;..  
36bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c00 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
36c10 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20  frameworkList = 
36c20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
36c30 20 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73             VsLis
36c40 74 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b  t vsList = null;
36c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36c60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
36c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ca0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
36cb0 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69             Initi
36cc0 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 64  alizeVsPackage(d
36cd0 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
36ce0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
36cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
36d00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46  nfiguration.HasF
36d10 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  lags(..         
36d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d30 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e     InstallFlags.
36d40 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
36d50 63 68 65 2c 20 74 72 75 65 29 20 26 26 0d 0a 20  che, true) &&.. 
36d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d70 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
36d80 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
36d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36da0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
36db0 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61  allFlags.VsPacka
36dc0 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
36dd0 43 61 63 68 65 2c 20 74 72 75 65 29 2c 0d 0a 20  Cache, true),.. 
36de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36df0 20 20 20 20 20 20 20 72 65 66 20 70 61 63 6b 61         ref packa
36e00 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ge);....        
36e10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
36e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36e50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
36e70 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f  nitializeFramewo
36e80 72 6b 4c 69 73 74 28 63 6f 6e 66 69 67 75 72 61  rkList(configura
36e90 74 69 6f 6e 2e 50 65 72 55 73 65 72 20 3f 0d 0a  tion.PerUser ?..
36ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36eb0 20 20 20 20 20 20 20 20 72 65 67 69 73 74 72 79          registry
36ec0 2e 43 75 72 72 65 6e 74 55 73 65 72 20 3a 20 72  .CurrentUser : r
36ed0 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
36ee0 68 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  hine,..         
36ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
36f00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65  onfiguration, re
36f10 66 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29  f frameworkList)
36f20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36f30 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c           Initial
36f40 69 7a 65 56 73 4c 69 73 74 28 63 6f 6e 66 69 67  izeVsList(config
36f50 75 72 61 74 69 6f 6e 2e 50 65 72 55 73 65 72 20  uration.PerUser 
36f60 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
36f70 20 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73             regis
36f80 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 20  try.CurrentUser 
36f90 3a 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c  : registry.Local
36fa0 4d 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20 20 20  Machine,..      
36fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c    configuration,
36fd0 20 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20   ref vsList);.. 
36fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ff0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
37000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37010 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
37020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37050 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37060 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
37070 53 68 61 72 65 64 20 43 6c 69 65 6e 74 20 44 61  Shared Client Da
37080 74 61 20 43 72 65 61 74 69 6f 6e 0d 0a 20 20 20  ta Creation..   
37090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370a0 20 6f 62 6a 65 63 74 20 64 69 72 65 63 74 6f 72   object director
370b0 79 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50  yData = new AnyP
370c0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
370d0 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  >(..            
370e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
370f0 69 67 75 72 61 74 69 6f 6e 2e 44 69 72 65 63 74  iguration.Direct
37100 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  ory, configurati
37110 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a  on.Install);....
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37130 20 20 20 20 6f 62 6a 65 63 74 20 66 69 6c 65 4e      object fileN
37140 61 6d 65 44 61 74 61 20 3d 20 6e 65 77 20 41 6e  ameData = new An
37150 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
37160 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ol>(..          
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
37180 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69  nfiguration.Desi
37190 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f  gnerFileName, co
371a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74  nfiguration.Inst
371b0 61 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  all);..         
371c0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
371d0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
371f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37220 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
37230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37240 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43  #region .NET GAC
37250 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d   Install/Remove.
37260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37270 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
37280 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
37290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
372a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
372b0 73 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f 62 61  stallFlags.Globa
372c0 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20  lAssemblyCache, 
372d0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
372e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 50 75 62 6c 69 73 68 20 70         Publish p
37310 75 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a  ublish = null;..
37320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37330 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
37340 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
37350 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
37360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37370 20 20 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20    publish = new 
37380 50 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20  Publish();....  
37390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373a0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
373b0 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29  uration.Install)
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 7b 0d 0a 20 20 20            {..   
373e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
37400 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
37410 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
37420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37430 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f       /* throw */
37440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37460 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73    publish.GacIns
37470 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69  tall(configurati
37480 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
37490 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
374c0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
374d0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
374e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37500 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
37510 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
37520 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
37530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
37550 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d  acInstall: assem
37560 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
37570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37590 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
375a0 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
375b0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
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 74 72 61 63 65             trace
375e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
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 69 66 20 28 63 6f            if (co
37610 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 73 4c 69  nfiguration.IsLi
37620 6e 71 53 75 70 70 6f 72 74 65 64 28 29 29 0d 0a  nqSupported())..
37630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
37670 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
37680 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
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 2f                 /
376b0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
376c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376e0 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61  publish.GacInsta
376f0 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ll(configuration
37700 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d  .LinqFileName);.
37710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37730 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
37740 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
37750 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
37760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37780 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
37790 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
377a0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
377b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
377c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377d0 20 20 20 20 20 20 20 20 22 47 61 63 49 6e 73 74          "GacInst
377e0 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61 74  all: assemblyPat
377f0 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  h = {0}",..     
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
37820 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
37830 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65  uration.LinqFile
37840 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
37850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37860 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
37870 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
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 7d 0d 0a 0d 0a 20            }.... 
378a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
378c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
378d0 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
378e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378f0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
37900 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61  allFlags.VsPacka
37910 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
37920 43 61 63 68 65 2c 20 74 72 75 65 29 29 0d 0a 20  Cache, true)).. 
37930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37940 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
37970 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
37980 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
37990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
379b0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
379c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
379e0 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c  ublish.GacInstal
379f0 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  l(configuration.
37a00 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
37a10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a30 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
37a40 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
37a50 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
37a60 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
37a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a80 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
37a90 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
37aa0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
37ab0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
37ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ad0 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49             "GacI
37ae0 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79  nstall: assembly
37af0 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
37b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e    ForDisplay(con
37b30 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67  figuration.Desig
37b40 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  nerFileName)),..
37b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b70 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
37b80 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
37b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
37bb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bd0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
37be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bf0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c10 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
37c20 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
37c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c50 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
37c60 73 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61  s.VsPackageGloba
37c70 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20  lAssemblyCache, 
37c80 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
37c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ca0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cc0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
37cd0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
37ce0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d00 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
37d10 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
37d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d30 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
37d40 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67  GacRemove(config
37d50 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72  uration.Designer
37d60 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
37d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
37d90 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
37da0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
37db0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
37dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37de0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
37df0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
37e00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
37e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e30 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61     "GacRemove: a
37e40 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30  ssemblyPath = {0
37e50 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
37e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e70 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
37e80 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  lay(configuratio
37e90 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.DesignerFileNa
37ea0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
37eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ec0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
37ed0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
37ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ef0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
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 69 66 20 28 63 6f 6e           if (con
37f20 66 69 67 75 72 61 74 69 6f 6e 2e 49 73 4c 69 6e  figuration.IsLin
37f30 71 53 75 70 70 6f 72 74 65 64 28 29 29 0d 0a 20  qSupported()).. 
37f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
37f80 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
37f90 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
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 2f 2a                /*
37fc0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
37fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
37ff0 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65  ublish.GacRemove
38000 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c  (configuration.L
38010 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  inqFileName);...
38020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38040 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
38050 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
38060 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
38070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38090 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
380a0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
380b0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
380c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380e0 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65        "GacRemove
380f0 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d  : assemblyPath =
38100 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
38110 20 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 46 6f 72 44              ForD
38130 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61  isplay(configura
38140 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d  tion.LinqFileNam
38150 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
38160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38170 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
38180 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
381b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381c0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
381d0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
381e0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
381f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38200 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
38210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38230 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f   publish.GacRemo
38240 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ve(configuration
38250 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
38260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
38280 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
38290 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
382a0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
382b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
382d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
382e0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
382f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
38300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38310 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63              "Gac
38320 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79  Remove: assembly
38330 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
38340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
38360 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
38370 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e  ration.CoreFileN
38380 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
38390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
383b0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
383e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
383f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
38400 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
38410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38420 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
38430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
38460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38470 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
38480 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73   AssemblyFolders
38490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
384a0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
384b0 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73  uration.HasFlags
384c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
384d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
384e0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73 73 65  nstallFlags.Asse
384f0 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74 72 75  mblyFolders, tru
38500 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
38510 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
38520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38530 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
38540 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
38550 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y(registry,..   
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 20 20 20 20 66 72 61               fra
38580 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63  meworkList, Proc
38590 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  essAssemblyFolde
385a0 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs,..           
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
385d0 6f 6e 2e 52 65 67 69 73 74 72 79 56 65 72 73 69  on.RegistryVersi
385e0 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79 44 61 74  on, directoryDat
385f0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
38600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38610 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
38620 6e 2e 50 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  n.PerUser,..    
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 4e 65 74 46              NetF
38650 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20  xIs32BitOnly || 
38660 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f  configuration.Wo
38670 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
38680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38690 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
386a0 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69  ion.ThrowOnMissi
386b0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
386c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386d0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
386e0 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69  on.WhatIf, confi
386f0 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65  guration.Verbose
38700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
38710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38720 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a     ref error))..
38730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38740 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
38750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38760 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
38770 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63  ShowMessage(Trac
38780 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
38790 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
387a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387b0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
387c0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
387d0 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d  , thisAssembly,.
387e0 0a 20 20 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 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
38810 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
38820 78 42 75 74 74