System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact d95f3c290c02fb73e1fe930f7f17ba8f412516d3:


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 0d 0a 75 73 69  .#if NET_20..usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 53 65 63 75 72 69  ng System.Securi
01c0: 74 79 2e 50 65 72 6d 69 73 73 69 6f 6e 73 3b 0d  ty.Permissions;.
01d0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 75 73 69 6e 67  .#endif....using
01e0: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
01f0: 67 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d  g;..using System
0200: 2e 57 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d  .Windows.Forms;.
0210: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 58 6d  .using System.Xm
0220: 6c 3b 0d 0a 75 73 69 6e 67 20 4d 69 63 72 6f 73  l;..using Micros
0230: 6f 66 74 2e 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61  oft.Win32;....na
0240: 6d 65 73 70 61 63 65 20 53 79 73 74 65 6d 2e 44  mespace System.D
0250: 61 74 61 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20  ata.SQLite..{.. 
0260: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
0270: 63 20 44 65 6c 65 67 61 74 65 73 0d 0a 20 20 20  c Delegates..   
0280: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61   internal delega
0290: 74 65 20 76 6f 69 64 20 54 72 61 63 65 43 61 6c  te void TraceCal
02a0: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
02b0: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 20  string message, 
02c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
02d0: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
02e0: 79 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  y /* in */..    
02f0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  );....    //////
0300: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 69 6e 74  /////....    int
0350: 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62  ernal delegate b
0360: 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e  ool FrameworkCon
0370: 66 69 67 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20  figCallback(..  
0380: 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
0390: 65 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20  eName,          
03a0: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
03b0: 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
03c0: 61 6e 74 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  ant,          /*
03d0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
03e0: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 20 20 20 20  string name,    
03f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0400: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
0410: 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  ing description,
0420: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
0430: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
0440: 20 74 79 70 65 4e 61 6d 65 2c 20 20 20 20 20 20   typeName,      
0450: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0460: 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
0470: 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
0480: 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
0490: 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
04a0: 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 2f  tData,         /
04b0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
04c0: 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20   bool wow64,    
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
04e0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  n */..        bo
04f0: 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
0500: 67 2c 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a  g,       /* in *
0510: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
0520: 77 68 61 74 49 66 2c 20 20 20 20 20 20 20 20 20  whatIf,         
0530: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0540: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
0550: 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20 20  bose,           
0560: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0570: 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
0580: 76 65 64 2c 20 20 20 20 20 20 20 20 20 20 20 20  ved,            
0590: 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
05a0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
05b0: 72 6f 72 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ror           /*
05c0: 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d   out */..    );.
05d0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
05e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0620: 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  //....    intern
0630: 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c  al delegate bool
0640: 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74   FrameworkRegist
0650: 72 79 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20  ryCallback(..   
0660: 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4d       Installer.M
0670: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
0680: 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69 6e 20 2a 2f  ootKey, /* in */
0690: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
06a0: 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
06b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
06c0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 56  in */..        V
06d0: 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
06e0: 56 65 72 73 69 6f 6e 2c 20 20 20 20 20 20 20 20  Version,        
06f0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0700: 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
0710: 6f 72 6d 4e 61 6d 65 2c 20 20 20 20 20 20 20 20  ormName,        
0720: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0730: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
0740: 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20  clientData,     
0750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0760: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  n */..        bo
0770: 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20  ol wow64,       
0780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0790: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
07a0: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
07b0: 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20  issing,         
07c0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
07d0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
07e0: 74 49 66 2c 20 20 20 20 20 20 20 20 20 20 20 20  tIf,            
07f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0800: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
0810: 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20  l verbose,      
0820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0830: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0840: 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
0850: 6f 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  or              
0860: 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
0870: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f      );....    //
0880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
08d0: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61   internal delega
08e0: 74 65 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74  te bool VisualSt
08f0: 75 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c  udioRegistryCall
0900: 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49  back(..        I
0910: 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67  nstaller.MockReg
0920: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
0930: 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
0940: 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
0950: 72 73 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20  rsion,          
0960: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0970: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
0980: 73 75 66 66 69 78 2c 20 20 20 20 20 20 20 20 20  suffix,         
0990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
09a0: 6e 2c 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a  n, optional */..
09b0: 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65          Installe
09c0: 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67  r.Package packag
09d0: 65 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  e,         /* in
09e0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a   */..        obj
09f0: 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ect clientData, 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0a20: 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20 20    bool wow64,   
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a40: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0a50: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
0a60: 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20  wOnMissing,     
0a70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0a80: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0a90: 20 77 68 61 74 49 66 2c 20 20 20 20 20 20 20 20   whatIf,        
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0ab0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0ac0: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20   bool verbose,  
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0af0: 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
0b00: 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20 20   error          
0b10: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20           /* out 
0b20: 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 20 20 20 20  */..    );..    
0b30: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0b40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0b90: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62  .    #region Pub
0ba0: 6c 69 63 20 45 6e 75 6d 65 72 61 74 69 6f 6e 73  lic Enumerations
0bb0: 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d  ..    [Flags()].
0bc0: 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  .    public enum
0bd0: 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20   InstallFlags.. 
0be0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
0bf0: 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 46 6c 61  egion Normal Fla
0c00: 67 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65  gs..        None
0c10: 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20 20   = 0x0,..       
0c20: 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43   GlobalAssemblyC
0c30: 61 63 68 65 20 3d 20 30 78 31 2c 0d 0a 20 20 20  ache = 0x1,..   
0c40: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 46 6f 6c       AssemblyFol
0c50: 64 65 72 73 20 3d 20 30 78 32 2c 0d 0a 20 20 20  ders = 0x2,..   
0c60: 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72 46       DbProviderF
0c70: 61 63 74 6f 72 79 20 3d 20 30 78 34 2c 0d 0a 20  actory = 0x4,.. 
0c80: 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67 65         VsPackage
0c90: 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20   = 0x8,..       
0ca0: 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c   VsPackageGlobal
0cb0: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
0cc0: 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 56  0x10,..        V
0cd0: 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20 30 78  sDataSource = 0x
0ce0: 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44  20,..        VsD
0cf0: 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20 30 78  ataProvider = 0x
0d00: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  40,..        #en
0d10: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
0d20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0d70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
0d80: 6d 70 6f 73 69 74 65 20 46 6c 61 67 73 0d 0a 20  mposite Flags.. 
0d90: 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
0da0: 20 3d 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   = GlobalAssembl
0db0: 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d 62 6c  yCache | Assembl
0dc0: 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20 20 20  yFolders |..    
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0de0: 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
0df0: 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  y,....        //
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e40: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0e50: 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67 65 20   Vs = VsPackage 
0e60: 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61  | VsPackageGloba
0e70: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c  lAssemblyCache |
0e80: 20 56 73 44 61 74 61 53 6f 75 72 63 65 20 7c 0d   VsDataSource |.
0e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73  .             Vs
0ea0: 44 61 74 61 50 72 6f 76 69 64 65 72 2c 0d 0a 0d  DataProvider,...
0eb0: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c 20  ....        All 
0f10: 3d 20 46 72 61 6d 65 77 6f 72 6b 20 7c 20 56 73  = Framework | Vs
0f20: 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ,....        ///
0f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
0f80: 41 6c 6c 45 78 63 65 70 74 47 6c 6f 62 61 6c 41  AllExceptGlobalA
0f90: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 41  ssemblyCache = A
0fa0: 6c 6c 20 26 20 7e 28 47 6c 6f 62 61 6c 41 73 73  ll & ~(GlobalAss
0fb0: 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d 0a 20 20  emblyCache |..  
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 56 73 50 61 63 6b 61 67 65 47 6c       VsPackageGl
0ff0: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
1000: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  e),..        #en
1010: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1020: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1070: 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20        Default = 
1080: 41 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  All..    }....  
1090: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10e0: 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a  .    [Flags()]..
10f0: 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20      public enum 
1100: 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20  TracePriority.. 
1110: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 4e 6f     {..        No
1120: 6e 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20  ne = 0x0,..     
1130: 20 20 20 4c 6f 77 65 73 74 20 3d 20 30 78 31 2c     Lowest = 0x1,
1140: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 72 20  ..        Lower 
1150: 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20  = 0x2,..        
1160: 4c 6f 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20  Low = 0x4,..    
1170: 20 20 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d 20      MediumLow = 
1180: 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65  0x8,..        Me
1190: 64 69 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20 20  dium = 0x10,..  
11a0: 20 20 20 20 20 20 4d 65 64 69 75 6d 48 69 67 68        MediumHigh
11b0: 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20   = 0x20,..      
11c0: 20 20 48 69 67 68 20 3d 20 30 78 34 30 2c 0d 0a    High = 0x40,..
11d0: 20 20 20 20 20 20 20 20 48 69 67 68 65 72 20 3d          Higher =
11e0: 20 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x80,..        
11f0: 48 69 67 68 65 73 74 20 3d 20 30 78 31 30 30 2c  Highest = 0x100,
1200: 0d 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c  ..        Defaul
1210: 74 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20  t = Medium..    
1220: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
1230: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
1240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1280: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
1290: 69 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c  ion Installer Cl
12a0: 61 73 73 0d 0a 23 69 66 20 21 4e 45 54 5f 32 30  ass..#if !NET_20
12b0: 0d 0a 20 20 20 20 5b 53 65 63 75 72 69 74 79 43  ..    [SecurityC
12c0: 72 69 74 69 63 61 6c 28 29 5d 0d 0a 23 65 6c 73  ritical()]..#els
12d0: 65 0d 0a 20 20 20 20 5b 53 65 63 75 72 69 74 79  e..    [Security
12e0: 50 65 72 6d 69 73 73 69 6f 6e 28 53 65 63 75 72  Permission(Secur
12f0: 69 74 79 41 63 74 69 6f 6e 2e 4c 69 6e 6b 44 65  ityAction.LinkDe
1300: 6d 61 6e 64 2c 20 55 6e 6d 61 6e 61 67 65 64 43  mand, UnmanagedC
1310: 6f 64 65 20 3d 20 74 72 75 65 29 5d 0d 0a 23 65  ode = true)]..#e
1320: 6e 64 69 66 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ndif..    intern
1330: 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  al static class 
1340: 49 6e 73 74 61 6c 6c 65 72 0d 0a 20 20 20 20 7b  Installer..    {
1350: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1360: 6e 20 55 6e 73 61 66 65 20 4e 61 74 69 76 65 20  n Unsafe Native 
1370: 4d 65 74 68 6f 64 73 20 43 6c 61 73 73 0d 0a 20  Methods Class.. 
1380: 20 20 20 20 20 20 20 5b 53 75 70 70 72 65 73 73         [Suppress
1390: 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 53 65 63  UnmanagedCodeSec
13a0: 75 72 69 74 79 28 29 5d 0d 0a 20 20 20 20 20 20  urity()]..      
13b0: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
13c0: 20 63 6c 61 73 73 20 55 6e 73 61 66 65 4e 61 74   class UnsafeNat
13d0: 69 76 65 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  iveMethods..    
13e0: 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f      {..#if WINDO
13f0: 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  WS..            
1400: 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 57  #region Native W
1410: 69 6e 33 32 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  in32 Constants..
1420: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1430: 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 4d 41  ate const int MA
1440: 58 5f 50 41 54 48 20 3d 20 32 36 30 3b 0d 0a 0d  X_PATH = 260;...
1450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14b0: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e  private const in
14c0: 74 20 43 53 49 44 4c 5f 53 59 53 54 45 4d 58 38  t CSIDL_SYSTEMX8
14d0: 36 20 3d 20 30 78 30 30 32 39 3b 0d 0a 0d 0a 20  6 = 0x0029;.... 
14e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1540: 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20  ivate const int 
1550: 53 48 47 46 50 5f 54 59 50 45 5f 43 55 52 52 45  SHGFP_TYPE_CURRE
1560: 4e 54 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  NT = 0;....     
1570: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15c0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
15d0: 65 20 63 6f 6e 73 74 20 69 6e 74 20 53 5f 4f 4b  e const int S_OK
15e0: 20 3d 20 30 3b 20 2f 2a 20 48 52 45 53 55 4c 54   = 0; /* HRESULT
15f0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1600: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1610: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1670: 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e  egion Native Win
1680: 64 6f 77 73 20 4d 65 74 68 6f 64 73 0d 0a 20 20  dows Methods..  
1690: 20 20 20 20 20 20 20 20 20 20 5b 44 6c 6c 49 6d            [DllIm
16a0: 70 6f 72 74 28 22 73 68 66 6f 6c 64 65 72 2e 64  port("shfolder.d
16b0: 6c 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ll",..          
16c0: 20 20 20 20 20 20 43 61 6c 6c 69 6e 67 43 6f 6e        CallingCon
16d0: 76 65 6e 74 69 6f 6e 20 3d 20 43 61 6c 6c 69 6e  vention = Callin
16e0: 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 57 69 6e 61  gConvention.Wina
16f0: 70 69 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pi,..           
1700: 20 20 20 20 20 43 68 61 72 53 65 74 20 3d 20 43       CharSet = C
1710: 68 61 72 53 65 74 2e 41 75 74 6f 2c 20 42 65 73  harSet.Auto, Bes
1720: 74 46 69 74 4d 61 70 70 69 6e 67 20 3d 20 66 61  tFitMapping = fa
1730: 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
1740: 20 20 20 20 20 20 54 68 72 6f 77 4f 6e 55 6e 6d        ThrowOnUnm
1750: 61 70 70 61 62 6c 65 43 68 61 72 20 3d 20 74 72  appableChar = tr
1760: 75 65 2c 20 53 65 74 4c 61 73 74 45 72 72 6f 72  ue, SetLastError
1770: 20 3d 20 74 72 75 65 29 5d 0d 0a 20 20 20 20 20   = true)]..     
1780: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1790: 74 61 74 69 63 20 65 78 74 65 72 6e 20 69 6e 74  tatic extern int
17a0: 20 53 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68   SHGetFolderPath
17b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17c0: 20 20 20 49 6e 74 50 74 72 20 68 57 6e 64 4f 77     IntPtr hWndOw
17d0: 6e 65 72 2c 20 69 6e 74 20 6e 46 6f 6c 64 65 72  ner, int nFolder
17e0: 2c 20 49 6e 74 50 74 72 20 68 54 6f 6b 65 6e 2c  , IntPtr hToken,
17f0: 20 75 69 6e 74 20 66 6c 61 67 73 2c 0d 0a 20 20   uint flags,..  
1800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1810: 74 50 74 72 20 62 75 66 66 65 72 20 2f 2a 20 3e  tPtr buffer /* >
1820: 3d 20 4d 41 58 5f 50 41 54 48 20 2a 2f 29 3b 0d  = MAX_PATH */);.
1830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1840: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1850: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18a0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
18b0: 6e 20 50 75 62 6c 69 63 20 57 72 61 70 70 65 72  n Public Wrapper
18c0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
18d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
18e0: 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53 79  tic string GetSy
18f0: 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29 0d  stemDirectory().
1900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1920: 49 6e 74 50 74 72 20 62 75 66 66 65 72 20 3d 20  IntPtr buffer = 
1930: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1950: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1960: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1970: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66 66              buff
1980: 65 72 20 3d 20 4d 61 72 73 68 61 6c 2e 41 6c 6c  er = Marshal.All
1990: 6f 63 43 6f 54 61 73 6b 4d 65 6d 28 0d 0a 20 20  ocCoTaskMem(..  
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b0: 20 20 20 20 20 20 73 69 7a 65 6f 66 28 63 68 61        sizeof(cha
19c0: 72 29 20 2a 20 28 4d 41 58 5f 50 41 54 48 20 2b  r) * (MAX_PATH +
19d0: 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   1));....       
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19f0: 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74  (buffer != IntPt
1a00: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a30: 20 20 20 20 20 20 20 20 69 66 20 28 53 48 47 65          if (SHGe
1a40: 74 46 6f 6c 64 65 72 50 61 74 68 28 49 6e 74 50  tFolderPath(IntP
1a50: 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20  tr.Zero,..      
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a70: 20 20 20 20 20 20 20 20 20 20 43 53 49 44 4c 5f            CSIDL_
1a80: 53 59 53 54 45 4d 58 38 36 2c 20 49 6e 74 50 74  SYSTEMX86, IntPt
1a90: 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20 20  r.Zero,..       
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab0: 20 20 20 20 20 20 20 20 20 53 48 47 46 50 5f 54           SHGFP_T
1ac0: 59 50 45 5f 43 55 52 52 45 4e 54 2c 20 62 75 66  YPE_CURRENT, buf
1ad0: 66 65 72 29 20 3d 3d 20 53 5f 4f 4b 29 0d 0a 20  fer) == S_OK).. 
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72        return Mar
1b20: 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e 67  shal.PtrToString
1b30: 41 75 74 6f 28 62 75 66 66 65 72 29 3b 0d 0a 20  Auto(buffer);.. 
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b90: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
1ba0: 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
1bb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1be0: 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a          // TODO:
1bf0: 20 49 73 20 74 68 69 73 20 74 68 65 20 72 69 67   Is this the rig
1c00: 68 74 20 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e  ht error handlin
1c10: 67 20 73 6f 6c 75 74 69 6f 6e 0d 0a 20 20 20 20  g solution..    
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 2f 2f 20 20 20 20 20 20 20 74 6f 20 75 73 65 20  //       to use 
1c40: 61 74 20 74 68 69 73 20 70 6f 69 6e 74 3f 0d 0a  at this point?..
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1c70: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c80: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1c90: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1ca0: 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc0: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1cd0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1ce0: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1cf0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 75              "Cou
1d10: 6c 64 20 6e 6f 74 20 67 65 74 20 73 79 73 74 65  ld not get syste
1d20: 6d 20 64 69 72 65 63 74 6f 72 79 3a 20 7b 30 7d  m directory: {0}
1d30: 22 2c 20 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  ", e),..        
1d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d50: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d70: 20 20 20 20 20 20 20 74 68 72 6f 77 3b 0d 0a 20         throw;.. 
1d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1da0: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
1db0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd0: 20 20 69 66 20 28 62 75 66 66 65 72 20 21 3d 20    if (buffer != 
1de0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72               Mar
1e20: 73 68 61 6c 2e 46 72 65 65 43 6f 54 61 73 6b 4d  shal.FreeCoTaskM
1e30: 65 6d 28 62 75 66 66 65 72 29 3b 0d 0a 20 20 20  em(buffer);..   
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e50: 20 20 20 20 20 62 75 66 66 65 72 20 3d 20 49 6e       buffer = In
1e60: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1e90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ea0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
1eb0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
1ec0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ed0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 23 65 6e   #endregion..#en
1ee0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
1ef0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1f00: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f60: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
1f70: 20 48 65 6c 70 65 72 20 43 6c 61 73 73 65 73 0d   Helper Classes.
1f80: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1f90: 20 41 6e 79 50 61 69 72 20 43 6c 61 73 73 0d 0a   AnyPair Class..
1fa0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1fb0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 41 6e 79  sealed class Any
1fc0: 50 61 69 72 3c 54 31 2c 20 54 32 3e 0d 0a 20 20  Pair<T1, T2>..  
1fd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fe0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1ff0: 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
2000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2020: 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 63   WARNING: This c
2030: 6f 6e 73 74 72 75 63 74 6f 72 20 70 72 6f 64 75  onstructor produ
2040: 63 65 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c 65  ces an immutable
2050: 20 22 65 6d 70 74 79 22 20 70 61 69 72 0d 0a 20   "empty" pair.. 
2060: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2070: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d 0a         object...
2080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2090: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
20a0: 69 63 20 41 6e 79 50 61 69 72 28 29 0d 0a 20 20  ic AnyPair()..  
20b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
20c0: 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20  base()..        
20d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20e0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
20f0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
2100: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2110: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2150: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2160: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e         public An
2170: 79 50 61 69 72 28 54 31 20 78 29 0d 0a 20 20 20  yPair(T1 x)..   
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
2190: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  his()..         
21a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21b0: 20 20 20 20 20 20 74 68 69 73 2e 78 20 3d 20 78        this.x = x
21c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f  ////////////////
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2220: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2230: 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69     public AnyPai
2240: 72 28 54 31 20 78 2c 20 54 32 20 79 29 0d 0a 20  r(T1 x, T2 y).. 
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
2260: 20 74 68 69 73 28 78 29 0d 0a 20 20 20 20 20 20   this(x)..      
2270: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2280: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 79 20           this.y 
2290: 3d 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = y;..          
22a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
22b0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
22c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2320: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f  egion Public Pro
2330: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
2340: 20 20 20 20 20 70 72 69 76 61 74 65 20 54 31 20       private T1 
2350: 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x;..            
2360: 70 75 62 6c 69 63 20 54 31 20 58 0d 0a 20 20 20  public T1 X..   
2370: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2380: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
2390: 7b 20 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a 20  { return x; }.. 
23a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
23c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2400: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2410: 72 69 76 61 74 65 20 54 32 20 79 3b 0d 0a 20 20  rivate T2 y;..  
2420: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2430: 20 54 32 20 59 0d 0a 20 20 20 20 20 20 20 20 20   T2 Y..         
2440: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2450: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
2460: 72 6e 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rn y; }..       
2470: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2480: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2490: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
24b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
24c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2500: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2510: 69 6f 6e 20 54 72 61 63 65 4f 70 73 20 43 6c 61  ion TraceOps Cla
2520: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
2530: 61 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73  ate static class
2540: 20 54 72 61 63 65 4f 70 73 0d 0a 20 20 20 20 20   TraceOps..     
2550: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2560: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
2570: 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  e Constants..   
2580: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2590: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
25a0: 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74  faultDebugFormat
25b0: 20 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20   = "#{0} @ {1}: 
25c0: 7b 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  {2}";..         
25d0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
25e0: 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54   string DefaultT
25f0: 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b  raceFormat = "#{
2600: 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d  0} @ {1}: {2}";.
2610: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2620: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2630: 69 6e 67 20 49 73 6f 38 36 30 31 44 61 74 65 54  ing Iso8601DateT
2640: 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 20  imeOutputFormat 
2650: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2660: 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64 64 54 48     "yyyy.MM.ddTH
2670: 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66 66 66 22  H:mm:ss.fffffff"
2680: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
2690: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
26a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
26b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2700: 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
2710: 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  ic Data..       
2720: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2730: 74 69 63 20 6f 62 6a 65 63 74 20 73 79 6e 63 52  tic object syncR
2740: 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  oot = new object
2750: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
2760: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2770: 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75 67 49 64  long nextDebugId
2780: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2790: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f  rivate static lo
27a0: 6e 67 20 6e 65 78 74 54 72 61 63 65 49 64 3b 0d  ng nextTraceId;.
27b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
27c0: 76 61 74 65 20 73 74 61 74 69 63 20 49 4c 69 73  vate static ILis
27d0: 74 3c 54 72 61 63 65 4c 69 73 74 65 6e 65 72 3e  t<TraceListener>
27e0: 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 3b   debugListeners;
27f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2800: 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61  ivate static Tra
2810: 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67  cePriority debug
2820: 50 72 69 6f 72 69 74 79 20 3d 20 54 72 61 63 65  Priority = Trace
2830: 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74  Priority.Default
2840: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2850: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72  rivate static Tr
2860: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
2870: 65 50 72 69 6f 72 69 74 79 20 3d 20 54 72 61 63  ePriority = Trac
2880: 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c  ePriority.Defaul
2890: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
28a0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
28b0: 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61  tring debugForma
28c0: 74 20 3d 20 44 65 66 61 75 6c 74 44 65 62 75 67  t = DefaultDebug
28d0: 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
28e0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
28f0: 74 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65  tic string trace
2900: 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74  Format = Default
2910: 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  TraceFormat;..  
2920: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2930: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2940: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2980: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2990: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
29a0: 75 62 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f  ublic Static Pro
29b0: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
29c0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
29d0: 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
29e0: 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a   DebugPriority..
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2a10: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2a20: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65  oot) { return de
2a30: 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 20 7d  bugPriority; } }
2a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a50: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    set { lock (sy
2a60: 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67 50  ncRoot) { debugP
2a70: 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b  riority = value;
2a80: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2a90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2aa0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2af0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
2b00: 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  tic TracePriorit
2b10: 79 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d  y TracePriority.
2b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b40: 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  get { lock (sync
2b50: 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74  Root) { return t
2b60: 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 20  racePriority; } 
2b70: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2b80: 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73     set { lock (s
2b90: 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63 65  yncRoot) { trace
2ba0: 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65  Priority = value
2bb0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
2bc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2bd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2c20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2c30: 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75  atic string Debu
2c40: 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20  gFormat..       
2c50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c60: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f          get { lo
2c70: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
2c80: 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72 6d  return debugForm
2c90: 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  at; } }..       
2ca0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
2cb0: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
2cc0: 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76   debugFormat = v
2cd0: 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  alue; } }..     
2ce0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2cf0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2d40: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2d50: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
2d60: 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20  TraceFormat..   
2d70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
2d90: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
2da0: 29 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  ) { return trace
2db0: 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20  Format; } }..   
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2dd0: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
2de0: 74 29 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74  t) { traceFormat
2df0: 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20   = value; } }.. 
2e00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2e10: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2e20: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2e30: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e80: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
2e90: 6e 74 65 72 61 63 74 69 76 65 20 53 75 70 70 6f  nteractive Suppo
2ea0: 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  rt Methods..    
2eb0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
2ec0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
2ed0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
2ee0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
2ef0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 44 69  public static Di
2f00: 61 6c 6f 67 52 65 73 75 6c 74 20 53 68 6f 77 4d  alogResult ShowM
2f10: 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  essage(..       
2f20: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
2f30: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
2f40: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
2f50: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
2f60: 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
2f70: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
2f80: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
2f90: 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
2fa0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fb0: 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
2fc0: 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
2fd0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
2fe0: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
2ff0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
3000: 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20 20 20 20  ategory,..      
3010: 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
3020: 65 42 6f 78 42 75 74 74 6f 6e 73 20 62 75 74 74  eBoxButtons butt
3030: 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ons,..          
3040: 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
3050: 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20 20 20 20  Icon icon..     
3060: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
3070: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 61               Dia
3090: 6c 6f 67 52 65 73 75 6c 74 20 72 65 73 75 6c 74  logResult result
30a0: 20 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e   = DialogResult.
30b0: 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  OK;....         
30c0: 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54         DebugAndT
30d0: 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69  race(tracePriori
30e0: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
30f0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
3100: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
3110: 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67 65 2c 20  lback, message, 
3120: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  category);....  
3130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3140: 20 28 53 79 73 74 65 6d 49 6e 66 6f 72 6d 61 74   (SystemInformat
3150: 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72 61 63 74  ion.UserInteract
3160: 69 76 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ive)..          
3170: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
3190: 69 6e 67 20 74 69 74 6c 65 20 3d 20 47 65 74 41  ing title = GetA
31a0: 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73  ssemblyTitle(ass
31b0: 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  embly);....     
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
31d0: 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e 75 6c 6c  f (title == null
31e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31f0: 20 20 20 20 20 20 20 20 20 20 20 74 69 74 6c 65             title
3200: 20 3d 20 41 70 70 6c 69 63 61 74 69 6f 6e 2e 50   = Application.P
3210: 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a 0d 0a 20  roductName;.... 
3220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3230: 20 20 20 72 65 73 75 6c 74 20 3d 20 4d 65 73 73     result = Mess
3240: 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d 65 73 73  ageBox.Show(mess
3250: 61 67 65 2c 20 74 69 74 6c 65 2c 20 62 75 74 74  age, title, butt
3260: 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a 0d 0a 20  ons, icon);.... 
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65     DebugAndTrace
3290: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d  (tracePriority,.
32a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32b0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
32c0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
32d0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
32e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
3300: 55 73 65 72 20 63 68 6f 69 63 65 20 6f 66 20 7b  User choice of {
3310: 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  0}.", ForDisplay
3320: 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20  (result)),..    
3330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3340: 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a      category);..
3350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3360: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
3370: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
3380: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3390: 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67             Debug
33a0: 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72  AndTrace(tracePr
33b0: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
33d0: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
33e0: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
33f0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
3400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
3410: 44 65 66 61 75 6c 74 20 63 68 6f 69 63 65 20 6f  Default choice o
3420: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
3430: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3450: 20 20 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d     category);...
3460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3470: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
3480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3490: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
34a0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
34b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
34c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3500: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
3510: 20 54 72 61 63 69 6e 67 20 53 75 70 70 6f 72 74   Tracing Support
3520: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
3530: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3540: 74 69 63 20 76 6f 69 64 20 53 65 74 75 70 44 65  tic void SetupDe
3550: 62 75 67 4c 69 73 74 65 6e 65 72 73 28 29 0d 0a  bugListeners()..
3560: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3580: 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65 72  f (debugListener
3590: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b0: 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20 3d  debugListeners =
35c0: 20 6e 65 77 20 4c 69 73 74 3c 54 72 61 63 65 4c   new List<TraceL
35d0: 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a 0d 0a 20  istener>();.... 
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
35f0: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 2e 41 64  ebugListeners.Ad
3600: 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61  d(new ConsoleTra
3610: 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a  ceListener());..
3620: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
3630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3680: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3690: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c 6f  public static lo
36a0: 6e 67 20 4e 65 78 74 44 65 62 75 67 49 64 28 29  ng NextDebugId()
36b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36d0: 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63   return Interloc
36e0: 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65  ked.Increment(re
36f0: 66 20 6e 65 78 74 44 65 62 75 67 49 64 29 3b 0d  f nextDebugId);.
3700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3760: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3770: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c   public static l
3780: 6f 6e 67 20 4e 65 78 74 54 72 61 63 65 49 64 28  ong NextTraceId(
3790: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
37a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37b0: 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f    return Interlo
37c0: 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72  cked.Increment(r
37d0: 65 66 20 6e 65 78 74 54 72 61 63 65 49 64 29 3b  ef nextTraceId);
37e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
37f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3840: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3850: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3860: 73 74 72 69 6e 67 20 54 69 6d 65 53 74 61 6d 70  string TimeStamp
3870: 28 44 61 74 65 54 69 6d 65 20 64 61 74 65 54 69  (DateTime dateTi
3880: 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me)..           
3890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
38a0: 20 20 20 20 72 65 74 75 72 6e 20 64 61 74 65 54      return dateT
38b0: 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28 49 73 6f  ime.ToString(Iso
38c0: 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70  8601DateTimeOutp
38d0: 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20 20 20 20  utFormat);..    
38e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
38f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
3900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3940: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
3950: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
3960: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
3970: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
3980: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
3990: 69 63 20 73 74 72 69 6e 67 20 47 65 74 4d 65 74  ic string GetMet
39a0: 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  hodName(..      
39b0: 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b 54            StackT
39c0: 72 61 63 65 20 73 74 61 63 6b 54 72 61 63 65 2c  race stackTrace,
39d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
39e0: 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a 20 20 20    int level..   
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3a20: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
3a30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3a40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a60: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61     // NOTE: If a
3a70: 20 76 61 6c 69 64 20 73 74 61 63 6b 20 74 72 61   valid stack tra
3a80: 63 65 20 77 61 73 20 6e 6f 74 20 73 75 70 70 6c  ce was not suppl
3a90: 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ied by the..    
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ab0: 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2c  //       caller,
3ac0: 20 63 72 65 61 74 65 20 6f 6e 65 20 6e 6f 77 20   create one now 
3ad0: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 75 72  based on the cur
3ae0: 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rent..          
3af0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3b00: 20 20 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61     execution sta
3b10: 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck...           
3b20: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b40: 20 69 66 20 28 73 74 61 63 6b 54 72 61 63 65 20   if (stackTrace 
3b50: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3b80: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ba0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
3bb0: 61 62 20 74 68 65 20 63 75 72 72 65 6e 74 20 65  ab the current e
3bc0: 78 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d  xecution stack..
3bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3be0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 20 73 74 61 63 6b 54 72 61 63 65 20       stackTrace 
3c10: 3d 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  = new StackTrace
3c20: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3c40: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3c50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
3c60: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
3c70: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
3c80: 77 68 65 6e 20 77 65 20 63 61 70 74 75 72 65 0d  when we capture.
3c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3ca0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3cb0: 20 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63    the stack trac
3cc0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cf0: 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b          level++;
3d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d10: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3d30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3d40: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3d50: 47 65 74 20 74 68 65 20 73 70 65 63 69 66 69 65  Get the specifie
3d60: 64 20 73 74 61 63 6b 20 66 72 61 6d 65 20 28 61  d stack frame (a
3d70: 6c 77 61 79 73 20 61 64 64 20 6f 6e 65 20 74 6f  lways add one to
3d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d90: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
3da0: 6b 69 70 20 74 68 69 73 20 6d 65 74 68 6f 64 29  kip this method)
3db0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3dc0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
3de0: 74 61 63 6b 46 72 61 6d 65 20 73 74 61 63 6b 46  tackFrame stackF
3df0: 72 61 6d 65 20 3d 20 73 74 61 63 6b 54 72 61 63  rame = stackTrac
3e00: 65 2e 47 65 74 46 72 61 6d 65 28 6c 65 76 65 6c  e.GetFrame(level
3e10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
3e20: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e40: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74    // NOTE: Get t
3e50: 68 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  he method for th
3e60: 65 20 73 74 61 63 6b 20 66 72 61 6d 65 2e 0d 0a  e stack frame...
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e80: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 74 68              Meth
3ea0: 6f 64 42 61 73 65 20 6d 65 74 68 6f 64 42 61 73  odBase methodBas
3eb0: 65 20 3d 20 73 74 61 63 6b 46 72 61 6d 65 2e 47  e = stackFrame.G
3ec0: 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a 0d 0a 20  etMethod();.... 
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ee0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3ef0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
3f00: 54 45 3a 20 47 65 74 20 74 68 65 20 74 79 70 65  TE: Get the type
3f10: 20 66 6f 72 20 74 68 65 20 6d 65 74 68 6f 64 2e   for the method.
3f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3f30: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 79                Ty
3f50: 70 65 20 74 79 70 65 20 3d 20 6d 65 74 68 6f 64  pe type = method
3f60: 42 61 73 65 2e 44 65 63 6c 61 72 69 6e 67 54 79  Base.DeclaringTy
3f70: 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  pe;....         
3f80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fa0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20     // NOTE: Get 
3fb0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
3fc0: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3ff0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
4000: 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 4e 61   = methodBase.Na
4010: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
4020: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4040: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75     // NOTE: Retu
4050: 72 6e 20 74 68 65 20 70 72 6f 70 65 72 6c 79 20  rn the properly 
4060: 66 6f 72 6d 61 74 74 65 64 20 72 65 73 75 6c 74  formatted result
4070: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4080: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
40a0: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
40b0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
40d0: 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79 70 65 2e  0}{1}{2}", type.
40e0: 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65 6c 69 6d  Name, Type.Delim
40f0: 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20  iter, name);..  
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4120: 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
4130: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4150: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4170: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4180: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
4190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
41a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
41b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4200: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
4210: 76 6f 69 64 20 44 65 62 75 67 43 6f 72 65 28 0d  void DebugCore(.
4220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4230: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
4240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4250: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
4260: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
4270: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
4280: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4290: 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
42a0: 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  oot)..          
42b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
42d0: 28 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20  (debugListeners 
42e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4310: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
4320: 20 28 54 72 61 63 65 4c 69 73 74 65 6e 65 72 20   (TraceListener 
4330: 6c 69 73 74 65 6e 65 72 20 69 6e 20 64 65 62 75  listener in debu
4340: 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a 20 20 20  gListeners)..   
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 20 20 20 6c 69 73 74 65 6e 65 72 2e 57 72 69      listener.Wri
4390: 74 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20  teLine(message, 
43a0: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  category);..    
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43c0: 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72          listener
43d0: 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20  .Flush();..     
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4400: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4420: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
4440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4480: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4490: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
44a0: 69 64 20 54 72 61 63 65 43 6f 72 65 28 0d 0a 20  id TraceCore(.. 
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
44c0: 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
44f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4500: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4510: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4520: 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f     lock (syncRoo
4530: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
4540: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4550: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4570: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 72 69 74     // NOTE: Writ
4580: 65 20 74 68 65 20 6d 65 73 73 61 67 65 20 74 6f  e the message to
4590: 20 61 6c 6c 20 74 68 65 20 61 63 74 69 76 65 20   all the active 
45a0: 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
45b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
45c0: 20 20 20 20 6c 69 73 74 65 6e 65 72 73 2e 0d 0a      listeners...
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45e0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4600: 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73  e.WriteLine(mess
4610: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
4620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4630: 20 20 20 20 20 54 72 61 63 65 2e 46 6c 75 73 68       Trace.Flush
4640: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4650: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4660: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4670: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
46c0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
46d0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
46e0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
46f0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
4700: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
4710: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
4720: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4730: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4740: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4750: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4760: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4770: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4790: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
47a0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
47c0: 78 63 65 70 74 69 6f 6e 20 65 78 63 65 70 74 69  xception excepti
47d0: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
47e0: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
47f0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
4800: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4810: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4820: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 63 65          if (exce
4830: 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ption != null)..
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4850: 20 20 20 20 72 65 74 75 72 6e 20 44 65 62 75 67      return Debug
4860: 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72  AndTrace(tracePr
4870: 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c  iority, debugCal
4880: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48a0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e  traceCallback, n
48b0: 65 77 20 53 74 61 63 6b 54 72 61 63 65 28 65 78  ew StackTrace(ex
48c0: 63 65 70 74 69 6f 6e 2c 20 74 72 75 65 29 2c 20  ception, true), 
48d0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 63 65              exce
48f0: 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29  ption.ToString()
4900: 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  , category);....
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4920: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
4930: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
4940: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
49a0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
49b0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
49c0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
49d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
49e0: 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  tic string Debug
49f0: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
4a00: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
4a10: 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
4a20: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
4a30: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
4a40: 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
4a50: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
4a60: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
4a70: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
4a80: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
4a90: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
4aa0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
4ab0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
4ac0: 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
4ad0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4ae0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4af0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4b00: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b20: 20 20 20 20 74 72 61 63 65 50 72 69 6f 72 69 74      tracePriorit
4b30: 79 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  y, debugCallback
4b40: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
4b50: 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20 20 20 20   null, 1,..     
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
4b70: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
4b80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4b90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4ba0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4be0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4bf0: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
4c00: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
4c10: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
4c30: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
4c40: 67 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  g DebugAndTrace(
4c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c60: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
4c70: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c90: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
4ca0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4cc0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
4cd0: 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63              Stac
4cf0: 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63  kTrace stackTrac
4d00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4d10: 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 2c 0d 0a      int level,..
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d30: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
4d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d50: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
4d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d70: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
4d80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4d90: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4da0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4db0: 20 41 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69   Always skip thi
4dc0: 73 20 63 61 6c 6c 20 66 72 61 6d 65 20 69 66 20  s call frame if 
4dd0: 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20  the stack trace 
4de0: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
4df0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6f 69      //       goi
4e00: 6e 67 20 74 6f 20 62 65 20 63 61 70 74 75 72 65  ng to be capture
4e10: 64 20 62 79 20 47 65 74 4d 65 74 68 6f 64 4e 61  d by GetMethodNa
4e20: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me...           
4e30: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4e40: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61           if (sta
4e50: 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29  ckTrace == null)
4e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4e70: 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a        level++;..
4e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4e90: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4ea0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
4eb0: 6f 72 6d 61 74 20 74 68 65 20 6d 65 73 73 61 67  ormat the messag
4ec0: 65 20 66 6f 72 20 64 69 73 70 6c 61 79 20 28 6f  e for display (o
4ed0: 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  nce)...         
4ee0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4ef0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4f00: 67 20 66 6f 72 6d 61 74 74 65 64 20 3d 20 53 74  g formatted = St
4f10: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
4f20: 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
4f40: 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74 61 63 6b  MethodName(stack
4f50: 54 72 61 63 65 2c 20 6c 65 76 65 6c 29 2c 20 6d  Trace, level), m
4f60: 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20  essage);....    
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f90: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
4fa0: 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 69  debug callback i
4fb0: 73 20 69 6e 76 61 6c 69 64 20 6f 72 20 74 68 65  s invalid or the
4fc0: 20 74 72 61 63 65 20 70 72 69 6f 72 69 74 79 0d   trace priority.
4fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4fe0: 20 2f 2f 20 20 20 20 20 20 20 6f 66 20 74 68 69   //       of thi
4ff0: 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73  s message is les
5000: 73 20 74 68 61 6e 20 77 68 61 74 20 77 65 20 63  s than what we c
5010: 75 72 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f  urrently want to
5020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5030: 20 20 2f 2f 20 20 20 20 20 20 20 64 65 62 75 67    //       debug
5040: 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20 20  , skip it...    
5050: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
5060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5070: 69 66 20 28 28 64 65 62 75 67 43 61 6c 6c 62 61  if ((debugCallba
5080: 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ck != null) &&..
5090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50a0: 20 20 20 20 28 74 72 61 63 65 50 72 69 6f 72 69      (tracePriori
50b0: 74 79 20 3e 3d 20 44 65 62 75 67 50 72 69 6f 72  ty >= DebugPrior
50c0: 69 74 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ity))..         
50d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
50f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5100: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
5110: 6e 76 6f 6b 65 20 74 68 65 20 64 65 62 75 67 20  nvoke the debug 
5120: 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68  callback with th
5130: 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20 20  e formatted..   
5140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5150: 20 2f 2f 20 20 20 20 20 20 20 6d 65 73 73 61 67   //       messag
5160: 65 20 61 6e 64 20 74 68 65 20 63 61 74 65 67 6f  e and the catego
5170: 72 79 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ry specified by 
5180: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
5190: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
51a0: 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20    caller...     
51b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
51c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
51d0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
51e0: 62 61 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c 20  back(formatted, 
51f0: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  category);..    
5200: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5220: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5230: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
5240: 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
5250: 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f  ack is invalid o
5260: 72 20 74 68 65 20 74 72 61 63 65 20 70 72 69 6f  r the trace prio
5270: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
5280: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
5290: 66 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69  f this message i
52a0: 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74  s less than what
52b0: 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61   we currently wa
52c0: 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  nt to..         
52d0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
52e0: 74 72 61 63 65 2c 20 73 6b 69 70 20 69 74 2e 0d  trace, skip it..
52f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5300: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5310: 20 20 20 20 20 69 66 20 28 28 74 72 61 63 65 43       if ((traceC
5320: 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29  allback != null)
5330: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
5340: 20 20 20 20 20 20 20 20 20 28 74 72 61 63 65 50           (traceP
5350: 72 69 6f 72 69 74 79 20 3e 3d 20 54 72 61 63 65  riority >= Trace
5360: 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20  Priority))..    
5370: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5390: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
53a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
53b0: 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 74  TE: Invoke the t
53c0: 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 77 69  race callback wi
53d0: 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64  th the formatted
53e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
53f0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
5400: 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20 63  essage and the c
5410: 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69 65  ategory specifie
5420: 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
5430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5440: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a         caller...
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5460: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5470: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
5480: 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74  eCallback(format
5490: 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ted, category);.
54a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
54b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
54c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 65 73        return mes
54d0: 73 61 67 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  sage;..         
54e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
54f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
5500: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5510: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
5520: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5570: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
5580: 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 43  n MockRegistry C
5590: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
55a0: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
55b0: 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20  ss MockRegistry 
55c0: 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20  : IDisposable.. 
55d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
55e0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
55f0: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
5600: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
5610: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
5620: 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry()..          
5630: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5640: 20 20 20 20 20 77 68 61 74 49 66 20 3d 20 74 72       whatIf = tr
5650: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
5660: 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20       readOnly = 
5670: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
5680: 20 20 20 20 20 20 20 73 61 66 65 20 3d 20 74 72         safe = tr
5690: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
56a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
56b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5700: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
5710: 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
5720: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
5730: 77 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  whatIf..        
5740: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
5750: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
5760: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s()..           
5770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5780: 20 20 20 20 74 68 69 73 2e 77 68 61 74 49 66 20      this.whatIf 
5790: 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  = whatIf;..     
57a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
57b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
57c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5800: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5810: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d  c MockRegistry(.
5820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5830: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
5840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
5850: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20  ool readOnly..  
5860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
5870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5880: 20 3a 20 74 68 69 73 28 77 68 61 74 49 66 29 0d   : this(whatIf).
5890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
58a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58b0: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20  this.readOnly = 
58c0: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
58d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
58e0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
58f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5930: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5940: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d  c MockRegistry(.
5950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5960: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
5980: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20  ool readOnly,.. 
5990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
59a0: 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20  ool safe..      
59b0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
59d0: 68 69 73 28 77 68 61 74 49 66 2c 20 72 65 61 64  his(whatIf, read
59e0: 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
59f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5a00: 20 20 20 20 20 20 74 68 69 73 2e 73 61 66 65 20        this.safe 
5a10: 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  = safe;..       
5a20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5a30: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
5a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
5a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
5aa0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
5ab0: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
5ac0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
5ad0: 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20  bool whatIf;..  
5ae0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5af0: 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20   bool WhatIf..  
5b00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
5b20: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
5b30: 28 29 3b 20 72 65 74 75 72 6e 20 77 68 61 74 49  (); return whatI
5b40: 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  f; }..          
5b50: 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65 63        set { Chec
5b60: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 77 68 61  kDisposed(); wha
5b70: 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  tIf = value; }..
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5be0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5bf0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61  private bool rea
5c00: 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  dOnly;..        
5c10: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
5c20: 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20  ReadOnly..      
5c30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5c40: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
5c50: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5c60: 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b  return readOnly;
5c70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5c80: 20 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44      set { CheckD
5c90: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 61 64 4f  isposed(); readO
5ca0: 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  nly = value; }..
5cb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5d20: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 73 61 66  private bool saf
5d30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
5d40: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65  public bool Safe
5d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5d70: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
5d80: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73  osed(); return s
5d90: 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  afe; }..        
5da0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68          set { Ch
5db0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 73  eckDisposed(); s
5dc0: 61 66 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  afe = value; }..
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5e40: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
5e50: 73 74 72 79 4b 65 79 20 63 6c 61 73 73 65 73 52  stryKey classesR
5e60: 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  oot;..          
5e70: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
5e80: 69 73 74 72 79 4b 65 79 20 43 6c 61 73 73 65 73  istryKey Classes
5e90: 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20  Root..          
5ea0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5eb0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
5ec0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ee0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5ef0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5f00: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6c 61           if (cla
5f10: 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e 75 6c 6c  ssesRoot == null
5f20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5f30: 20 20 20 20 20 20 20 20 20 20 20 63 6c 61 73 73             class
5f40: 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20 4d 6f 63  esRoot = new Moc
5f50: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
5f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f70: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
5f80: 74 72 79 2e 43 6c 61 73 73 65 73 52 6f 6f 74 2c  try.ClassesRoot,
5f90: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
5fa0: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fc0: 20 72 65 74 75 72 6e 20 63 6c 61 73 73 65 73 52   return classesR
5fd0: 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  oot;..          
5fe0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5ff0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6000: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6050: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6060: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6070: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d   currentConfig;.
6080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6090: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
60a0: 4b 65 79 20 43 75 72 72 65 6e 74 43 6f 6e 66 69  Key CurrentConfi
60b0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
60c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60d0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
60e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6100: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6120: 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e        if (curren
6130: 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75 6c 6c 29  tConfig == null)
6140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6150: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e            curren
6160: 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77 20 4d 6f  tConfig = new Mo
6170: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6190: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
61a0: 73 74 72 79 2e 43 75 72 72 65 6e 74 43 6f 6e 66  stry.CurrentConf
61b0: 69 67 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ig, whatIf, read
61c0: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61e0: 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65      return curre
61f0: 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20  ntConfig;..     
6200: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6210: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6220: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6280: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
6290: 72 79 4b 65 79 20 63 75 72 72 65 6e 74 55 73 65  ryKey currentUse
62a0: 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
62b0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
62c0: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 55 73  tryKey CurrentUs
62d0: 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
62e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
62f0: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
6300: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
6320: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
6330: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6340: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65         if (curre
6350: 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d  ntUser == null).
6360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6370: 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74           current
6380: 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  User = new MockR
6390: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
63a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63b0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
63c0: 79 2e 43 75 72 72 65 6e 74 55 73 65 72 2c 20 77  y.CurrentUser, w
63d0: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
63e0: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6400: 65 74 75 72 6e 20 63 75 72 72 65 6e 74 55 73 65  eturn currentUse
6410: 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
6420: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6430: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6440: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6490: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
64a0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
64b0: 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20  ynData;..       
64c0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
64d0: 52 65 67 69 73 74 72 79 4b 65 79 20 44 79 6e 44  RegistryKey DynD
64e0: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
64f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6500: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6510: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6530: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6550: 20 20 20 20 20 20 20 20 69 66 20 28 64 79 6e 44          if (dynD
6560: 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ata == null)..  
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6580: 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20        dynData = 
6590: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
65a0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65c0: 20 20 52 65 67 69 73 74 72 79 2e 44 79 6e 44 61    Registry.DynDa
65d0: 74 61 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ta, whatIf, read
65e0: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6600: 20 20 20 20 72 65 74 75 72 6e 20 64 79 6e 44 61      return dynDa
6610: 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta;..           
6620: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6640: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6680: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6690: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
66a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
66b0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20  localMachine;.. 
66c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
66d0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
66e0: 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 0d 0a  y LocalMachine..
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
6710: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
6720: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6730: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
6740: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6760: 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68     if (localMach
6770: 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ine == null)..  
6780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6790: 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69        localMachi
67a0: 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ne = new MockReg
67b0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
67c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67d0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
67e0: 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 20 77 68  LocalMachine, wh
67f0: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6800: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
6810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6820: 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63 68 69 6e  turn localMachin
6830: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6840: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6850: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6860: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
68b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
68c0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 70  ockRegistryKey p
68d0: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d  erformanceData;.
68e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
68f0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
6900: 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e 63 65 44  Key PerformanceD
6910: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
6920: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6930: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6940: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6960: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6970: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6980: 20 20 20 20 20 20 20 20 69 66 20 28 70 65 72 66          if (perf
6990: 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 3d 20 6e  ormanceData == n
69a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65                pe
69c0: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20  rformanceData = 
69d0: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
69e0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a00: 20 20 52 65 67 69 73 74 72 79 2e 50 65 72 66 6f    Registry.Perfo
6a10: 72 6d 61 6e 63 65 44 61 74 61 2c 20 77 68 61 74  rmanceData, what
6a20: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
6a30: 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fe);....        
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6a50: 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  rn performanceDa
6a60: 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta;..           
6a70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6a80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6a90: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6ae0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
6af0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
6b00: 75 73 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20  users;..        
6b10: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
6b20: 65 67 69 73 74 72 79 4b 65 79 20 55 73 65 72 73  egistryKey Users
6b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6b50: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
6b60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
6b80: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
6b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ba0: 20 20 20 20 20 69 66 20 28 75 73 65 72 73 20 3d       if (users =
6bb0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bd0: 20 75 73 65 72 73 20 3d 20 6e 65 77 20 4d 6f 63   users = new Moc
6be0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
6bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c00: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
6c10: 74 72 79 2e 55 73 65 72 73 2c 20 77 68 61 74 49  try.Users, whatI
6c20: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
6c30: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
6c40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6c50: 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20 20  n users;..      
6c60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6c70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6c80: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
6c90: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
6ca0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ce0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6cf0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
6d00: 6c 69 63 20 22 52 65 67 69 73 74 72 79 22 20 4d  lic "Registry" M
6d10: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
6d20: 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63      public objec
6d30: 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  t GetValue(..   
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
6d50: 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20  ing keyName,..  
6d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
6d70: 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d  ring valueName,.
6d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6d90: 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56   object defaultV
6da0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
6db0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
6dc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6dd0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
6de0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6e00: 72 6e 20 52 65 67 69 73 74 72 79 2e 47 65 74 56  rn Registry.GetV
6e10: 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61  alue(keyName, va
6e20: 6c 75 65 4e 61 6d 65 2c 20 64 65 66 61 75 6c 74  lueName, default
6e30: 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  Value);..       
6e40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6e50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6ea0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6eb0: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a  void SetValue(..
6ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ed0: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
6ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ef0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
6f00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6f10: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
6f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6f30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
6f40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6f50: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6f60: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
6f70: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
6f80: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
6f90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
6fa0: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6fc0: 73 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65  stry.SetValue(ke
6fd0: 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65  yName, valueName
6fe0: 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  , value);..     
6ff0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7000: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7050: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
7060: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
7070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7080: 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
7090: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
70a0: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e     string valueN
70b0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
70c0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
70d0: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
70e0: 20 20 20 20 20 52 65 67 69 73 74 72 79 56 61 6c       RegistryVal
70f0: 75 65 4b 69 6e 64 20 76 61 6c 75 65 4b 69 6e 64  ueKind valueKind
7100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7110: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
7120: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7130: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
7140: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
7150: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
7160: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
7170: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
7180: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
7190: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
71a0: 73 74 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65  stry.SetValue(ke
71b0: 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65  yName, valueName
71c0: 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75 65 4b 69  , value, valueKi
71d0: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd);..          
71e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
71f0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
7200: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
7260: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65  egion Private Me
7270: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
7280: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
7290: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d  CheckReadOnly().
72a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72c0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
72d0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20      // NOTE: In 
72e0: 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65  "read-only" mode
72f0: 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c  , we disallow al
7300: 6c 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d  l write access..
7310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7320: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
7330: 20 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e       if (!readOn
7340: 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
7350: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
7360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7370: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
7380: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
7390: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20  ception();..    
73a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
73b0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
73c0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
73d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
73e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7410: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7420: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
7430: 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e  posable "Pattern
7440: 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  " Members..     
7450: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
7460: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
7470: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7480: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73  te void CheckDis
7490: 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77  posed() /* throw
74a0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
74b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
74c0: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
74d0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
74e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
74f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7500: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
7510: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
7520: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
7530: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
7540: 66 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 29 2e  f(MockRegistry).
7550: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
7560: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7570: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
75c0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
75d0: 2f 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69 72  /* protected vir
75e0: 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73  tual */ void Dis
75f0: 70 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20  pose(..         
7600: 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70         bool disp
7610: 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  osing..         
7620: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
7630: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7640: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
7650: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
7660: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7680: 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
7690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
76c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76e0: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
7700: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
7710: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
7720: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7730: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7760: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7770: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
7780: 6c 61 73 73 65 73 52 6f 6f 74 20 21 3d 20 6e 75  lassesRoot != nu
7790: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 61 73              clas
77d0: 73 65 73 52 6f 6f 74 2e 43 6c 6f 73 65 28 29 3b  sesRoot.Close();
77e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
7800: 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 75 6c 6c  assesRoot = null
7810: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7820: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7840: 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72          if (curr
7850: 65 6e 74 43 6f 6e 66 69 67 20 21 3d 20 6e 75 6c  entConfig != nul
7860: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7870: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7890: 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65             curre
78a0: 6e 74 43 6f 6e 66 69 67 2e 43 6c 6f 73 65 28 29  ntConfig.Close()
78b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
78d0: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e  urrentConfig = n
78e0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7900: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7910: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
7920: 75 72 72 65 6e 74 55 73 65 72 20 21 3d 20 6e 75  urrentUser != nu
7930: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7960: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72              curr
7970: 65 6e 74 55 73 65 72 2e 43 6c 6f 73 65 28 29 3b  entUser.Close();
7980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
79a0: 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 75 6c 6c  rrentUser = null
79b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
79c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79e0: 20 20 20 20 20 20 20 20 69 66 20 28 64 79 6e 44          if (dynD
79f0: 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ata != null)..  
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a30: 20 20 20 20 20 64 79 6e 44 61 74 61 2e 43 6c 6f       dynData.Clo
7a40: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a60: 20 20 20 64 79 6e 44 61 74 61 20 3d 20 6e 75 6c     dynData = nul
7a70: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7aa0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63           if (loc
7ab0: 61 6c 4d 61 63 68 69 6e 65 20 21 3d 20 6e 75 6c  alMachine != nul
7ac0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7af0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c             local
7b00: 4d 61 63 68 69 6e 65 2e 43 6c 6f 73 65 28 29 3b  Machine.Close();
7b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
7b30: 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20 6e 75 6c  calMachine = nul
7b40: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b70: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 65 72           if (per
7b80: 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 21 3d 20  formanceData != 
7b90: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65                pe
7bd0: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2e 43 6c  rformanceData.Cl
7be0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c00: 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44      performanceD
7c10: 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ata = null;..   
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 20 20 69 66 20 28 75 73 65 72 73 20 21 3d 20 6e    if (users != n
7c60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65               use
7ca0: 72 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  rs.Close();..   
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cc0: 20 20 20 20 20 20 20 20 20 75 73 65 72 73 20 3d           users =
7cd0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
7d00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d40: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72              // r
7d60: 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64  elease unmanaged
7d70: 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
7d80: 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7d90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7dd0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7df0: 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f 62 6a 65   NOTE: This obje
7e00: 63 74 20 69 73 20 6e 6f 77 20 64 69 73 70 6f 73  ct is now dispos
7e10: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
7e20: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65   disposed = true
7e50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7e60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
7e70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7e80: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
7e90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
7ef0: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
7f00: 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
7f10: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
7f20: 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20  id Dispose()..  
7f30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
7f50: 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20  pose(true);..   
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 47 43 2e               GC.
7f70: 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65  SuppressFinalize
7f80: 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20  (this);..       
7f90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7fa0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8000: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8010: 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63   #region Destruc
8020: 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tor..           
8030: 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 29   ~MockRegistry()
8040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8060: 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
8070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
8090: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
80a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
80b0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
80c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
80d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8110: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63       #region Moc
8120: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61  kRegistryKey Cla
8130: 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  ss..        inte
8140: 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73  rnal sealed clas
8150: 73 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  s MockRegistryKe
8160: 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d  y : IDisposable.
8170: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8180: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
8190: 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63  Private Construc
81a0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
81b0: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
81c0: 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20 20  gistryKey()..   
81d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
81f0: 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  If = true;..    
8200: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64              read
8210: 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Only = true;..  
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
8230: 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  fe = true;..    
8240: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8250: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
8260: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
8270: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
82c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
82d0: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
82e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
82f0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
8300: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
8310: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8320: 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  y key..         
8330: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8340: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
8350: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
8360: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8370: 20 20 20 74 68 69 73 2e 6b 65 79 20 3d 20 6b 65     this.key = ke
8380: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
8390: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
83a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
83b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
83f0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8400: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8420: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8440: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
8450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8460: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8470: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 29       : this(key)
8480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
84a0: 20 74 68 69 73 2e 73 75 62 4b 65 79 4e 61 6d 65   this.subKeyName
84b0: 20 3d 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a   = subKeyName;..
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
84d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
84e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8530: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8540: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8550: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8560: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
8570: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
8580: 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
85a0: 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20  ool whatIf..    
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
85d0: 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65   this(key, subKe
85e0: 79 4e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  yName)..        
85f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8600: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
8610: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
8620: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8630: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
8690: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
86a0: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
86b0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
86c0: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
86d0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
86e0: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8700: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
8710: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8720: 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20  readOnly..      
8730: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
8750: 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e  his(key, subKeyN
8760: 61 6d 65 2c 20 77 68 61 74 49 66 29 0d 0a 20 20  ame, whatIf)..  
8770: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
8790: 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20 72 65 61  s.readOnly = rea
87a0: 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  dOnly;..        
87b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
87c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
87d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8800: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8810: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8820: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
8830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8840: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
8850: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8860: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
8870: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
8880: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
8890: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
88a0: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
88b0: 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
88c0: 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a       bool safe..
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
88f0: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73     : this(key, s
8900: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
8910: 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20  f, readOnly)..  
8920: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
8940: 73 2e 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a  s.safe = safe;..
8950: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
89c0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
89d0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
89e0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
89f0: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
8a00: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8a10: 77 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  whatIf..        
8a20: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8a30: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
8a40: 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61  s(key, null, wha
8a50: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
8a60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8a70: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
8a80: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
8a90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8aa0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ae0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8af0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
8b00: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8b20: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b40: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8b60: 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol readOnly..   
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b90: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
8ba0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
8bb0: 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
8bc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8bd0: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
8be0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
8bf0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8c00: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8c50: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8c60: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8c80: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
8ca0: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8cc0: 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20  l readOnly,..   
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8ce0: 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20  l safe..        
8cf0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8d00: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
8d10: 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61  s(key, null, wha
8d20: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
8d30: 61 66 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  afe)..          
8d40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8d50: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
8d60: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
8d70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8d80: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
8d90: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
8df0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68  gion Public Meth
8e00: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
8e10: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 43 6c 6f   public void Clo
8e20: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se()..          
8e30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8e40: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
8e50: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
8e60: 3a 20 4e 6f 20 64 69 73 70 6f 73 65 64 20 63 68  : No disposed ch
8e70: 65 63 6b 20 68 65 72 65 20 62 65 63 61 75 73 65  eck here because
8e80: 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65   calling this me
8e90: 74 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 20 20  thod..          
8ea0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
8eb0: 68 6f 75 6c 64 20 62 65 20 6a 75 73 74 20 6c 69  hould be just li
8ec0: 6b 65 20 63 61 6c 6c 69 6e 67 20 44 69 73 70 6f  ke calling Dispo
8ed0: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se...           
8ee0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
8ef0: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
8f00: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
8f10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8f20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8f70: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8f80: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
8f90: 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20  CreateSubKey(.. 
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8fb0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
8fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8fd0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8fe0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8ff0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
9000: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
9010: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
9020: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
9030: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
9040: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9060: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
9070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9080: 69 66 20 28 77 68 61 74 49 66 29 0d 0a 20 20 20  if (whatIf)..   
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90b0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
90c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48              // H
90d0: 41 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  ACK: Attempt to 
90e0: 6f 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69  open the specifi
90f0: 65 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 20  ed sub-key.  If 
9100: 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  this..          
9110: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
9120: 20 20 20 66 61 69 6c 73 2c 20 77 65 20 77 69 6c     fails, we wil
9130: 6c 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 20  l simply return 
9140: 74 68 65 20 77 72 61 70 70 65 64 20 72 6f 6f 74  the wrapped root
9150: 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
9160: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
9170: 20 20 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20     itself since 
9180: 6e 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c  no writes are al
9190: 6c 6f 77 65 64 20 69 6e 20 27 77 68 61 74 2d 69  lowed in 'what-i
91a0: 66 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f'..            
91b0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
91c0: 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20   mode anyhow... 
91d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91e0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
91f0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
9200: 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
9210: 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73  key.OpenSubKey(s
9220: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
9230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9240: 20 20 20 72 65 74 75 72 6e 20 28 73 75 62 4b 65     return (subKe
9250: 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20  y != null) ?..  
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9270: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
9280: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
92b0: 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ey, whatIf, read
92c0: 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 0d 0a 20  Only, safe) :.. 
92d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92e0: 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52         new MockR
92f0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
9320: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
9330: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
9340: 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
9350: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9360: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
9370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9380: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9390: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
93a0: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
93b0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
93d0: 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75  .CreateSubKey(su
93e0: 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49  bKeyName), whatI
93f0: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
9400: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
9410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9420: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9430: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9470: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9480: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
9490: 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79  oid DeleteSubKey
94a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
94b0: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
94c0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
94d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
94e0: 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20  wOnMissing..    
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9500: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
9520: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9540: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
9550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9560: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
9570: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9580: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9590: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
95a0: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
95b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
95c0: 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74         key.Delet
95d0: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
95e0: 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
95f0: 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ng);..          
9600: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9610: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9650: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9660: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
9670: 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  d DeleteSubKeyTr
9680: 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
9690: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
96a0: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
96b0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
96c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
96d0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
96e0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9700: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9720: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9740: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
9750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9760: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62     key.DeleteSub
9790: 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61  KeyTree(subKeyNa
97a0: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
97b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
97c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9800: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9810: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
9820: 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a  d DeleteValue(..
9830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9840: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
9860: 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
9870: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
9880: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
9890: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
98a0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
98b0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
98c0: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
98d0: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
98e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
98f0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9910: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
9920: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9930: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
9950: 79 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 6e 61  y.DeleteValue(na
9960: 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
9970: 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ng);..          
9980: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9990: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
99a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
99e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
99f0: 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e  ing[] GetSubKeyN
9a00: 61 6d 65 73 28 29 0d 0a 20 20 20 20 20 20 20 20  ames()..        
9a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9a20: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9a30: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
9a40: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
9a50: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a70: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
9a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9a90: 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53   return key.GetS
9aa0: 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20  ubKeyNames();.. 
9ab0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9b10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
9b20: 75 62 6c 69 63 20 6f 62 6a 65 63 74 20 47 65 74  ublic object Get
9b30: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
9b40: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
9b50: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
9b60: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66        object def
9b70: 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20  aultValue..     
9b80: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9b90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9bb0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9bd0: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
9be0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9bf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
9c00: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
9c10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65         return ke
9c20: 79 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c  y.GetValue(name,
9c30: 20 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d   defaultValue);.
9c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ca0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9cb0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
9cc0: 73 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b  stryKey OpenSubK
9cd0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
9ce0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
9cf0: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
9d00: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9d10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9d20: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9d30: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9d50: 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b 65 79 28  turn OpenSubKey(
9d60: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  subKeyName, fals
9d70: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
9d80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9d90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dd0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
9de0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
9df0: 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e  RegistryKey Open
9e00: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
9e10: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
9e20: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
9e40: 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20 20 20 20  l writable..    
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9e60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
9e80: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
9e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ea0: 20 20 69 66 20 28 77 72 69 74 61 62 6c 65 29 0d    if (writable).
9eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ec0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
9ed0: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
9ee0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
9ef0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
9f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9f10: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
9f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
9f30: 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
9f40: 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b  y = key.OpenSubK
9f50: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
9f60: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 4e           subKeyN
9f70: 61 6d 65 2c 20 77 68 61 74 49 66 20 3f 20 66 61  ame, whatIf ? fa
9f80: 6c 73 65 20 3a 20 77 72 69 74 61 62 6c 65 29 3b  lse : writable);
9f90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9fa0: 20 20 20 20 72 65 74 75 72 6e 20 28 73 75 62 4b      return (subK
9fb0: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20  ey != null) ?.. 
9fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fd0: 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73     new MockRegis
9fe0: 74 72 79 4b 65 79 28 73 75 62 4b 65 79 2c 20 77  tryKey(subKey, w
9ff0: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
a000: 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a   safe) : null;..
a010: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a070: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a080: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56  public void SetV
a090: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
a0a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
a0b0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
a0c0: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
a0d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
a0e0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
a0f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a100: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
a110: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
a120: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
a130: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
a140: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
a150: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a170: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
a180: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a190: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
a1b0: 79 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c  y.SetValue(name,
a1c0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
a1d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a1e0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
a1f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a250: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
a260: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
a270: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
a280: 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a 20 20 20  string Name..   
a290: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
a2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a2c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a2d0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
a2e0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a300: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
a310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a320: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a330: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
a350: 74 75 72 6e 20 21 53 74 72 69 6e 67 2e 49 73 4e  turn !String.IsN
a360: 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75 62 4b 65  ullOrEmpty(subKe
a370: 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  yName) ?..      
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a390: 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
a3a0: 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2e  "{0}\\{1}", key.
a3b0: 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e 61 6d 65  Name, subKeyName
a3c0: 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) :..           
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
a3e0: 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  .Name;..        
a3f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a400: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a410: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a460: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
a470: 74 65 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b  te RegistryKey k
a480: 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey;..           
a490: 20 70 75 62 6c 69 63 20 52 65 67 69 73 74 72 79   public Registry
a4a0: 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20 20 20 20  Key Key..       
a4b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a4c0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
a4d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 43  eckDisposed(); C
a4e0: 68 65 63 6b 53 61 66 65 28 29 3b 20 72 65 74 75  heckSafe(); retu
a4f0: 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20 20 20 20  rn key; }..     
a500: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a510: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a560: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
a570: 74 65 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79  te string subKey
a580: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
a590: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
a5a0: 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   SubKeyName..   
a5b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
a5d0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
a5e0: 29 3b 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79  ); return subKey
a5f0: 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
a600: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a610: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a660: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
a670: 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20   bool whatIf;.. 
a680: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a690: 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20  c bool WhatIf.. 
a6a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
a6c0: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
a6d0: 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68 61 74  d(); return what
a6e0: 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  If; }..         
a6f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a700: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a750: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
a760: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  ool readOnly;.. 
a770: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a780: 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d  c bool ReadOnly.
a790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7b0: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
a7c0: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65  sed(); return re
a7d0: 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  adOnly; }..     
a7e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a7f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a840: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a850: 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20  c bool safe;..  
a860: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a870: 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20   bool Safe..    
a880: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a890: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
a8a0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a8b0: 3b 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20 7d  ; return safe; }
a8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a8d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
a8e0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
a8f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a940: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
a950: 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64  n Private Method
a960: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
a970: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
a980: 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20  kReadOnly()..   
a990: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9c0: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61  // NOTE: In "rea
a9d0: 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65  d-only" mode, we
a9e0: 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72   disallow all wr
a9f0: 69 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20  ite access...   
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
aa10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aa20: 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d   if (!readOnly).
aa30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aa40: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa60: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
aa70: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
aa80: 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion();..        
aa90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
aaa0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
aaf0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ab00: 76 6f 69 64 20 43 68 65 63 6b 53 61 66 65 28 29  void CheckSafe()
ab10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
ab20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab30: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
ab40: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
ab50: 20 22 73 61 66 65 22 20 6d 6f 64 65 2c 20 77 65   "safe" mode, we
ab60: 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 64 69   disallow all di
ab70: 72 65 63 74 20 61 63 63 65 73 73 20 74 6f 20 74  rect access to t
ab80: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
ab90: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e      //       con
aba0: 74 61 69 6e 65 64 20 72 65 67 69 73 74 72 79 20  tained registry 
abb0: 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  key...          
abc0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
abd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73            if (!s
abe0: 61 66 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  afe)..          
abf0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ac00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ac10: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
ac20: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
ac30: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20  xception();..   
ac40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ac50: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
ac60: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
ac70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
acc0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79 73       #region Sys
acd0: 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76 65 72 72  tem.Object Overr
ace0: 69 64 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ides..          
acf0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
ad00: 65 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e  e string ToStrin
ad10: 67 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g()..           
ad20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ad30: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
ad40: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
ad50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
ad60: 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  his.Name;..     
ad70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ad80: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
ad90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ada0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
add0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ade0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
adf0: 20 20 20 23 72 65 67 69 6f 6e 20 49 6d 70 6c 69     #region Impli
ae00: 63 69 74 20 43 6f 6e 76 65 72 73 69 6f 6e 20 4f  cit Conversion O
ae10: 70 65 72 61 74 6f 72 73 0d 0a 20 20 20 20 20 20  perators..      
ae20: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ae30: 20 20 20 20 20 20 2f 2f 20 42 55 47 42 55 47 3a        // BUGBUG:
ae40: 20 52 65 6d 6f 76 65 20 6d 65 3f 20 20 54 68 69   Remove me?  Thi
ae50: 73 20 73 68 6f 75 6c 64 20 62 65 20 73 61 66 65  s should be safe
ae60: 20 62 65 63 61 75 73 65 20 69 6e 20 27 77 68 61   because in 'wha
ae70: 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20 20 20  t-if'..         
ae80: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 6d 6f     //         mo
ae90: 64 65 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20  de all keys are 
aea0: 6f 70 65 6e 65 64 20 72 65 61 64 2d 6f 6e 6c 79  opened read-only
aeb0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
aec0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  /..            p
aed0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6d 70  ublic static imp
aee0: 6c 69 63 69 74 20 6f 70 65 72 61 74 6f 72 20 52  licit operator R
aef0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
af10: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
af20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
af30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
af40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
af50: 20 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20      return (key 
af60: 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b  != null) ? key.K
af70: 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ey : null;..    
af80: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
af90: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
afa0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
afb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aff0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b000: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
b010: 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e  posable "Pattern
b020: 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  " Members..     
b030: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
b040: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20  ool disposed;.. 
b050: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
b060: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73  te void CheckDis
b070: 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77  posed() /* throw
b080: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
b090: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b0a0: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
b0b0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
b0c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
b0d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b0e0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
b0f0: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
b100: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
b110: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
b120: 66 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  f(MockRegistryKe
b130: 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  y).Name);..     
b140: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b150: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b1a0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
b1b0: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
b1c0: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
b1d0: 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20  Dispose(..      
b1e0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
b1f0: 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20  isposing..      
b200: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
b210: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b220: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b230: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
b240: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b260: 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
b270: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b280: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2e0: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
b2f0: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
b300: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b340: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
b350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b360: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (key != null)..
b370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b380: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3a0: 20 20 20 20 20 20 20 6b 65 79 2e 43 6c 6f 73 65         key.Close
b3b0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3d0: 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   key = null;..  
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
b410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b420: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b460: 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d    // release unm
b470: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
b480: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4f0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
b500: 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20  s object is now 
b510: 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20  disposed...     
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b530: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b540: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
b550: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
b560: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b570: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b580: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
b590: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
b5a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b5f0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
b600: 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d  posable Members.
b610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
b620: 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65  lic void Dispose
b630: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
b640: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b650: 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
b660: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b670: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
b680: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
b690: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b6a0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b6b0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b6c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b700: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b710: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
b720: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
b730: 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69         ~MockRegi
b740: 73 74 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20  stryKey()..     
b750: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b760: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
b770: 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  e(false);..     
b780: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b790: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
b7a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
b7b0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
b7c0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
b7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b810: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
b820: 65 67 69 6f 6e 20 52 65 67 69 73 74 72 79 48 65  egion RegistryHe
b830: 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  lper Class..    
b840: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
b850: 69 63 20 63 6c 61 73 73 20 52 65 67 69 73 74 72  ic class Registr
b860: 79 48 65 6c 70 65 72 0d 0a 20 20 20 20 20 20 20  yHelper..       
b870: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b880: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
b890: 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73  tatic Properties
b8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b8b0: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
b8c0: 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b   subKeysCreated;
b8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
b8e0: 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
b8f0: 53 75 62 4b 65 79 73 43 72 65 61 74 65 64 0d 0a  SubKeysCreated..
b900: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
b920: 65 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62 4b  et { return subK
b930: 65 79 73 43 72 65 61 74 65 64 3b 20 7d 0d 0a 20  eysCreated; }.. 
b940: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
b950: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
b960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b9a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
b9b0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
b9c0: 74 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64  t subKeysDeleted
b9d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
b9e0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74  ublic static int
b9f0: 20 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 0d   SubKeysDeleted.
ba00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62  get { return sub
ba30: 4b 65 79 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a  KeysDeleted; }..
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ba50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
ba60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bab0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
bac0: 6e 74 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b  nt keyValuesSet;
bad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
bae0: 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
baf0: 4b 65 79 56 61 6c 75 65 73 53 65 74 0d 0a 20 20  KeyValuesSet..  
bb00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
bb20: 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c   { return keyVal
bb30: 75 65 73 53 65 74 3b 20 7d 0d 0a 20 20 20 20 20  uesSet; }..     
bb40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
bb50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
bb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
bba0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
bbb0: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65  te static int ke
bbc0: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 0d  yValuesDeleted;.
bbd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
bbe0: 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b  lic static int K
bbf0: 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 0d  eyValuesDeleted.
bc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
bc30: 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 20 7d  ValuesDeleted; }
bc40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bc50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
bc60: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
bc70: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bcc0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
bcd0: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
bce0: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
bcf0: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
bd00: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
bd10: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
bd20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
bd30: 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52  lic static MockR
bd40: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
bd50: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
bd60: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
bd70: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
bd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd90: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
bda0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
bdb0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61        bool writa
bdc0: 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ble,..          
bdd0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
bde0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
bdf0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
be00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
be10: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
be20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
be30: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
be40: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
be60: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
be80: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bea0: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
beb0: 64 54 72 61 63 65 28 77 72 69 74 61 62 6c 65 20  dTrace(writable 
bec0: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
bed0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
bee0: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
bef0: 20 3a 20 54 72 61 63 65 50 72 69 6f 72 69 74 79   : TracePriority
bf00: 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20 20 20 20  .Higher,..      
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf20: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
bf30: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
bf40: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf60: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
bf70: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
bf80: 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69 74 61 62  me = {1}, writab
bf90: 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  le = {2}",..    
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfb0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
bfc0: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
bfd0: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c  lay(subKeyName),
bfe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bff0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
c000: 70 6c 61 79 28 77 72 69 74 61 62 6c 65 29 29 2c  play(writable)),
c010: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
c020: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c030: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
c040: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
c050: 20 41 6c 77 61 79 73 20 66 6f 72 62 69 64 20 77   Always forbid w
c060: 72 69 74 61 62 6c 65 20 61 63 63 65 73 73 20 77  ritable access w
c070: 68 65 6e 20 6f 70 65 72 61 74 69 6e 67 20 69 6e  hen operating in
c080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c090: 20 20 2f 2f 20 20 20 20 20 20 20 27 77 68 61 74    //       'what
c0a0: 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 20  -if' mode...    
c0b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
c0e0: 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70  key = rootKey.Op
c0f0: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c110: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
c120: 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74  f ? false : writ
c130: 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  able);....      
c140: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c150: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
c160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c170: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
c180: 67 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20 77  gistryKey(key, w
c190: 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61  hatIf, false, fa
c1a0: 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20  lse) : null;..  
c1b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
c1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
c1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
c210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
c220: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
c230: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
c240: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
c250: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
c260: 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  tic MockRegistry
c270: 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79  Key CreateSubKey
c280: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c290: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c2a0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
c2c0: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
c2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c2e0: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
c300: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
c320: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
c340: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
c350: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
c360: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c370: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
c380: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
c390: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
c3a0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
c3b0: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
c3c0: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
c3d0: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3f0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
c400: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
c410: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
c420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c430: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
c440: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
c450: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
c460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c470: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
c480: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
c490: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
c4a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c4b0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
c4c0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
c4e0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
c4f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c500: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c520: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79    // HACK: Alway
c530: 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20 72 61  s open a key, ra
c540: 74 68 65 72 20 74 68 61 6e 20 63 72 65 61 74 69  ther than creati
c550: 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20 20 20  ng one when..   
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74   //       operat
c580: 69 6e 67 20 69 6e 20 27 77 68 61 74 2d 69 66 27  ing in 'what-if'
c590: 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   mode...        
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5c0: 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d      if (whatIf).
c5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c5e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c600: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
c610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48              // H
c620: 41 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  ACK: Attempt to 
c630: 6f 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69  open the specifi
c640: 65 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 0d  ed sub-key.  If.
c650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c660: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
c670: 20 20 74 68 69 73 20 66 61 69 6c 73 2c 20 77 65    this fails, we
c680: 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74   will simply ret
c690: 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d 0a 20 20  urn the root..  
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b        //       k
c6c0: 65 79 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20  ey itself since 
c6d0: 6e 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c  no writes are al
c6e0: 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20 20 20  lowed in..      
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c700: 20 20 2f 2f 20 20 20 20 20 20 20 27 77 68 61 74    //       'what
c710: 2d 69 66 27 20 6d 6f 64 65 20 61 6e 79 68 6f 77  -if' mode anyhow
c720: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c730: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
c740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c750: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
c760: 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f  tryKey key = roo
c770: 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28  tKey.OpenSubKey(
c780: 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  subKeyName);....
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
c7b0: 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a  key != null) ?..
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20              key 
c7e0: 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  : new MockRegist
c7f0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c810: 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
c820: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
c830: 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  tIf, false, fals
c840: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
c850: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
c880: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8a0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
c8b0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
c8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
c8e0: 6f 74 4b 65 79 2e 43 72 65 61 74 65 53 75 62 4b  otKey.CreateSubK
c8f0: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
c900: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 0d 0a  whatIf, false,..
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
c930: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
c940: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c950: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
c970: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
c980: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c9a0: 75 62 4b 65 79 73 43 72 65 61 74 65 64 2b 2b 3b  ubKeysCreated++;
c9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c9c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
c9d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
c9e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
c9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ca30: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
ca40: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
ca50: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
ca60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ca70: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
ca80: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
caa0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
cab0: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
cac0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
cad0: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
caf0: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
cb00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cb10: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
cb20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cb30: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
cb50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
cb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cb70: 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
cb80: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
cb90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
cba0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
cbb0: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
cbc0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
cbd0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
cbe0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
cbf0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
cc00: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
cc20: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
cc30: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
cc40: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc60: 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20       "rootKey = 
cc70: 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20  {0}, subKeyName 
cc80: 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cca0: 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74   ForDisplay(root
ccb0: 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  Key), ForDisplay
ccc0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a  (subKeyName)),..
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cce0: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
ccf0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
cd00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
cd10: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
cd30: 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65  tKey.DeleteSubKe
cd40: 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68  y(subKeyName, th
cd50: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a  rowOnMissing);..
cd60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd70: 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64    subKeysDeleted
cd80: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
cd90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
cda0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
cdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
cdf0: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
ce00: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
ce10: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
ce20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ce30: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
ce40: 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
ce50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ce60: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
ce70: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
ce90: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
cea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ceb0: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ced0: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
cee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cf10: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
cf20: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
cf30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
cf40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cf50: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
cf60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf70: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
cf80: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
cf90: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
cfa0: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
cfc0: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
cfd0: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
cfe0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d000: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
d010: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
d020: 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
d040: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65  orDisplay(rootKe
d050: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73  y), ForDisplay(s
d060: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20  ubKeyName)),..  
d070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d080: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
d090: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
d0a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
d0b0: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
d0c0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
d0d0: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  ey.DeleteSubKeyT
d0e0: 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ree(subKeyName);
d0f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d100: 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74      subKeysDelet
d110: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
d120: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d130: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d170: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d180: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
d190: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
d1a0: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
d1b0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
d1c0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
d1d0: 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e  ing[] GetSubKeyN
d1e0: 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ames(..         
d1f0: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
d200: 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20  tryKey key,..   
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
d220: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
d230: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
d240: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
d250: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
d260: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d270: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
d280: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2a0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
d2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d2c0: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2e0: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
d2f0: 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
d300: 72 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20  riority.High,.. 
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d320: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
d330: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
d340: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
d350: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
d370: 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  y = {0}", ForDis
d380: 70 6c 61 79 28 6b 65 79 29 29 2c 20 74 72 61 63  play(key)), trac
d390: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d3b0: 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62  eturn key.GetSub
d3c0: 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20  KeyNames();..   
d3d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d3e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
d3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
d440: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
d450: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
d460: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
d470: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
d480: 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c  ic object GetVal
d490: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
d4a0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
d4b0: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
d4c0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
d4d0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
d4e0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
d4f0: 64 65 66 61 75 6c 74 56 61 6c 75 65 2c 0d 0a 20  defaultValue,.. 
d500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
d510: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
d530: 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
d540: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
d550: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d560: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
d570: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
d580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d590: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
d5a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d5b0: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
d5c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d5d0: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
d5e0: 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
d5f0: 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d  ePriority.High,.
d600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d610: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
d620: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
d630: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
d640: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
d660: 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20  key = {0}, name 
d670: 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c 74 56 61  = {1}, defaultVa
d680: 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20  lue = {2}",..   
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
d6b0: 6b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  key), ForDisplay
d6c0: 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  (name),..       
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6e0: 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 66 61   ForDisplay(defa
d6f0: 75 6c 74 56 61 6c 75 65 29 29 2c 20 74 72 61 63  ultValue)), trac
d700: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
d710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d720: 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c  eturn key.GetVal
d730: 75 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74  ue(name, default
d740: 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  Value);..       
d750: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d760: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
d7b0: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
d7c0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
d7d0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
d7e0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
d7f0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
d800: 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20  oid SetValue(.. 
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
d820: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
d830: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
d840: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
d850: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d860: 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c     object value,
d870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d880: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8a0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8e0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d900: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
d910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d920: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
d930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d940: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
d950: 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
d960: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
d970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d980: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
d990: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
d9a0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
d9b0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9d0: 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65  "key = {0}, name
d9e0: 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65 20 3d 20   = {1}, value = 
d9f0: 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {2}",..         
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
da10: 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 20  orDisplay(key), 
da20: 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29  ForDisplay(name)
da30: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 61 6c  , ForDisplay(val
da40: 75 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ue)),..         
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
da60: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
da70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da80: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daa0: 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65      key.SetValue
dab0: 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  (name, value);..
dac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dad0: 20 20 6b 65 79 56 61 6c 75 65 73 53 65 74 2b 2b    keyValuesSet++
dae0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
daf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
db00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
db50: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
db60: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
db70: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
db80: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
db90: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65  c static void De
dba0: 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
dbc0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
dbd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dbe0: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc00: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
dc10: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
dc20: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
dc30: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
dc40: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
dc50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc60: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
dc70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dc80: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
dc90: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
dca0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
dcb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dcc0: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
dcd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dce0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
dcf0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
dd00: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
dd10: 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
dd30: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
dd40: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
dd50: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd70: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20      "key = {0}, 
dd80: 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72  name = {1}", For
dd90: 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a 20  Display(key),.. 
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
ddc0: 79 28 6e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  y(name)), traceC
ddd0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ddf0: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
de10: 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 6e  ey.DeleteValue(n
de20: 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ame, throwOnMiss
de30: 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ing);....       
de40: 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
de50: 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20  esDeleted++;..  
de60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
de70: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
de80: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
de90: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
dea0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
deb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ded0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
def0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
df00: 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 4c   #region StringL
df10: 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ist Class..     
df20: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
df30: 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 4c 69  d class StringLi
df40: 73 74 20 3a 20 4c 69 73 74 3c 73 74 72 69 6e 67  st : List<string
df50: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  >..        {..  
df60: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
df70: 20 53 74 72 69 6e 67 4c 69 73 74 28 29 0d 0a 20   StringList().. 
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
df90: 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20   base()..       
dfa0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
dfb0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
dfc0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
dfd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
dfe0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
dff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e030: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
e040: 74 72 69 6e 67 4c 69 73 74 28 49 45 6e 75 6d 65  tringList(IEnume
e050: 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e 20 63 6f  rable<string> co
e060: 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  llection)..     
e070: 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73             : bas
e080: 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20  e(collection).. 
e090: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e0b0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
e0c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e0d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e0e0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
e0f0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
e140: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
e150: 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72   StringDictionar
e160: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
e170: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
e180: 63 6c 61 73 73 20 53 74 72 69 6e 67 44 69 63 74  class StringDict
e190: 69 6f 6e 61 72 79 20 3a 20 44 69 63 74 69 6f 6e  ionary : Diction
e1a0: 61 72 79 3c 73 74 72 69 6e 67 2c 20 73 74 72 69  ary<string, stri
e1b0: 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng>..        {..
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
e1d0: 69 63 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e  ic StringDiction
e1e0: 61 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ary()..         
e1f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e200: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
e210: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
e220: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
e230: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
e240: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
e250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e290: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
e2a0: 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e   #region Version
e2b0: 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
e2c0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e2d0: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
e2e0: 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56 65 72 73  List : List<Vers
e2f0: 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ion>..        {.
e300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e310: 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  lic VersionList(
e320: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e330: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20     : base()..   
e340: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
e360: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
e370: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
e380: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
e390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
e3e0: 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 49  ic VersionList(I
e3f0: 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65 72 73 69  Enumerable<Versi
e400: 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  on> collection).
e410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e420: 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69   : base(collecti
e430: 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
e440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e450: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
e460: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
e470: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
e480: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
e490: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
e4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
e4f0: 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4d 61  region VersionMa
e500: 70 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  p Class..       
e510: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
e520: 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4d 61 70  class VersionMap
e530: 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74   : Dictionary<st
e540: 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e 4c 69 73  ring, VersionLis
e550: 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t>..        {.. 
e560: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e570: 63 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 0d 0a  c VersionMap()..
e580: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e5a0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e5b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e5c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e5d0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
e5e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e630: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
e640: 6e 20 50 61 63 6b 61 67 65 20 43 6c 61 73 73 0d  n Package Class.
e650: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
e660: 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 50  l sealed class P
e670: 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20  ackage..        
e680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
e690: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
e6a0: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
e6b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 50          public P
e6c0: 61 63 6b 61 67 65 28 29 0d 0a 20 20 20 20 20 20  ackage()..      
e6d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e6e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e6f0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e700: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e710: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
e730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
e780: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
e790: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
e7a0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
e7b0: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
e7c0: 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
e7d0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
e7e0: 73 73 65 6d 62 6c 79 4e 61 6d 65 20 41 73 73 65  ssemblyName Asse
e7f0: 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20  mblyName..      
e800: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e810: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
e820: 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 4e 61  eturn assemblyNa
e830: 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
e840: 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 73 73         set { ass
e850: 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76 61 6c 75  emblyName = valu
e860: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
e870: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
e880: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e8d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
e8e0: 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ol globalAssembl
e8f0: 79 43 61 63 68 65 3b 0d 0a 20 20 20 20 20 20 20  yCache;..       
e900: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
e910: 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43   GlobalAssemblyC
e920: 61 63 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ache..          
e930: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e940: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
e950: 6e 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  n globalAssembly
e960: 43 61 63 68 65 3b 20 7d 0d 0a 20 20 20 20 20 20  Cache; }..      
e970: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
e980: 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  globalAssemblyCa
e990: 63 68 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  che = value; }..
e9a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
e9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ea10: 70 72 69 76 61 74 65 20 47 75 69 64 20 70 61 63  private Guid pac
ea20: 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20 20 20 20  kageId;..       
ea30: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
ea40: 20 50 61 63 6b 61 67 65 49 64 0d 0a 20 20 20 20   PackageId..    
ea50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ea60: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
ea70: 20 72 65 74 75 72 6e 20 70 61 63 6b 61 67 65 49   return packageI
ea80: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
ea90: 20 20 20 20 20 20 73 65 74 20 7b 20 70 61 63 6b        set { pack
eaa0: 61 67 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  ageId = value; }
eab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
eac0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ead0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
eb20: 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20 73    private Guid s
eb30: 65 72 76 69 63 65 49 64 3b 0d 0a 20 20 20 20 20  erviceId;..     
eb40: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75         public Gu
eb50: 69 64 20 53 65 72 76 69 63 65 49 64 0d 0a 20 20  id ServiceId..  
eb60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
eb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
eb80: 20 7b 20 72 65 74 75 72 6e 20 73 65 72 76 69 63   { return servic
eb90: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
eba0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 73 65          set { se
ebb0: 72 76 69 63 65 49 64 20 3d 20 76 61 6c 75 65 3b  rviceId = value;
ebc0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ebd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ebe0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ebf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ec30: 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64      private Guid
ec40: 20 64 61 74 61 53 6f 75 72 63 65 49 64 3b 0d 0a   dataSourceId;..
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ec60: 69 63 20 47 75 69 64 20 44 61 74 61 53 6f 75 72  ic Guid DataSour
ec70: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ceId..          
ec80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ec90: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
eca0: 6e 20 64 61 74 61 53 6f 75 72 63 65 49 64 3b 20  n dataSourceId; 
ecb0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
ecc0: 20 20 20 73 65 74 20 7b 20 64 61 74 61 53 6f 75     set { dataSou
ecd0: 72 63 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  rceId = value; }
ece0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ecf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ed00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed40: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
ed50: 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20 64    private Guid d
ed60: 61 74 61 50 72 6f 76 69 64 65 72 49 64 3b 0d 0a  ataProviderId;..
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ed80: 69 63 20 47 75 69 64 20 44 61 74 61 50 72 6f 76  ic Guid DataProv
ed90: 69 64 65 72 49 64 0d 0a 20 20 20 20 20 20 20 20  iderId..        
eda0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
edb0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
edc0: 75 72 6e 20 64 61 74 61 50 72 6f 76 69 64 65 72  urn dataProvider
edd0: 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
ede0: 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74         set { dat
edf0: 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 76 61  aProviderId = va
ee00: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
ee10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ee20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ee30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ee70: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ee80: 47 75 69 64 20 61 64 6f 4e 65 74 54 65 63 68 6e  Guid adoNetTechn
ee90: 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20 20 20 20 20  ologyId;..      
eea0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69        public Gui
eeb0: 64 20 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  d AdoNetTechnolo
eec0: 67 79 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  gyId..          
eed0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
eee0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
eef0: 6e 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  n adoNetTechnolo
ef00: 67 79 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  gyId; }..       
ef10: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61           set { a
ef20: 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
ef30: 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  d = value; }..  
ef40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
ef50: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
ef60: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
ef70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
ef80: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
ef90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efd0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
efe0: 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75   #region Configu
eff0: 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d 0a 20 20  ration Class..  
f000: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
f010: 61 6c 65 64 20 63 6c 61 73 73 20 43 6f 6e 66 69  aled class Confi
f020: 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  guration..      
f030: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f040: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
f050: 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20   Constants..    
f060: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
f070: 63 6f 6e 73 74 20 63 68 61 72 20 53 77 69 74 63  const char Switc
f080: 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20 20 20 20  h = '-';..      
f090: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
f0a0: 6e 73 74 20 63 68 61 72 20 41 6c 74 53 77 69 74  nst char AltSwit
f0b0: 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a 20 20 20  ch = '/';....   
f0c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
f0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
f110: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
f120: 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
f130: 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77 69 74 63  nly char[] Switc
f140: 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20 20 20 20  hChars = {..    
f150: 20 20 20 20 20 20 20 20 20 20 20 20 53 77 69 74              Swit
f160: 63 68 2c 20 41 6c 74 53 77 69 74 63 68 0d 0a 20  ch, AltSwitch.. 
f170: 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 20             };.. 
f180: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
f190: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
f1a0: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f1f0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
f200: 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63  Private Construc
f210: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
f220: 20 20 70 72 69 76 61 74 65 20 43 6f 6e 66 69 67    private Config
f230: 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  uration(..      
f240: 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
f250: 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  ly assembly,..  
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
f270: 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  ring logFileName
f280: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f290: 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
f2a0: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
f2b0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72        string cor
f2c0: 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  eFileName,..    
f2d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
f2e0: 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c  ng linqFileName,
f2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f300: 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65    string designe
f310: 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  rFileName,..    
f320: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
f330: 6e 67 20 72 65 67 69 73 74 72 79 56 65 72 73 69  ng registryVersi
f340: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
f350: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6e 66       string conf
f360: 69 67 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  igVersion,..    
f370: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
f380: 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66  ng vsVersionSuff
f390: 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
f3a0: 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 62 75       string debu
f3b0: 67 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  gFormat,..      
f3c0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f3d0: 20 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20   traceFormat,.. 
f3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
f3f0: 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74  nstallFlags inst
f400: 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  allFlags,..     
f410: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
f420: 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72  Priority debugPr
f430: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
f440: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
f450: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
f460: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
f470: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
f480: 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
f490: 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61        bool insta
f4a0: 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
f4b0: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
f4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f4d0: 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65    bool noRuntime
f4e0: 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
f4f0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
f500: 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20 20 20 20  oDesktop,..     
f510: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f520: 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20  noCompact,..    
f530: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
f540: 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a 20 20 20   noNetFx20,..   
f550: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f560: 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d 0a 20 20  l noNetFx40,..  
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f580: 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a 20  ol noNetFx45,.. 
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f5a0: 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c 0d 0a 20  ool noVs2005,.. 
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f5c0: 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c 0d 0a 20  ool noVs2008,.. 
f5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f5e0: 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d 0a 20  ool noVs2010,.. 
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f600: 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c 0d 0a 20  ool noVs2012,.. 
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f620: 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a 20 20  ool noTrace,..  
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f640: 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a 20  ol noConsole,.. 
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f660: 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20 20 20  ool noLog,..    
f670: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
f680: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
f690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f6a0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6c0: 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a 20 20 20  bool debug,..   
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
f6e0: 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
f700: 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   confirm..      
f710: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
f720: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f730: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f740: 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65  .assembly = asse
f750: 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  mbly;..         
f760: 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46         this.logF
f770: 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c  ileName = logFil
f780: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
f790: 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 69 72          this.dir
f7a0: 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f  ectory = directo
f7b0: 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
f7c0: 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46 69       this.coreFi
f7d0: 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c  leName = coreFil
f7e0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
f7f0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e          this.lin
f800: 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71  qFileName = linq
f810: 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
f820: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f830: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
f840: 20 3d 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e   = designerFileN
f850: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
f860: 20 20 20 20 20 20 74 68 69 73 2e 72 65 67 69 73        this.regis
f870: 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 72 65 67  tryVersion = reg
f880: 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20  istryVersion;.. 
f890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f8a0: 68 69 73 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f  his.configVersio
f8b0: 6e 20 3d 20 63 6f 6e 66 69 67 56 65 72 73 69 6f  n = configVersio
f8c0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
f8d0: 20 20 20 20 74 68 69 73 2e 76 73 56 65 72 73 69      this.vsVersi
f8e0: 6f 6e 53 75 66 66 69 78 20 3d 20 76 73 56 65 72  onSuffix = vsVer
f8f0: 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20  sionSuffix;..   
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f910: 73 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20  s.debugFormat = 
f920: 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  debugFormat;..  
f930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f940: 69 73 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d  is.traceFormat =
f950: 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20   traceFormat;.. 
f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f970: 68 69 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73  his.installFlags
f980: 20 3d 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b   = installFlags;
f990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f9a0: 20 20 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f    this.debugPrio
f9b0: 72 69 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f  rity = debugPrio
f9c0: 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
f9d0: 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63         this.trac
f9e0: 65 50 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63  ePriority = trac
f9f0: 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
fa00: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fa10: 2e 70 65 72 55 73 65 72 20 3d 20 70 65 72 55 73  .perUser = perUs
fa20: 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
fa30: 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c       this.instal
fa40: 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20  l = install;..  
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fa60: 69 73 2e 77 6f 77 36 34 20 3d 20 77 6f 77 36 34  is.wow64 = wow64
fa70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fa80: 20 20 20 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d     this.noRuntim
fa90: 65 56 65 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e  eVersion = noRun
faa0: 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  timeVersion;..  
fab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fac0: 69 73 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e  is.noDesktop = n
fad0: 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20  oDesktop;..     
fae0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
faf0: 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f  noCompact = noCo
fb00: 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20  mpact;..        
fb10: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
fb20: 65 74 46 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78  etFx20 = noNetFx
fb30: 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20;..           
fb40: 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
fb50: 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78 34 30 3b  x40 = noNetFx40;
fb60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fb70: 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35    this.noNetFx45
fb80: 20 3d 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20   = noNetFx45;.. 
fb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fba0: 68 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e  his.noVs2005 = n
fbb0: 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20  oVs2005;..      
fbc0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fbd0: 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30  oVs2008 = noVs20
fbe0: 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08;..           
fbf0: 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
fc00: 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a  10 = noVs2010;..
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc20: 74 68 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20  this.noVs2012 = 
fc30: 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20  noVs2012;..     
fc40: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fc50: 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63  noTrace = noTrac
fc60: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
fc70: 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f      this.noConso
fc80: 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d  le = noConsole;.
fc90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fca0: 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f   this.noLog = no
fcb0: 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Log;..          
fcc0: 20 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77        this.throw
fcd0: 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f  OnMissing = thro
fce0: 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20  wOnMissing;..   
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fd00: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
fd10: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
fd20: 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d      this.debug =
fd30: 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20   debug;..       
fd40: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 65           this.ve
fd50: 72 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b  rbose = verbose;
fd60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd70: 20 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d    this.confirm =
fd80: 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20   confirm;..     
fd90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
fda0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
fdb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe00: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
fe10: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
fe20: 74 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  te Static Method
fe30: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
fe40: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
fe50: 69 64 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c  id GetDefaultFil
fe60: 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20  eNames(..       
fe70: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
fe80: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 72 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46  ref string coreF
feb0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
fec0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
fed0: 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
fee0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
fef0: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
ff00: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d  esignerFileName.
ff10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff20: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
ff30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ff40: 20 20 20 69 66 20 28 74 68 69 73 41 73 73 65 6d     if (thisAssem
ff50: 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly == null)..  
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff70: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
ff90: 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65  ectory = Path.Ge
ffa0: 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74  tDirectoryName(t
ffb0: 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
ffc0: 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tion);....      
ffd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
ffe0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
fff0: 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ty(directory))..
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
10030 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
10040 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
10050 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
10060 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
10070 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  ller.CoreFileNam
10080 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
10090 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
100a0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
100b0 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ne(directory,.. 
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100d0 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e     Installer.Lin
100e0 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  qFileName);.... 
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
10100 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
10110 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
10120 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
10130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
10140 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65  nstaller.Designe
10150 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  rFileName);..   
10160 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
10170 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
10180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
101c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
101d0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
101e0 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20   CheckOption(.. 
101f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10200 65 66 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20  ef string arg.. 
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
10220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
10230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10240 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d   string result =
10250 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   arg;....       
10260 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
10270 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
10280 74 79 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20  ty(result))..   
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
102a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
102c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
102d0 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20  OTE: Remove all 
102e0 6c 65 61 64 69 6e 67 20 73 77 69 74 63 68 20 63  leading switch c
102f0 68 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  hars...         
10300 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10320 20 20 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75     result = resu
10330 6c 74 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69  lt.TrimStart(Swi
10340 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20  tchChars);....  
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10360 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10370 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
10380 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72  E: How many char
10390 73 20 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d  s were removed?.
103a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
103b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
103d0 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e   count = arg.Len
103e0 67 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e  gth - result.Len
103f0 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
10400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73      // NOTE: Was
10430 20 74 68 65 72 65 20 61 74 20 6c 65 61 73 74 20   there at least 
10440 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  one?..          
10450 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
10460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10470 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29    if (count > 0)
10480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10490 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
104d0 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63  NOTE: Ok, replac
104e0 65 20 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c  e their original
104f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10500 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
10510 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20     argument...  
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10530 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d    arg = result;.
10560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10570 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
105a0 59 65 73 2c 20 74 68 69 73 20 69 73 20 61 20 73  Yes, this is a s
105b0 77 69 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20  witch...        
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
105e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
105f0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10620 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10630 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
10640 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
10650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10660 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
106b0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
106c0 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70  tic bool MatchOp
106d0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
106e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 61 72         string ar
106f0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
10700 20 20 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f      string optio
10710 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
10720 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
10730 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10740 20 20 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d       if ((arg ==
10750 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f   null) || (optio
10760 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  n == null))..   
10770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10780 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
10790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
107a0 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
107b0 43 6f 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20  Compare(arg, 0, 
107c0 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20  option, 0,..    
107d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107e0 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69  arg.Length, Stri
107f0 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
10800 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
10810 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  == 0;..         
10820 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10830 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10870 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10880 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
10890 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73  tatic bool? Pars
108a0 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20  eBoolean(..     
108b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
108c0 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20  g text..        
108d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
108e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
108f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
10900 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
10910 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20  pty(text))..    
10920 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10940 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a     bool value;..
10950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10960 20 20 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54        if (bool.T
10970 72 79 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75  ryParse(text, ou
10980 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20  t value))..     
10990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109a0 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
109b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
109c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
109d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
109e0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
109f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10a00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a40 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
10a50 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
10a60 74 69 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65  tic object Parse
10a70 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
10a80 20 20 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d         Type enum
10a90 54 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Type,..         
10aa0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65         string te
10ab0 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt,..           
10ac0 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65       bool noCase
10ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ae0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
10af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10b00 20 20 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70      if ((enumTyp
10b10 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65  e == null) || !e
10b20 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d  numType.IsEnum).
10b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b40 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
10b50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10b60 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
10b70 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
10b80 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
10b90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
10bb0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
10bc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10be0 20 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61    return Enum.Pa
10bf0 72 73 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65  rse(enumType, te
10c00 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20  xt, noCase);..  
10c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10c30 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
10c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10c70 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10ca0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10cb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10cc0 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
10cd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
10ce0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
10cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
10d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d40 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
10d50 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
10d60 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Static Methods..
10d70 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
10d80 69 63 20 73 74 61 74 69 63 20 43 6f 6e 66 69 67  ic static Config
10d90 75 72 61 74 69 6f 6e 20 43 72 65 61 74 65 44 65  uration CreateDe
10da0 66 61 75 6c 74 28 29 0d 0a 20 20 20 20 20 20 20  fault()..       
10db0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10dc0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
10dd0 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b  irectory = null;
10de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10df0 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c    string coreFil
10e00 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eName = null;.. 
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
10e20 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
10e30 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  me = null;..    
10e40 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
10e50 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
10e60 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ame = null;.... 
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
10e80 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d  etDefaultFileNam
10e90 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
10ea0 20 20 20 20 20 20 20 20 20 72 65 66 20 64 69 72           ref dir
10eb0 65 63 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65  ectory, ref core
10ec0 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69  FileName, ref li
10ed0 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  nqFileName,..   
10ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ef0 20 72 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c   ref designerFil
10f00 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
10f10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10f20 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74  n new Configurat
10f30 69 6f 6e 28 74 68 69 73 41 73 73 65 6d 62 6c 79  ion(thisAssembly
10f40 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72  , null, director
10f50 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
10f60 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
10f70 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61  Name, linqFileNa
10f80 6d 65 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65  me, designerFile
10f90 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  Name, null, null
10fa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10fb0 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 54 72 61         null, Tra
10fc0 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61  ceOps.DebugForma
10fd0 74 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63  t, TraceOps.Trac
10fe0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
11000 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61 75  stallFlags.Defau
11010 6c 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69 74  lt, TracePriorit
11020 79 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20 20  y.Default,..    
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11040 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65  TracePriority.De
11050 66 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72  fault, false, tr
11060 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  ue, false, false
11070 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20  , false,..      
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
11090 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
110a0 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
110b0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
110c0 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
110d0 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
110e0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
110f0 74 72 75 65 2c 20 74 72 75 65 2c 20 66 61 6c 73  true, true, fals
11100 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29  e, false, false)
11110 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
11120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11170 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
11180 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
11190 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
111a0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
111b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
111c0 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 72  c static bool Fr
111d0 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  omArgs(..       
111e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
111f0 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20  ] args,..       
11200 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74           bool st
11210 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rict,..         
11220 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66 69         ref Confi
11230 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
11240 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
11250 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
11260 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
11270 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
11280 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
112a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
112b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
112c0 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67           if (arg
112d0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112f0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
11300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11310 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
11320 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
11330 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11340 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
11350 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e 66  iguration = Conf
11360 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74 65  iguration.Create
11370 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20  Default();....  
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11390 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61    int length = a
113a0 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  rgs.Length;.... 
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
113d0 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c  x = 0; index < l
113e0 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
113f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11420 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72 67  string arg = arg
11430 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
11440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11450 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11470 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61   // NOTE: Skip a
11480 6e 79 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74  ny argument that
11490 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f 72 20   is null (?) or 
114a0 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20  an empty..      
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69 6e    //       strin
114d0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
114e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11500 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
11510 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
11520 28 61 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20  (arg))..        
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11540 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
11550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11560 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65       // NOTE: We
11590 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 6d 6f   are going to mo
115a0 64 69 66 79 20 74 68 65 20 6f 72 69 67 69 6e 61  dify the origina
115b0 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20 20  l argument..    
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79 20      //       by 
115e0 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c 65 61  removing any lea
115f0 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68 61 72  ding option char
11600 61 63 74 65 72 73 3b 0d 0a 20 20 20 20 20 20 20  acters;..       
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65 66   //       theref
11630 6f 72 65 2c 20 77 65 20 75 73 65 20 61 20 6e 65  ore, we use a ne
11640 77 20 73 74 72 69 6e 67 20 74 6f 20 68 6f 6c 64  w string to hold
11650 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11670 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64 20         modified 
11680 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20  argument...     
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
116c0 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d 20 61  tring newArg = a
116d0 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rg;....         
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
116f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11700 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
11710 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70  TE: All the supp
11720 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69  orted command li
11730 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d  ne options must.
11740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11750 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11760 20 20 62 65 67 69 6e 20 77 69 74 68 20 61 6e 20    begin with an 
11770 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72  option character
11780 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73 0d 0a   (e.g. a minus..
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117a0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
117b0 20 6f 72 20 66 6f 72 77 61 72 64 20 73 6c 61 73   or forward slas
117c0 68 29 3b 20 61 74 74 65 6d 70 74 20 74 6f 20 76  h); attempt to v
117d0 61 6c 69 64 61 74 65 20 74 68 61 74 0d 0a 20 20  alidate that..  
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e        //       n
11800 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 20  ow.  If we fail 
11810 69 6e 20 73 74 72 69 63 74 20 6d 6f 64 65 2c 20  in strict mode, 
11820 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a 20 20  we are done;..  
11830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11840 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
11850 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20 73  therwise, just s
11860 6b 69 70 20 74 68 69 73 20 61 72 67 75 6d 65 6e  kip this argumen
11870 74 20 61 6e 64 20 61 64 76 61 6e 63 65 0d 0a 20  t and advance.. 
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
118a0 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e 65 2e  to the next one.
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 0d 0a 20 20            //..  
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118e0 20 20 20 20 20 20 69 66 20 28 21 43 68 65 63 6b        if (!Check
118f0 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41 72  Option(ref newAr
11900 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
11940 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
11950 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
11980 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
11990 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
119a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119c0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
119d0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
119e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a00 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63    "Unsupported c
11a10 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75  ommand line argu
11a20 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  ment: {0}",..   
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
11a50 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74  Display(arg)), t
11a60 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
11a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11a90 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ab0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11ac0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
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 63 6f 6e 74 69 6e 75 65          continue
11af0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11b00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b40 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c      // NOTE: All
11b50 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63   the supported c
11b60 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
11b70 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20  ons must..      
11b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b90 20 20 2f 2f 20 20 20 20 20 20 20 68 61 76 65 20    //       have 
11ba0 61 20 76 61 6c 75 65 3b 20 74 68 65 72 65 66 6f  a value; therefo
11bb0 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 61  re, attempt to a
11bc0 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  dvance..        
11bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11be0 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20 6e  //       to it n
11bf0 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 2c  ow.  If we fail,
11c00 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a 20   we are done... 
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 2f 2f 0d 0a 20 20 20 20 20         //..     
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c40 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20     index++;.... 
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c60 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78         if (index
11c70 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20   >= length)..   
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cb0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
11cc0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
11cd0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cf0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
11d00 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
11d10 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
11d40 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
11d50 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
11d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d70 20 20 20 20 20 20 20 20 20 20 22 4d 69 73 73 69            "Missi
11d80 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f 70 74  ng value for opt
11d90 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ion: {0}",..    
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
11dc0 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72  isplay(arg)), tr
11dd0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
11de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11e00 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11e30 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
11e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e50 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
11e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e90 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
11ec0 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20  e textual value 
11ed0 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  of this command 
11ee0 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  line..          
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11f00 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a         option...
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 2f 2f 0d 0a 20 20 20 20          //..    
11f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f40 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 20      string text 
11f50 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a  = args[index];..
11f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11f70 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f90 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
11fa0 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68 20  igure out which 
11fb0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
11fc0 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20 20 20  ion this is..   
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fe0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 62       //       (b
11ff0 61 73 65 64 20 6f 6e 20 61 20 70 61 72 74 69 61  ased on a partia
12000 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29 20 61 6e  l name match) an
12010 64 20 74 68 65 6e 20 74 72 79 0d 0a 20 20 20 20  d then try..    
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12030 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
12040 69 6e 74 65 72 70 72 65 74 20 74 68 65 20 74 65  interpret the te
12050 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20 74  xtual value as t
12060 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20 20  he correct..    
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 79 70      //       typ
12090 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
120a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120c0 20 20 20 20 20 20 20 20 69 66 20 28 4d 61 74 63          if (Matc
120d0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
120e0 22 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 29  "configVersion")
120f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12100 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12120 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
12130 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56 65  uration.configVe
12140 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20  rsion = text;.. 
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12160 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12180 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
12190 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
121a0 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20 20  confirm"))..    
121b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
121f0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
12200 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12220 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
12230 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12250 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
12280 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
12290 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
122c0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
122d0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
122e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
122f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12300 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
12310 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
12320 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
12350 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
12360 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12390 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
123a0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
123b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
123e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12400 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12410 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
12440 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
12470 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
12480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12490 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
124c0 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 62  ion.confirm = (b
124d0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
124e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
12510 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
12520 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 72  ion(newArg, "cor
12530 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  eFileName"))..  
12540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12550 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
12580 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  on.coreFileName 
12590 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
125c0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
125d0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
125e0 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 22  (newArg, "debug"
125f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
12600 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f             bool?
12630 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
12640 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12660 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12670 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12690 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
126c0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
126d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
126e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12700 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
12710 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
12720 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12750 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
12760 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12790 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
127a0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
127b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127d0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
127e0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
127f0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
12830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
12860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12880 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
12890 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
128c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
128d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
128e0 0d 0a 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 63 6f                co
12900 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
12910 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  g = (bool)value;
12920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12930 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
12960 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
12970 2c 20 22 64 65 62 75 67 46 6f 72 6d 61 74 22 29  , "debugFormat")
12980 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12990 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
129c0 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72  uration.debugFor
129d0 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  mat = text;..   
129e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
12a00 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20  s.DebugFormat = 
12a10 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
12a20 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
12a60 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
12a70 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62  ion(newArg, "deb
12a80 75 67 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  ugPriority")).. 
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ac0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
12ad0 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
12ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69   typeof(TracePri
12b10 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72  ority), text, tr
12b20 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
12b50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
12ba0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
12bb0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
12be0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
12bf0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
12c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
12c30 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
12c40 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
12c70 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d  d {0} value: {1}
12c80 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ca0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
12cb0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
12cc0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cf0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
12d00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
12d30 0a 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 20 20 20                  
12d50 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
12d60 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
12d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
12dd0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
12de0 67 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61  gPriority = (Tra
12df0 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65  cePriority)value
12e00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
12e20 72 61 63 65 4f 70 73 2e 44 65 62 75 67 50 72 69  raceOps.DebugPri
12e30 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72  ority = configur
12e40 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72  ation.debugPrior
12e50 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12e80 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
12e90 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
12ea0 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72 46  wArg, "designerF
12eb0 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20  ileName"))..    
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12f00 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .designerFileNam
12f10 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
12f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12f50 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12f60 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72 65  on(newArg, "dire
12f70 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20 20  ctory"))..      
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fb0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
12fc0 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74 3b  irectory = text;
12fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
13000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13010 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49 41  // NOTE: *SPECIA
13020 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68 20  L* Must refresh 
13030 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d 0a  the file names..
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13060 20 20 20 20 20 68 65 72 65 20 62 65 63 61 75 73       here becaus
13070 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  e the underlying
13080 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20   directory..    
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
130b0 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a 20   has changed... 
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
13100 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  g coreFileName =
13110 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
13120 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  oreFileName;....
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13150 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
13160 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61  Empty(coreFileNa
13170 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13190 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
131a0 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
131b0 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e 61  eName(coreFileNa
131c0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
131f0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72  sNullOrEmpty(cor
13200 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  eFileName))..   
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
13230 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74  eFileName = Inst
13240 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61  aller.CoreFileNa
13250 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13280 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20  .coreFileName = 
13290 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
132a0 20 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 20 20 63                 c
132c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
132d0 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65  ectory, coreFile
132e0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e        string lin
13310 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66  qFileName = conf
13320 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69  iguration.linqFi
13330 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
13360 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
13370 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
13380 0a 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 20 20                  
133a0 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
133b0 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
133c0 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d  (linqFileName);.
133d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
133f0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
13400 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65  OrEmpty(linqFile
13410 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65          linqFile
13440 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
13450 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a  .LinqFileName;..
13460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13480 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71  nfiguration.linq
13490 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
134a0 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20  Combine(..      
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 20 20 63 6f 6e 66 69 67            config
134d0 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
134e0 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  y, linqFileName)
134f0 3b 0d 0a 0d 0a 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 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
13520 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69  FileName = confi
13530 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65  guration.designe
13540 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  rFileName;....  
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
13570 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
13580 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65  pty(designerFile
13590 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135b0 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72          designer
135c0 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
135d0 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73 69  GetFileName(desi
135e0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
135f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13610 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
13620 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46  rEmpty(designerF
13630 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13650 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67             desig
13660 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e  nerFileName = In
13670 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72  staller.Designer
13680 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136a0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
136b0 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46  ration.designerF
136c0 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
136d0 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136f0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
13700 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79  ration.directory
13710 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  , designerFileNa
13720 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13750 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
13760 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
13770 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29  wArg, "install")
13780 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13790 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
137c0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
137d0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
13800 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
13850 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
13860 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
138a0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
138b0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
138e0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
138f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
13930 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
13940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
13970 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
13980 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
13990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
139c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
13a20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13a70 0a 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 63 6f 6e               con
13a90 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61  figuration.insta
13aa0 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ll = (bool)value
13ab0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13ac0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
13af0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
13b00 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73  g, "installFlags
13b10 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
13b50 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
13b60 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e         typeof(In
13b90 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78  stallFlags), tex
13ba0 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  t, true);....   
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bc0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
13bd0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
13be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
13c20 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
13c30 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
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 20 20 20 20 20 20 20 20 20                  
13c60 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
13c70 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
13c80 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ca0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13cb0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
13cc0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
13cf0 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66  nvalid install f
13d00 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22  lags value: {0}"
13d10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
13d40 79 28 74 65 78 74 29 29 2c 20 74 72 61 63 65 43  y(text)), traceC
13d50 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13d80 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
13d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
13db0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13de0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
13e30 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67  tion.installFlag
13e40 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67  s = (InstallFlag
13e50 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  s)value;..      
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
13e90 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
13ea0 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71 46  n(newArg, "linqF
13eb0 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20  ileName"))..    
13ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ed0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13f00 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20  .linqFileName = 
13f10 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13f30 0d 0a 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 65 6c 73 65 20 69            else i
13f50 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13f60 65 77 41 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e  ewArg, "logFileN
13f70 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ame"))..        
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13fb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
13fc0 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
13fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13fe0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14010 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14020 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d  , "noCompact")).
14030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14040 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14070 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
14080 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140a0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
140b0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14100 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
14110 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
14150 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
14160 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14180 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14190 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
141a0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
141d0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
141e0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
141f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14220 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14230 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14260 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
142d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
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 63 6f 6e 66 69             confi
14340 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61  guration.noCompa
14350 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ct = (bool)value
14360 3b 0d 0a 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 7d 0d 0a 20 20             }..  
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
143a0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
143b0 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29  g, "noConsole"))
143c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
143d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
14400 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
14410 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14430 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
14440 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14460 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 20 20 65 72 72               err
14490 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
144a0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
144b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144d0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
144e0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
144f0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14520 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
14530 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14560 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
14570 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
14580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
145b0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
145c0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
145f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14650 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
14660 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
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 63 6f 6e 66              conf
146d0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73  iguration.noCons
146e0 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ole = (bool)valu
146f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
14700 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14730 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14740 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29  rg, "noDesktop")
14750 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14760 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
14790 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
147a0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
147d0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 20 20 65 72                er
14820 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
14830 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14860 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
14870 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
14880 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
148b0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
148c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
14900 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
14910 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
14940 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
14950 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
149f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14a40 0a 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 63 6f 6e               con
14a60 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73  figuration.noDes
14a70 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  ktop = (bool)val
14a80 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
14ac0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
14ad0 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a  Arg, "noLog"))..
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b10 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14b20 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14b30 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b50 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
14b60 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14bb0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
14bc0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
14bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
14c00 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
14c10 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c30 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14c40 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14c50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
14c80 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
14c90 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
14cd0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
14ce0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14d10 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d70 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
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 63 6f 6e 66 69 67            config
14df0 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20  uration.noLog = 
14e00 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e40 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
14e50 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
14e60 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a 20 20 20  oNetFx20"))..   
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
14eb0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
14ec0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ee0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
14ef0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
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 65 72 72 6f 72 20 3d 20          error = 
14f40 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
14f50 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
14f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
14f80 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
14f90 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
14fa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
14fd0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
14fe0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15000 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
15010 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
15020 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
15060 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
15070 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
150a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
150d0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
15100 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15130 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
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 63 6f 6e 66 69 67 75 72 61         configura
15180 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  tion.noNetFx20 =
15190 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151d0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
151e0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
151f0 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20  noNetFx40"))..  
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
15240 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
15250 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15270 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
15280 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
152d0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
152e0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
15310 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
15320 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
15330 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15350 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
15360 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
15370 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
153a0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
153b0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
153f0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
15400 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15420 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15430 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15460 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15490 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154c0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
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 63 6f 6e 66 69 67 75 72          configur
15510 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20  ation.noNetFx40 
15520 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
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 7d 0d 0a 20 20 20 20 20          }..     
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15560 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
15570 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
15580 22 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20  "noNetFx45")).. 
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
155d0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
155e0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
15610 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
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 20 20 65 72 72 6f 72 20            error 
15660 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
15670 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
156a0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
156b0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
156c0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
156f0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
15700 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
15730 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
15740 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
15780 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
15790 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
157c0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
157f0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15820 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15850 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
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 63 6f 6e 66 69 67 75           configu
158a0 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35  ration.noNetFx45
158b0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
158c0 0a 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 7d 0d 0a 20 20 20 20           }..    
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
15900 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
15910 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69   "noRuntimeVersi
15920 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  on"))..         
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15940 0d 0a 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 62 6f                bo
15960 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
15970 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
15980 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
159a0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
159b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
159d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
15a00 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
15a10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
15a40 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
15a50 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
15a90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ac0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
15ad0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
15ae0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
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 20 20 46 6f 72 44 69             ForDi
15b10 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
15b20 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
15b60 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
15b90 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
15bc0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
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 63 6f 6e 74 69 6e 75           continu
15bf0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 7d 0d 0a 0d 0a 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 20 20                  
15c30 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
15c40 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  oRuntimeVersion 
15c50 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c90 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
15ca0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
15cb0 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20 20 20  "noTrace"))..   
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cd0 20 20 20 20 20 7b 0d 0a 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 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
15d00 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
15d10 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
15d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d30 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
15d40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
15d90 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
15da0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
15dd0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
15de0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
15df0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
15e20 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
15e30 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
15e60 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
15e70 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
15e80 20 20 20 20 20 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 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
15eb0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
15ec0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ee0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15ef0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15f20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
15f50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
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 63                 c
15f80 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 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 20 63 6f 6e 66 69 67 75 72 61         configura
15fd0 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28  tion.noTrace = (
15fe0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16000 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16020 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
16030 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
16040 56 73 32 30 30 35 22 29 29 0d 0a 20 20 20 20 20  Vs2005"))..     
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16060 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
16090 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
160a0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160c0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
160d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
16120 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16130 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16150 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
16160 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
16170 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
16180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161a0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
161b0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
161c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
161f0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
16200 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
16230 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
16240 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
16250 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
16280 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
162b0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
162e0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16310 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
16320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16330 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16360 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20 28 62  on.noVs2005 = (b
16370 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16390 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
163b0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
163c0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
163d0 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20 20 20  s2008"))..      
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16420 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16430 29 3b 0d 0a 0d 0a 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 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16460 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
164b0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
164c0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
164d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
164f0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
16500 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16530 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16540 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16550 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16570 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
16580 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
16590 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
165c0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
165d0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
165e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16600 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
16610 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
16640 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16660 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16670 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16690 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
166a0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
166b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
166f0 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28 62 6f  n.noVs2008 = (bo
16700 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
16740 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
16750 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
16760 32 30 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20  2010"))..       
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
167b0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
167c0 3b 0d 0a 0d 0a 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 20 20                  
167e0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
167f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
16840 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
16850 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
16880 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
16890 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168c0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
168d0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
168e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
16910 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
16920 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16950 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
16960 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
16970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
169a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
169d0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16a00 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
16a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
16a30 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
16a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
16a80 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 62 6f 6f  .noVs2010 = (boo
16a90 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ab0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16ad0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
16ae0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
16af0 30 31 32 22 29 29 0d 0a 20 20 20 20 20 20 20 20  012"))..        
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
16b30 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
16b40 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
16b50 0d 0a 0d 0a 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 20 20 20                  
16b70 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
16b80 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ba0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
16bd0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
16be0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c00 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
16c10 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
16c20 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
16c60 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
16c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c90 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
16ca0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
16cb0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
16ce0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
16cf0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
16d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
16d30 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d50 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
16d60 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
16d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16d90 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
16dc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16de0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
16e10 6e 6f 56 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c  noVs2012 = (bool
16e20 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16e50 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
16e60 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
16e70 28 6e 65 77 41 72 67 2c 20 22 70 65 72 55 73 65  (newArg, "perUse
16e80 72 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r"))..          
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
16ec0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
16ed0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
16ee0 0d 0a 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 20 20 69 66                if
16f00 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
16f10 0d 0a 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 20 7b 0d                {.
16f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
16f60 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
16f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
16fa0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
16fb0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
16ff0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
17030 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
17040 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
17070 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17080 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
170c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
170f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17110 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
17120 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
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 63 6f 6e 74 69 6e 75 65          continue
17150 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17170 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70 65  configuration.pe
171a0 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29 76 61  rUser = (bool)va
171b0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
171d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
171e0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
171f0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
17200 77 41 72 67 2c 20 22 72 65 67 69 73 74 72 79 56  wArg, "registryV
17210 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20  ersion"))..     
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
17260 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20  registryVersion 
17270 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
17280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17290 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
172a0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
172b0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
172c0 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69 63 74  (newArg, "strict
172d0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
17310 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
17320 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
17330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17350 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
17360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173a0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
173b0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
173c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
173f0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
17400 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17430 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
17440 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17470 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
17480 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
17490 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
174c0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
174d0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17500 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
17510 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
17540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
17570 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17590 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
175a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
175c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
175e0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17600 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 68  / NOTE: Allow th
17610 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61  e command line a
17620 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20 20  rguments to..   
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 2f 2f 20 20 20 20 20           //     
17650 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 22    override the "
17660 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74 74  strictness" sett
17670 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 69 64   //       provid
176a0 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
176b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
176d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
176f0 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61  trict = (bool)va
17700 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17730 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
17740 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
17750 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d 69  wArg, "throwOnMi
17760 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 20 20  ssing"))..      
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
177b0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
177c0 29 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
177f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17810 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
17840 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
17850 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
17880 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
17890 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178c0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
178d0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
178e0 28 0d 0a 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 20 20 20 20 20                  
17900 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
17910 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
17920 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
17950 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
17960 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
17970 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
179a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
179d0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
17a00 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
17a30 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
17a80 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  n.throwOnMissing
17a90 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
17aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
17ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ad0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
17ae0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
17af0 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29 29   "traceFormat"))
17b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
17b40 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d  ration.traceForm
17b50 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  at = text;..    
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
17b80 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 63  .TraceFormat = c
17b90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
17ba0 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 20 20 20 7d 0d 0a 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 65 6c                el
17be0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
17bf0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63  on(newArg, "trac
17c00 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20  ePriority"))..  
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c40 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
17c50 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c80 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f  typeof(TracePrio
17c90 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75  rity), text, tru
17ca0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
17cd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
17d20 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
17d30 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
17d60 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
17d70 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
17d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
17db0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
17dc0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
17df0 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22   {0} value: {1}"
17e00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
17e30 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
17e40 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
17e50 20 20 20 20 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 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
17e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ea0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17ee0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17f50 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65  figuration.trace
17f60 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63  Priority = (Trac
17f70 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b  ePriority)value;
17f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
17fa0 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69 6f  aceOps.TracePrio
17fb0 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61  rity = configura
17fc0 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69  tion.tracePriori
17fd0 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18010 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
18020 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29 29  Arg, "verbose"))
18030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18040 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
18070 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
18080 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
180b0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
18100 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
18110 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
18150 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
18160 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18190 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
181a0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
181d0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
181e0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
181f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
18220 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
18230 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
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 20 20 20 20 74                 t
18260 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
18270 0d 0a 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 20 20 20 20                  
18290 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 20 20                  
182c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
182d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18330 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
18340 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f 73  iguration.verbos
18350 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
18360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18370 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18390 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
183a0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
183b0 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75 66 66  , "vsVersionSuff
183c0 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ix"))..         
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
183e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18400 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 56 65  nfiguration.vsVe
18410 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 74 65  rsionSuffix = te
18420 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18460 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
18470 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 29 0d  Arg, "whatIf")).
18480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18490 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 20 62 6f 6f 6c 3f 20 76 61          bool? va
184c0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
184d0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184f0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
18500 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18540 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
18550 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
18560 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18590 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
185a0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
185b0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
185e0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
185f0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
18620 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
18630 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
18640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
18670 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
18680 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
186b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
186c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186e0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18710 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
18720 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18760 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18780 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
18790 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 20  guration.whatIf 
187a0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187e0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
187f0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
18800 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20 20  "wow64"))..     
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18840 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
18850 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
18860 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18880 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
18890 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
188e0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
188f0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
18900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18910 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
18920 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
18930 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
18940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
18970 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
18980 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
189b0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
189c0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
189f0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
18a00 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
18a10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
18a40 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
18a70 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18aa0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18ad0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
18b20 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f 6c  on.wow64 = (bool
18b30 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18b60 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
18b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18b80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 65 72 72 6f 72 20 3d           error =
18bb0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
18bc0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
18bf0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
18c00 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
18c40 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
18c70 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d  Unsupported comm
18c80 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a  and line option:
18c90 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cb0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
18cc0 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43  ay(arg)), traceC
18cd0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
18d00 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
18d30 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18d80 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
18d90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
18db0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
18dc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18dd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18de0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
18df0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
18e00 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
18e10 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
18e40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65  traceCallback, e
18e50 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
18e60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18e70 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
18e80 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69   "Failed to modi
18e90 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  fy configuration
18ea0 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
18eb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18ec0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18ed0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
18ee0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18ef0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
18f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18f40 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
18f50 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
18f60 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
18f70 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
18f80 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
18f90 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20 20  ool Process(..  
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
18fb0 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ring[] args,..  
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
18fd0 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
18fe0 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
19000 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20   strict,..      
19010 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
19020 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
19030 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
19040 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19060 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
19070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19080 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
19090 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
190a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
190b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e       error = "In
190e0 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74  valid configurat
190f0 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19140 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
19150 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20  mbly assembly = 
19160 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61 73  configuration.as
19170 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20  sembly;....     
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19190 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20 6e  f (assembly == n
191a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
191b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e       error = "In
191e0 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e 22  valid assembly."
191f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19200 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19210 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19240 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
19250 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63  iguration.noTrac
19260 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
19270 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
192a0 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a  ation.noLog &&..
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 20 20 20 53 74 72 69              Stri
192d0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
192e0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c  (configuration.l
192f0 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  ogFileName))..  
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19330 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73       // NOTE: Us
19360 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 6f  e the default lo
19370 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20  g file name...  
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
193c0 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
193d0 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c 65  ame = GetLogFile
193e0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 20 22 74 72 61 63 65 22 29 3b         "trace");
19410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19420 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19490 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
194a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
194b0 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20 20  onsole)..       
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72 62  // NOTE: In verb
19520 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67 20  ose mode, debug 
19530 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65 65  output (that mee
19540 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e  //       the con
19570 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74 79  figured priority
19580 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20   criteria) will 
19590 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61 79  //       display
195c0 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c  ed to the consol
195d0 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 72  e; otherwise, tr
195e0 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75 74   //       output
19610 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68 65   (that meets the
19620 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f   configured prio
19630 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74 65    //       crite
19660 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69 73  ria) will be dis
19670 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f  played to the co
19680 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  nsole...        
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
196d0 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20 20  ation.debug)..  
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
19720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68   // NOTE: Add th
19750 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20  e console trace 
19760 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d  listener to the.
19770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f   //       list o
197a0 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72  f trace listener
197b0 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79 0d  s maintained by.
197c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54 72   //       the Tr
197f0 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69 2e  aceOps class (i.
19800 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73  e. only messages
19810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 74 20    //       that 
19840 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 20 70  meet the debug p
19850 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 0d  riority will be.
19860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20 6f   //       seen o
19890 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d  n the console)..
198a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 65       TraceOps.Se
198f0 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72  tupDebugListener
19900 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
199b0 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 6f  E: Add the conso
199c0 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  le trace listene
199d0 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  r to the..      
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
19a00 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c 74     list of built
19a10 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65 6e  -in trace listen
19a20 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20  ers (i.e...     
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19a50 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65      only message
19a60 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 65 20  s that meet the 
19a70 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
19aa0 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65  priority will be
19ab0 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e   seen on the con
19ac0 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20  sole)...        
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ae0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
19b10 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28  e.Listeners.Add(
19b20 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65  new ConsoleTrace
19b30 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20  Listener());..  
19b40 20 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 7d 0d 0a 20 20 20            }..   
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 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 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
19bf0 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26  uration.noLog &&
19c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 53                !S
19c20 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
19c30 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  pty(configuratio
19c40 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d  n.logFileName)).
19c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69          Trace.Li
19c90 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
19ca0 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65 4c  TextWriterTraceL
19cb0 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20 20  istener(..      
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 20 20 63 6f 6e 66 69 67            config
19ce0 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
19cf0 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame));....      
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d30 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
19d40 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20 63  echnically, we c
19d50 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20 66  reated the log f
19d60 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ile...          
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 20 2f 2f 0d 0a 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 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b 2b    filesCreated++
19db0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19dc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19de0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
19df0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70     // NOTE: Dump
19e20 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
19e30 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20 77  on now in case w
19e40 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20 20  e need to..     
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19e60 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65 73  /       troubles
19e70 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73 2e  hoot any issues.
19e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19e90 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19eb0 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
19ec0 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c 3d  debugPriority <=
19ed0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d   TracePriority.M
19ee0 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20  edium)..        
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f00 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75  configuration.Du
19f10 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  mp(debugCallback
19f20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19f30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
19f40 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
19f50 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61  ePriority <= Tra
19f60 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
19f70 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
19f80 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
19f90 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 74  iguration.Dump(t
19fa0 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a  raceCallback);..
19fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19fc0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19fe0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 72   NOTE: Show wher
19ff0 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67  e we are running
1a000 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77 65   from and how we
1a010 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20 20   were..         
1a020 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1a030 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20      invoked...  
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a060 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1a070 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73 65   location = asse
1a080 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a  mbly.Location;..
1a090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a0a0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1a0b0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1a0c0 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1a0d0 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  mLow,..         
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1a0f0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1a100 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1a110 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65 78       "Running ex
1a140 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30 7d  ecutable is: {0}
1a150 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f  ", ForDisplay(lo
1a160 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  cation)),..     
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a180 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1a190 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a1a0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1a1b0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1a1c0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1a1d0 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20  ediumLow,..     
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1a200 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1a210 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1a220 0a 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 22 4f 72 69 67 69 6e           "Origin
1a240 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  al command line 
1a250 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  is: {0}",..     
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43     Environment.C
1a280 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72 61  ommandLine), tra
1a290 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1a2c0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1a2d0 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c  Priority.MediumL
1a2e0 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1a300 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1a310 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1a320 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f 63     "Running proc
1a350 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49 73  ess is {0}.", Is
1a360 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f  64BitProcess() ?
1a370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 36                "6
1a390 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69 74  4-bit" : "32-bit
1a3a0 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  "), traceCategor
1a3b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1a3c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1a3d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68  configuration.wh
1a3e0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
1a3f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a430 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68    // NOTE: If th
1a440 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61 74  e debugger is at
1a450 74 61 63 68 65 64 20 61 6e 64 20 57 68 61 74 2d  tached and What-
1a460 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20  If mode..       
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a480 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b 6e 6f   //       is [no
1a490 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73 73  w] disabled, iss
1a4a0 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a 20  ue a warning... 
1a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 20 20 20 69 66 20 28 44 65 62 75 67 67 65 72 2e     if (Debugger.
1a4f0 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20 20  IsAttached)..   
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 4f 70           TraceOp
1a520 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1a530 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1a540 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20  diumHigh,..     
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 64 65 62 75 67             debug
1a570 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1a580 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
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 20 20 20 22 46 6f 72 63 65            "Force
1a5b0 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c 22 77  d to disable \"w
1a5c0 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 77 69  hat-if\" mode wi
1a5d0 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  th " +..        
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5f0 20 20 20 20 20 20 20 20 22 64 65 62 75 67 67 65          "debugge
1a600 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20 74 72  r attached.", tr
1a610 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a630 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1a640 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a660 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1a680 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1a690 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1a6a0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
1a6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1a6d0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1a6e0 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63 74 75          "No actu
1a710 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c 6c 20  al changes will 
1a720 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69 73 20  be made to this 
1a730 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 22 73 79 73 74 65 6d 20 62 65 63 61 75 73 65   "system because
1a760 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64   \"what-if\" mod
1a770 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c 0d  e is enabled.",.
1a780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a7a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1a7d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7f0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
1a800 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
1a810 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61 6e  has not been man
1a820 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  ually..         
1a830 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1a840 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 28 69      confirmed (i
1a850 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78 70 6c  .e. via the expl
1a860 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  icit command lin
1a870 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a880 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1a890 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73 74  option), then st
1a8a0 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20 6e 6f  op processing no
1a8b0 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 0d 0a  w.  We enforce..
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69      //       thi
1a8e0 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74 20 73  s rule so that s
1a8f0 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c 69  imply double-cli
1a900 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  cking the..     
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a920 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62  /       executab
1a930 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73 75  le will not resu
1a940 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e 67 65  lt in any change
1a950 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20  s being..       
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a970 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20 74 68        made to th
1a980 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20  e system...     
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a9a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1a9b0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
1a9c0 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72  iguration.confir
1a9d0 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
1a9e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa00 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61 6e 6e     error = "Cann
1aa10 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68 65  ot continue, the
1aa20 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70 74   \"confirm\" opt
1aa30 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20 20  ion is " +..    
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa50 20 20 20 20 20 20 20 20 22 6e 6f 74 20 65 6e 61          "not ena
1aa60 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20  bled.";....     
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1aa90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aaa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1aac0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
1ab00 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
1ab10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ab20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1ab30 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1ab40 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1ab50 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab70 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1ab80 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1ab90 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72   e, traceCategor
1aba0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1abb0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1abc0 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 70 72   = "Failed to pr
1abd0 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72 61 74  ocess configurat
1abe0 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
1abf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ac10 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1ac20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ac30 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1ac40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
1ac90 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
1aca0 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
1acb0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
1acc0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1acd0 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e 74  c bool CheckRunt
1ace0 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  imeVersion(..   
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
1ad00 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
1ad10 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
1ad20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1ad30 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20  strict,..       
1ad40 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
1ad50 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
1ad60 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1ad70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1ad90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ada0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1adb0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
1adc0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
1add0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1ade0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae00 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76      error = "Inv
1ae10 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69  alid configurati
1ae20 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  on.";..         
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ae40 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ae70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61 74     // NOTE: What
1aea0 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
1aeb0 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68 65 20  runtime was the 
1aec0 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29 0d 0a  core (primary)..
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73      //       ass
1aef0 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 61  embly compiled a
1af00 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22 76 32  gainst (e.g. "v2
1af10 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20 20  .0.50727" or..  
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34 2e 30    //       "v4.0
1af40 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20 20 20  .30319")...     
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1af60 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1af70 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
1af80 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
1af90 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67 65  rsion = GetImage
1afa0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d  RuntimeVersion(.
1afb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1afc0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1afd0 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
1afe0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1b000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b010 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65       // NOTE: We
1b020 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74 75 61   allow the actua
1b030 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  l image runtime 
1b040 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d 0a  checking to be..
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79 70      //       byp
1b070 61 73 73 65 64 20 76 69 61 20 74 68 65 20 22 2d  assed via the "-
1b080 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
1b090 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a  " command line..
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74      //       opt
1b0c0 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61 6e  ion.  The comman
1b0d0 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69 73  d line option is
1b0e0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a 20   intended for.. 
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b100 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70 65     //       expe
1b110 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20 20  rt use only...  
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1b140 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1b150 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75  nfiguration.noRu
1b160 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a 20  ntimeVersion).. 
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b180 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1b1a0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1b1b0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1b1c0 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20  ty.Medium,..    
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1b1f0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1b200 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1b210 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b230 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63    "Assembly is c
1b240 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
1b250 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
1b260 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  0}; " +..       
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c 20 69       "however, i
1b290 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73 74  nstallation rest
1b2a0 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64 20 6f  rictions based o
1b2b0 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20  n this " +..    
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 20 20 20 20 20 20 20 22 66 61 63 74 20 68 61          "fact ha
1b2e0 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  ve been disabled
1b2f0 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64   via the command
1b300 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20 20   line.",..      
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52        coreImageR
1b330 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 20  untimeVersion), 
1b340 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b350 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b360 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b370 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1b380 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1b390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b3a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b3c0 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74 20   TODO: Restrict 
1b3d0 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
1b3e0 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63 68  n based on which
1b3f0 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20 20   image..        
1b400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b410 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65 72       runtime ver
1b420 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f 72  sions (which mor
1b430 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65 73  e-or-less corres
1b440 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20  pond..          
1b450 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b460 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d 65     to .NET Frame
1b470 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20 61  work versions) a
1b480 72 65 20 73 75 70 70 6f 72 74 65 64 20 62 79 20  re supported by 
1b490 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
1b4a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1b4b0 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56 69    versions of Vi
1b4c0 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61 74  sual Studio that
1b4d0 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e 0d   are installed..
1b4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b4f0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1b510 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
1b520 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67 65 52  Empty(coreImageR
1b530 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 0d  untimeVersion)).
1b540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b550 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b570 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
1b580 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65   core file image
1b590 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
1b5a0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b5c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b5f0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53        else if (S
1b600 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20  tring.Equals(.. 
1b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b620 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49             coreI
1b630 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1b640 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65 52 75  on, CLRv2ImageRu
1b650 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20  ntimeVersion,.. 
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
1b680 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
1b690 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
1b6a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74    // NOTE: For t
1b6f0 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75 6e 74  he CLR v2.0 runt
1b700 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77  ime, make sure w
1b710 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20  e disable..     
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b730 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20     //       any 
1b740 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69  attempt to use i
1b750 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61  t for things tha
1b760 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20  t require..     
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b780 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61     //       an a
1b790 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
1b7a0 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e   for the CLR v4.
1b7b0 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20 20  0.  It is..     
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7d0 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e 63 65     //       unce
1b7e0 72 74 61 69 6e 20 69 66 20 74 68 69 73 20 69 73  rtain if this is
1b7f0 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72 6f 62   actually a prob
1b800 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  lem in..        
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b820 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74 69 63  //       practic
1b830 65 20 61 73 20 74 68 65 20 43 4c 52 20 76 34 2e  e as the CLR v4.
1b840 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20 75  0 can load and u
1b850 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 20  se an..         
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b870 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  /       assembly
1b880 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
1b890 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f 77  he CLR v2.0; how
1b8a0 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ever,..         
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b8c0 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20 74 68  /       since th
1b8d0 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 65 72  is project offer
1b8e0 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72 61  s both configura
1b8f0 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20  tions,..        
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b910 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75 72 72  //       we curr
1b920 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20 74  ently disallow t
1b930 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a 20  his mismatch... 
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b950 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b970 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1b980 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 72 75  .noNetFx40 = tru
1b990 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b9a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1b9b0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
1b9c0 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  x45 = true;..   
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1b9f0 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 74 72  on.noVs2010 = tr
1ba00 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1ba20 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
1ba30 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  012 = true;.... 
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1ba60 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1ba70 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1ba80 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baa0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1bab0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1bac0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
1baf0 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64  mbly is compiled
1bb00 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
1bb10 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b  amework {0}, " +
1bb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
1bb40 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e 45 54 20  upport for .NET 
1bb50 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73  Framework {1} is
1bb60 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c   now disabled.",
1bb70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4c                CL
1bb90 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
1bba0 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61  ersion, CLRv4Ima
1bbb0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1bbc0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbe0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1bbf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bc00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1bc10 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1bc20 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61   if (String.Equa
1bc30 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls(..           
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc50 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1bc60 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49  eVersion, CLRv4I
1bc70 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1bc80 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bca0 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1bcb0 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd00 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1bd10 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e   For the CLR v4.
1bd20 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20  0 runtime, make 
1bd30 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d  sure we disable.
1bd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bd50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1bd60 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    any attempt to
1bd70 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e   use it for thin
1bd80 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0d  gs that require.
1bd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bda0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1bdb0 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f    an assembly co
1bdc0 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43  mpiled for the C
1bdd0 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20  LR v2.0...      
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdf0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1be10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1be20 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx20 = true;.. 
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be40 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1be50 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20  tion.noVs2005 = 
1be60 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1be80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
1be90 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a 0d  s2008 = true;...
1bea0 0a 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 54 72 61 63 65 4f 70           TraceOp
1bec0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1bed0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1bee0 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1bf10 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1bf20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1bf30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
1bf50 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c  sembly is compil
1bf60 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  ed for the .NET 
1bf70 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22  Framework {0}, "
1bf80 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 22 73 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e 45  "support for .NE
1bfb0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20  T Framework {1} 
1bfc0 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e  is now disabled.
1bfd0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34  ForDisplay(CLRv4
1c000 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1c010 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
1c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c030 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
1c040 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
1c050 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1c080 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1c090 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0b0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1c0f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c110 20 20 20 20 20 20 20 20 20 20 20 20 22 75 6e 73              "uns
1c120 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66 69  upported core fi
1c130 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  le image runtime
1c140 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20 20   version " +..  
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c160 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c 20            "{0}, 
1c170 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20 7b  must be {1} or {
1c180 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2}",..          
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1a0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72    ForDisplay(cor
1c1b0 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
1c1c0 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1e0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43      ForDisplay(C
1c1f0 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
1c200 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
1c210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c220 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1c230 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  y(CLRv4ImageRunt
1c240 69 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d  imeVersion));...
1c250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c260 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c270 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1c280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c2a0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1c2b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c2c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c2d0 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
1c2e0 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
1c2f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c310 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1c320 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1c330 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
1c340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c350 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1c360 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1c370 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43  lback, e, traceC
1c380 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64   error = "Failed
1c3b0 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67 65 20   to check image 
1c3c0 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e  runtime version.
1c3d0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1c3e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c3f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c400 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1c410 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1c420 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1c430 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1c440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c480 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c490 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
1c4a0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
1c4b0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1c4c0 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20  HasFlags(..     
1c4d0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
1c4e0 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61 67 73  llFlags hasFlags
1c4f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c500 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20     bool all..   
1c510 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1c520 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c540 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20  f (all)..       
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1c560 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61  urn ((installFla
1c570 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 3d  gs & hasFlags) =
1c580 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20  = hasFlags);..  
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1c5a0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
1c5b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
1c5c0 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20  (installFlags & 
1c5d0 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49 6e 73  hasFlags) != Ins
1c5e0 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b  tallFlags.None);
1c5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c600 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1c610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c650 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1c660 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 75    public void Du
1c670 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mp(..           
1c680 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
1c690 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
1c6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c6b0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
1c6c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c6d0 20 20 20 20 69 66 20 28 74 72 61 63 65 43 61 6c      if (traceCal
1c6e0 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a  lback != null)..
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c710 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1c720 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1c730 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1c740 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72 44  "Assembly", ForD
1c770 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c 79 29  isplay(assembly)
1c780 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1c790 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c7a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7c0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1c7d0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1c7e0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1c7f0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1c800 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 6f 67              "Log
1c810 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
1c820 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61 6d  splay(logFileNam
1c830 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c850 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1c860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c870 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1c880 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1c890 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1c8a0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
1c8c0 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72 44 69  irectory", ForDi
1c8d0 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29  splay(directory)
1c8e0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1c8f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c900 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c920 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1c930 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1c940 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1c950 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1c960 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 72              "Cor
1c970 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  eFileName", ForD
1c980 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c 65 4e  isplay(coreFileN
1c990 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1c9c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c9d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1c9e0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1c9f0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ca00 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c 20  "LinqFileName", 
1ca30 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e 71 46  ForDisplay(linqF
1ca40 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca60 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1ca70 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1ca80 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ca90 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1caa0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1cab0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cad0 20 20 20 20 22 44 65 73 69 67 6e 65 72 46 69 6c      "DesignerFil
1cae0 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  eName", ForDispl
1caf0 61 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ay(designerFileN
1cb00 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1cb30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cb40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1cb50 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1cb60 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1cb70 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb90 22 52 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  "RegistryVersion
1cba0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65  ", ForDisplay(re
1cbb0 67 69 73 74 72 79 56 65 72 73 69 6f 6e 29 29 2c  gistryVersion)),
1cbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cbd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1cbe0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1cc10 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1cc20 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1cc30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cc40 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69            "Confi
1cc50 67 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69  gVersion", ForDi
1cc60 73 70 6c 61 79 28 63 6f 6e 66 69 67 56 65 72 73  splay(configVers
1cc70 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc90 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1cca0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ccb0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ccc0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ccd0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1cce0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd00 22 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78  "VsVersionSuffix
1cd10 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73  ", ForDisplay(vs
1cd20 56 65 72 73 69 6f 6e 53 75 66 66 69 78 29 29 2c  VersionSuffix)),
1cd30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd40 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1cd50 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1cd80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1cd90 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1cda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cdb0 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67            "Debug
1cdc0 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70  Format", ForDisp
1cdd0 6c 61 79 28 64 65 62 75 67 46 6f 72 6d 61 74 29  lay(debugFormat)
1cde0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ce00 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1ce30 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1ce40 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1ce50 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61              "Tra
1ce70 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69  ceFormat", ForDi
1ce80 73 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d 61  splay(traceForma
1ce90 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ceb0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1cec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ced0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1cee0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1cef0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1cf00 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
1cf20 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f  nstallFlags", Fo
1cf30 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c  rDisplay(install
1cf40 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20  Flags)),..      
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1cf70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1cf80 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1cf90 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1cfa0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1cfb0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 20 20 22 44 65 62 75 67 50 72 69 6f 72 69 74 79    "DebugPriority
1cfe0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65  ", ForDisplay(de
1cff0 62 75 67 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a  bugPriority)),..
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1d020 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d040 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1d050 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1d060 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 20 20 20 20 20 20 20 22 54 72 61 63 65 50 72          "TracePr
1d090 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70  iority", ForDisp
1d0a0 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72 69 74  lay(tracePriorit
1d0b0 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d0d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d0f0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d100 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d110 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d120 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 50                "P
1d140 65 72 55 73 65 72 22 2c 20 46 6f 72 44 69 73 70  erUser", ForDisp
1d150 6c 61 79 28 70 65 72 55 73 65 72 29 29 2c 0d 0a  lay(perUser)),..
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d170 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1d180 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d1a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1d1b0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1d1c0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1e0 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c          "Install
1d1f0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e  ", ForDisplay(in
1d200 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20  stall)),..      
1d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d220 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d230 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d240 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d250 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d260 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d270 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d290 20 20 22 57 6f 77 36 34 22 2c 20 46 6f 72 44 69    "Wow64", ForDi
1d2a0 73 70 6c 61 79 28 77 6f 77 36 34 29 29 2c 0d 0a  splay(wow64)),..
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2c0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1d2d0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d2f0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1d300 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1d310 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
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 22 4e 6f 52 75 6e 74 69          "NoRunti
1d340 6d 65 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44  meVersion", ForD
1d350 69 73 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d 65  isplay(noRuntime
1d360 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d380 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1d390 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1d3a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d3b0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1d3c0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1d3d0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3f0 20 20 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c      "NoDesktop",
1d400 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65   ForDisplay(noDe
1d410 73 6b 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20  sktop)),..      
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d430 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d440 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d450 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d460 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d470 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d480 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46    "NoCompact", F
1d4b0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70  orDisplay(noComp
1d4c0 61 63 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  act)),..        
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d4f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d500 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1d510 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1d520 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1d530 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 22 4e 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72  "NoNetFx20", For
1d560 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32  Display(noNetFx2
1d570 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0)),..          
1d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d590 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d5b0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d5c0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d5d0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d5e0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1d600 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 44 69  oNetFx40", ForDi
1d610 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30 29  splay(noNetFx40)
1d620 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1d630 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d640 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1d670 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1d680 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1d690 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
1d6b0 65 74 46 78 34 35 22 2c 20 46 6f 72 44 69 73 70  etFx45", ForDisp
1d6c0 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 29 29 2c  lay(noNetFx45)),
1d6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d6f0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d720 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d730 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d750 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
1d760 30 30 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  005", ForDisplay
1d770 28 6e 6f 56 73 32 30 30 35 29 29 2c 0d 0a 20 20  (noVs2005)),..  
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1d7a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d7c0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1d7d0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1d7e0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d800 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 38 22        "NoVs2008"
1d810 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1d820 73 32 30 30 38 29 29 2c 0d 0a 20 20 20 20 20 20  s2008)),..      
1d830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d840 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d850 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d860 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d870 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d880 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d890 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8b0 20 20 22 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f    "NoVs2010", Fo
1d8c0 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31  rDisplay(noVs201
1d8d0 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0)),..          
1d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d8f0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d910 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d920 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d930 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d940 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1d960 6f 56 73 32 30 31 32 22 2c 20 46 6f 72 44 69 73  oVs2012", ForDis
1d970 70 6c 61 79 28 6e 6f 56 73 32 30 31 32 29 29 2c  play(noVs2012)),
1d980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d990 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d9a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d9d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d9e0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1da00 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61            "NoTra
1da10 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ce", ForDisplay(
1da20 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20  noTrace)),..    
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da40 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1da50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1da60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1da70 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1da80 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1da90 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c      "NoConsole",
1dac0 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f   ForDisplay(noCo
1dad0 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20  nsole)),..      
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1db00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1db10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1db20 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1db30 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1db40 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db60 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69    "NoLog", ForDi
1db70 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a  splay(noLog)),..
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1dba0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1dbc0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1dbd0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1dbe0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc00 20 20 20 20 20 20 20 20 22 54 68 72 6f 77 4f 6e          "ThrowOn
1dc10 4d 69 73 73 69 6e 67 22 2c 20 46 6f 72 44 69 73  Missing", ForDis
1dc20 70 6c 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73 73  play(throwOnMiss
1dc30 69 6e 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ing)),..        
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1dc60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dc70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1dc80 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1dc90 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1dca0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcc0 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69 73  "WhatIf", ForDis
1dcd0 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d 0a  play(whatIf)),..
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcf0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1dd00 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1dd20 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1dd30 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1dd40 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd60 20 20 20 20 20 20 20 20 22 44 65 62 75 67 22 2c          "Debug",
1dd70 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75   ForDisplay(debu
1dd80 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  g)),..          
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1dda0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1ddb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ddc0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1ddd0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1dde0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1ddf0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56                "V
1de10 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73 70  erbose", ForDisp
1de20 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d 0a  lay(verbose)),..
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de40 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1de50 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1de70 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1de80 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1de90 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1deb0 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72 6d          "Confirm
1dec0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f  ", ForDisplay(co
1ded0 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20 20  nfirm)),..      
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1def0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1df00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1df10 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1df20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1df60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1df70 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
1df80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1df90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfb0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1dfc0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1dfd0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1dfe0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e000 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c 0d  AssemblyTitle",.
1e010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1e030 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d  Display(GetAssem
1e040 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c  blyTitle(assembl
1e050 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  y))),..         
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1e080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e0a0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1e0b0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1e0c0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
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 20 20 20 22 41 73 73 65             "Asse
1e0f0 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
1e100 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n",..           
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e120 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41   ForDisplay(GetA
1e130 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
1e140 74 69 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29 29  tion(assembly)))
1e150 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e170 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e190 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e1a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1e1b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1e1c0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1e1d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1e1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e220 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1e230 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
1e240 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
1e250 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1e260 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
1e270 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
1e280 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79   public Assembly
1e290 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   Assembly..     
1e2a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e2b0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1e2c0 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b  return assembly;
1e2d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e2e0 20 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62      set { assemb
1e2f0 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ly = value; }.. 
1e300 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1e310 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1e320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1e360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1e370 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f  rivate string lo
1e380 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  gFileName;..    
1e390 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1e3a0 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d  tring LogFileNam
1e3b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
1e3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e3d0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c    get { return l
1e3e0 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  ogFileName; }.. 
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e400 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  et { logFileName
1e410 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1e420 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e430 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1e440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e480 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1e490 76 61 74 65 20 73 74 72 69 6e 67 20 64 69 72 65  vate string dire
1e4a0 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
1e4b0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
1e4c0 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  g Directory..   
1e4d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1e4f0 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f  { return directo
1e500 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ry; }..         
1e510 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 69 72         set { dir
1e520 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20  ectory = value; 
1e530 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1e540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e590 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1e5a0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
1e5b0 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d  g coreFileName;.
1e5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1e5d0 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46  lic string CoreF
1e5e0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
1e5f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e600 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1e610 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d  turn coreFileNam
1e620 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1e630 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65        set { core
1e640 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
1e650 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1e660 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e670 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e6c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1e6d0 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing linqFileName
1e6e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1e6f0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e  ublic string Lin
1e700 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  qFileName..     
1e710 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e720 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1e730 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e  return linqFileN
1e740 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
1e750 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69          set { li
1e760 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c  nqFileName = val
1e770 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1e780 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e790 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e7e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1e7f0 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
1e800 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
1e810 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1e820 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng DesignerFileN
1e830 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
1e840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e850 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1e860 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
1e870 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1e880 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73 69        set { desi
1e890 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76  gnerFileName = v
1e8a0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1e8b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e8c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e900 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e910 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1e920 20 73 74 72 69 6e 67 20 72 65 67 69 73 74 72 79   string registry
1e930 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
1e940 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1e950 69 6e 67 20 52 65 67 69 73 74 72 79 56 65 72 73  ing RegistryVers
1e960 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
1e970 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e980 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1e990 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
1e9a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1e9b0 20 20 20 20 20 73 65 74 20 7b 20 72 65 67 69 73       set { regis
1e9c0 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c  tryVersion = val
1e9d0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1e9e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e9f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1ea00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea30 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ea40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1ea50 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73  tring configVers
1ea60 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
1ea70 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1ea80 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20  ConfigVersion.. 
1ea90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1eab0 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69  t { return confi
1eac0 67 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20  gVersion; }..   
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1eae0 20 7b 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e   { configVersion
1eaf0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1eb00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1eb10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1eb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1eb70 76 61 74 65 20 73 74 72 69 6e 67 20 76 73 56 65  vate string vsVe
1eb80 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20  rsionSuffix;..  
1eb90 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1eba0 20 73 74 72 69 6e 67 20 56 73 56 65 72 73 69 6f   string VsVersio
1ebb0 6e 53 75 66 66 69 78 0d 0a 20 20 20 20 20 20 20  nSuffix..       
1ebc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ebd0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1ebe0 74 75 72 6e 20 76 73 56 65 72 73 69 6f 6e 53 75  turn vsVersionSu
1ebf0 66 66 69 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ffix; }..       
1ec00 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76           set { v
1ec10 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d  sVersionSuffix =
1ec20 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1ec30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ec40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1ec50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1ec90 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1eca0 74 65 20 73 74 72 69 6e 67 20 64 65 62 75 67 46  te string debugF
1ecb0 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
1ecc0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
1ecd0 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20  g DebugFormat.. 
1ece0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1ed00 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
1ed10 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20  Format; }..     
1ed20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1ed30 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76   debugFormat = v
1ed40 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1ed50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1ed60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1edb0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1edc0 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72   string traceFor
1edd0 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
1ede0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1edf0 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20  TraceFormat..   
1ee00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1ee20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f  { return traceFo
1ee30 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rmat; }..       
1ee40 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74           set { t
1ee50 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c  raceFormat = val
1ee60 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1ee70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ee80 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1ee90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eec0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1eed0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49         private I
1eee0 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74  nstallFlags inst
1eef0 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  allFlags;..     
1ef00 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e         public In
1ef10 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61  stallFlags Insta
1ef20 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  llFlags..       
1ef30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ef40 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1ef50 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67  turn installFlag
1ef60 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
1ef70 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
1ef80 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65  allFlags = value
1ef90 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1efa0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1efb0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1efc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eff0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f000 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61       private Tra
1f010 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67  cePriority debug
1f020 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
1f030 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72         public Tr
1f040 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75  acePriority Debu
1f050 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  gPriority..     
1f060 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f070 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1f080 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f  return debugPrio
1f090 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rity; }..       
1f0a0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
1f0b0 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76  ebugPriority = v
1f0c0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1f0d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f0e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1f0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f130 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1f140 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
1f150 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
1f160 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1f170 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
1f180 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20  TracePriority.. 
1f190 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1f1b0 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  t { return trace
1f1c0 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20  Priority; }..   
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1f1e0 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79   { tracePriority
1f1f0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1f200 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f210 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1f220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f260 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1f270 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 55 73 65  vate bool perUse
1f280 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
1f290 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55  public bool PerU
1f2a0 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ser..           
1f2b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f2c0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1f2d0 20 70 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20   perUser; }..   
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1f2f0 20 7b 20 70 65 72 55 73 65 72 20 3d 20 76 61 6c   { perUser = val
1f300 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1f310 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f320 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f360 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f370 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
1f380 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20  ool install;..  
1f390 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1f3a0 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20   bool Install.. 
1f3b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1f3d0 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61  t { return insta
1f3e0 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ll; }..         
1f3f0 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73         set { ins
1f400 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tall = value; }.
1f410 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1f430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f470 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1f480 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f   private bool wo
1f490 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  w64;..          
1f4a0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f    public bool Wo
1f4b0 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
1f4c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f4d0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1f4e0 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20   wow64; }..     
1f4f0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1f500 20 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20   wow64 = value; 
1f510 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1f520 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f  ////////////////
1f550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f570 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1f580 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1f590 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
1f5a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1f5b0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e  ublic bool NoRun
1f5c0 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20  timeVersion..   
1f5d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1f5f0 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69  { return noRunti
1f600 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20  meVersion; }..  
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f620 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72  t { noRuntimeVer
1f630 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  sion = value; }.
1f640 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
1f680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1f6b0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
1f6c0 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20  Desktop;..      
1f6d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1f6e0 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20  l NoDesktop..   
1f6f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f700 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1f710 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74  { return noDeskt
1f720 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  op; }..         
1f730 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44         set { noD
1f740 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20  esktop = value; 
1f750 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1f760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1f7c0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
1f7d0 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20  noCompact;..    
1f7e0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1f7f0 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20  ool NoCompact.. 
1f800 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1f820 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d  t { return noCom
1f830 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  pact; }..       
1f840 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
1f850 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65  oCompact = value
1f860 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f870 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f880 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f8d0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
1f8e0 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20  l noNetFx20;..  
1f8f0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1f900 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d   bool NoNetFx20.
1f910 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f930 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
1f940 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20  etFx20; }..     
1f950 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1f960 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c   noNetFx20 = val
1f970 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1f980 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f990 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f9e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
1f9f0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a  ool noNetFx40;..
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1fa10 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34  ic bool NoNetFx4
1fa20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  0..            {
1fa30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fa40 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
1fa50 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20  oNetFx40; }..   
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1fa70 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76   { noNetFx40 = v
1fa80 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1fa90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1faa0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1faf0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1fb00 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 3b   bool noNetFx45;
1fb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1fb20 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
1fb30 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x45..           
1fb40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fb50 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1fb60 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d 0a 20   noNetFx45; }.. 
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1fb80 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 20 3d  et { noNetFx45 =
1fb90 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1fba0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fbb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1fbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1fc00 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1fc10 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35  te bool noVs2005
1fc20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1fc30 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
1fc40 30 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  005..           
1fc50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fc60 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1fc70 20 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20   noVs2005; }..  
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1fc90 74 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76  t { noVs2005 = v
1fca0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1fcb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fcc0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1fd10 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1fd20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d   bool noVs2008;.
1fd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1fd40 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30  lic bool NoVs200
1fd50 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  8..            {
1fd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fd70 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
1fd80 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20  oVs2008; }..    
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1fda0 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c  { noVs2008 = val
1fdb0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1fdc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1fdd0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1fde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1fe20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
1fe30 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20  ool noVs2010;.. 
1fe40 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1fe50 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d  c bool NoVs2010.
1fe60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe80 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
1fe90 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20  s2010; }..      
1fea0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1feb0 6e 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65  noVs2010 = value
1fec0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fed0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fee0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1fef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ff30 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
1ff40 6c 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20  l noVs2012;..   
1ff50 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1ff60 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20  bool NoVs2012.. 
1ff70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1ff90 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
1ffa0 30 31 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  012; }..        
1ffb0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
1ffc0 56 73 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20  Vs2012 = value; 
1ffd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1ffe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20030 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20040 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
20050 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20  noTrace;..      
20060 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
20070 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20 20  l NoTrace..     
20080 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20090 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
200a0 72 65 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b 20  return noTrace; 
200b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
200c0 20 20 20 73 65 74 20 7b 20 6e 6f 54 72 61 63 65     set { noTrace
200d0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
200e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
200f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20140 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20150 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73  vate bool noCons
20160 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ole;..          
20170 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
20180 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20 20  Console..       
20190 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
201a0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
201b0 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20  turn noConsole; 
201c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
201d0 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f     set { noConso
201e0 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  le = value; }.. 
201f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20250 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20260 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f  rivate bool noLo
20270 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
20280 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f  public bool NoLo
20290 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
202a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
202b0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
202c0 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20  oLog; }..       
202d0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
202e0 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  oLog = value; }.
202f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20350 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20360 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 74 68   private bool th
20370 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20  rowOnMissing;.. 
20380 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
20390 63 20 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69  c bool ThrowOnMi
203a0 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  ssing..         
203b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
203c0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
203d0 72 6e 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  rn throwOnMissin
203e0 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  g; }..          
203f0 20 20 20 20 20 20 73 65 74 20 7b 20 74 68 72 6f        set { thro
20400 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 76 61 6c  wOnMissing = val
20410 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
20420 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20430 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20470 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20480 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
20490 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  ool whatIf;..   
204a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
204b0 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20  bool WhatIf..   
204c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
204d0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
204e0 7b 20 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b  { return whatIf;
204f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20500 20 20 20 20 73 65 74 20 7b 20 77 68 61 74 49 66      set { whatIf
20510 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20520 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20530 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
20540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20580 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20590 76 61 74 65 20 62 6f 6f 6c 20 64 65 62 75 67 3b  vate bool debug;
205a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
205b0 62 6c 69 63 20 62 6f 6f 6c 20 44 65 62 75 67 0d  blic bool Debug.
205c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
205d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205e0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62  get { return deb
205f0 75 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ug; }..         
20600 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62         set { deb
20610 75 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ug = value; }.. 
20620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20690 72 69 76 61 74 65 20 62 6f 6f 6c 20 76 65 72 62  rivate bool verb
206a0 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ose;..          
206b0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56 65    public bool Ve
206c0 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
206d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
206e0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
206f0 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a 20  rn verbose; }.. 
20700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20710 65 74 20 7b 20 76 65 72 62 6f 73 65 20 3d 20 76  et { verbose = v
20720 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20730 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20740 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20780 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20790 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
207a0 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a   bool confirm;..
207b0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
207c0 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d  ic bool Confirm.
207d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
207e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207f0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e  get { return con
20800 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20 20  firm; }..       
20810 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63           set { c
20820 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b 20  onfirm = value; 
20830 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
20850 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
20860 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
20870 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
20880 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
208d0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 46 72        #region Fr
208e0 61 6d 65 77 6f 72 6b 4c 69 73 74 20 43 6c 61 73  ameworkList Clas
208f0 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
20900 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
20910 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20  FrameworkList.. 
20920 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20930 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
20940 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
20950 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
20960 75 62 6c 69 63 20 46 72 61 6d 65 77 6f 72 6b 4c  ublic FrameworkL
20970 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ist()..         
20980 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20990 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
209a0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
209b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
209c0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
209d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
209e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
20a30 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74  egion Public Met
20a40 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
20a50 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
20a60 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
20a70 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
20a80 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
20a90 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a  tryKey RootKey..
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
20ac0 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74  et { return root
20ad0 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  Key; }..        
20ae0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f          set { ro
20af0 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d  otKey = value; }
20b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20b10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
20b70 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e 67    private String
20b80 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20 20  List names;..   
20b90 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20ba0 53 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65 73  StringList Names
20bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20bd0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 61   get { return na
20be0 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  mes; }..        
20bf0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 61          set { na
20c00 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  mes = value; }..
20c10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
20c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20c80 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4d  private VersionM
20c90 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20  ap versions;..  
20ca0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
20cb0 20 56 65 72 73 69 6f 6e 4d 61 70 20 56 65 72 73   VersionMap Vers
20cc0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..          
20cd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20ce0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
20cf0 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20  n versions; }.. 
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20d10 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20  et { versions = 
20d20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
20d30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20d40 20 20 20 20 20 20 20 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 2f 0d 0a 0d 0a 20 20  //////////....  
20d90 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
20da0 65 20 53 74 72 69 6e 67 4c 69 73 74 20 70 6c 61  e StringList pla
20db0 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20  tformNames;..   
20dc0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20dd0 53 74 72 69 6e 67 4c 69 73 74 20 50 6c 61 74 66  StringList Platf
20de0 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20  ormNames..      
20df0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20e00 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
20e10 65 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e 61  eturn platformNa
20e20 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  mes; }..        
20e30 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 6c          set { pl
20e40 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76 61  atformNames = va
20e50 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
20e60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
20e70 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
20e80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
20e90 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
20ea0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20ef0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
20f00 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61 73 73 0d  on VsList Class.
20f10 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
20f20 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 73   sealed class Vs
20f30 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d  List..        {.
20f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
20f50 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
20f60 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
20f70 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 73 4c        public VsL
20f80 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ist()..         
20f90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20fa0 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
20fb0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
20fc0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
20fd0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
20fe0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
20ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
21040 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f  egion Public Pro
21050 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
21060 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
21070 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
21080 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tKey;..         
21090 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
210a0 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65  gistryKey RootKe
210b0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
210c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
210d0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72    get { return r
210e0 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20  ootKey; }..     
210f0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
21100 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65   rootKey = value
21110 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21120 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21130 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21170 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21180 20 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72       private Ver
21190 73 69 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f 6e  sionList version
211a0 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
211b0 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
211c0 73 74 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20  st Versions..   
211d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
211e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
211f0 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e  { return version
21200 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
21210 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 73        set { vers
21220 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ions = value; }.
21230 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21240 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
21250 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
21260 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
21270 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23  egion..        #
21280 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
21290 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
212a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
212e0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
212f0 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74  Private Constant
21300 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70   Data..        p
21310 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
21320 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ing CoreFileName
21330 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
21340 53 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20  SQLite.dll";..  
21350 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
21360 6e 73 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46  nst string LinqF
21370 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  ileName = "Syste
21380 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69  m.Data.SQLite.Li
21390 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20  nq.dll";..      
213a0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
213b0 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46  string DesignerF
213c0 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74  ileName = "SQLit
213d0 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b  e.Designer.dll";
213e0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
213f0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50  e const string P
21400 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53  roviderName = "S
21410 51 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76 69  QLite Data Provi
21420 64 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  der";..        p
21430 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
21440 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20  ing ProjectName 
21450 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
21460 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20  QLite";..       
21470 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
21480 74 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a  tring LegacyProj
21490 65 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74  ectName = "SQLit
214a0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  e";..        pri
214b0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
214c0 67 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20  g InvariantName 
214d0 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
214e0 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20  QLite";..       
214f0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
21500 74 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70  tring FactoryTyp
21510 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  eName = "System.
21520 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
21530 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20  teFactory";..   
21540 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
21550 73 74 20 73 74 72 69 6e 67 20 44 65 73 63 72 69  st string Descri
21560 70 74 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46 72  ption = ".NET Fr
21570 61 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f  amework Data Pro
21580 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65  vider for SQLite
21590 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
215a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
215f0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
21600 74 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67 65  tring CLRv2Image
21610 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
21620 20 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a   "v2.0.50727";..
21630 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21640 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52  const string CLR
21650 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
21660 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30  rsion = "v4.0.30
21670 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  319";....       
21680 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
216d0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
216e0 74 20 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64  t string NameAnd
216f0 56 61 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b  ValueFormat = "{
21700 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20  0}: {1}";..     
21710 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
21720 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53   string LogFileS
21730 75 66 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d  uffix = ".log";.
21740 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
21750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21790 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
217a0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
217b0 6e 67 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d  ng RootKeyName =
217c0 20 22 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20 20   "Software";..  
217d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
217e0 6e 73 74 20 73 74 72 69 6e 67 20 57 6f 77 36 34  nst string Wow64
217f0 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57 6f  SubKeyName = "Wo
21800 77 36 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20  w6432Node";.... 
21810 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21860 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
21870 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
21880 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
21890 6b 20 68 61 73 20 62 6f 74 68 20 33 32 2d 62 69  k has both 32-bi
218a0 74 20 61 6e 64 20 36 34 2d 62 69 74 20 65 64 69  t and 64-bit edi
218b0 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20  tions...        
218c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  //..        priv
218d0 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
218e0 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49 73  nly bool NetFxIs
218f0 33 32 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c 73  32BitOnly = fals
21900 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
21910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21950 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21960 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
21970 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56  NOTE: For now, V
21980 69 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20  isual Studio is 
21990 61 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74 20  always a 32-bit 
219a0 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20  application...  
219b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
219c0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
219d0 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56   readonly bool V
219e0 73 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74  sIs32BitOnly = t
219f0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
21a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21a50 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
21a60 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
21a70 67 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20 22  g VsIdFormat = "
21a80 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  B";....        /
21a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ad0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21ae0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
21af0 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67   readonly string
21b00 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d   XPathForAddElem
21b10 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ent =..         
21b20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f     "configuratio
21b30 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62  n/system.data/Db
21b40 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65  ProviderFactorie
21b50 73 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74  s/add[@invariant
21b60 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20  =\"{0}\"]";.... 
21b70 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
21b80 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73  tatic readonly s
21b90 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65  tring XPathForRe
21ba0 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20  moveElement =.. 
21bb0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66             "conf
21bc0 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d  iguration/system
21bd0 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72  .data/DbProvider
21be0 46 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65  Factories/remove
21bf0 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30  [@invariant=\"{0
21c00 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  }\"]";..        
21c10 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
21c20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21c70 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
21c80 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20   Private Static 
21c90 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72  Data..        pr
21ca0 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73 73  ivate static Ass
21cb0 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d 62  embly thisAssemb
21cc0 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65  ly = Assembly.Ge
21cd0 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d 62  tExecutingAssemb
21ce0 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
21cf0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
21d00 73 74 72 69 6e 67 20 74 72 61 63 65 43 61 74 65  string traceCate
21d10 67 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 46  gory = Path.GetF
21d20 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  ileName(..      
21d30 20 20 20 20 20 20 74 68 69 73 41 73 73 65 6d 62        thisAssemb
21d40 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f 2a  ly.Location); /*
21d50 20 4e 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72 20   NOTE: Same for 
21d60 64 65 62 75 67 20 61 6e 64 20 74 72 61 63 65 2e  debug and trace.
21d70 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70   */....        p
21d80 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72  rivate static Tr
21d90 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75  aceCallback debu
21da0 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44  gCallback = AppD
21db0 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 70  ebug;..        p
21dc0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72  rivate static Tr
21dd0 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
21de0 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54  eCallback = AppT
21df0 72 61 63 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  race;....       
21e00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21e50 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
21e60 69 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d  ic string system
21e70 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c  Directory = null
21e80 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53  ;....#if WINDOWS
21e90 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21ea0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
21eb0 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
21ec0 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b 0d 0a 23 65  ow64 = null;..#e
21ed0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
21ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21f30 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
21f40 63 20 69 6e 74 20 66 69 6c 65 73 43 72 65 61 74  c int filesCreat
21f50 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ed = 0;..       
21f60 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
21f70 69 6e 74 20 66 69 6c 65 73 4d 6f 64 69 66 69 65  int filesModifie
21f80 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
21f90 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
21fa0 6e 74 20 66 69 6c 65 73 44 65 6c 65 74 65 64 20  nt filesDeleted 
21fb0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  = 0;..        #e
21fc0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
21fd0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22020 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
22030 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  race Handling.. 
22040 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
22050 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
22060 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20  LogFileName(..  
22070 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
22080 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20   typeName..     
22090 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f         ) /* thro
220a0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  w */..        {.
220b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
220c0 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50  ing fileName = P
220d0 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e  ath.GetTempFileN
220e0 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame();..        
220f0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
22100 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44  tory = Path.GetD
22110 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c  irectoryName(fil
22120 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eName);..       
22130 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
22140 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e  NameOnly = Path.
22150 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f  GetFileNameWitho
22160 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65  utExtension(file
22170 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
22180 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77        string new
22190 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
221a0 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
221b0 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  y, String.Format
221c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
221d0 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20     "{0}{1}{2}", 
221e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 21  traceCategory, !
221f0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
22200 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20 3f  mpty(typeName) ?
22210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22220 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70 65        "." + type
22230 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d  Name : String.Em
22240 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65 4e  pty, "." + fileN
22250 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20 20  ameOnly +..     
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
22270 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b 0d  ogFileSuffix));.
22280 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ...            F
22290 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61 6d  ile.Move(fileNam
222a0 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29 3b  e, newFileName);
222b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
222c0 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e 61  return newFileNa
222d0 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  me;..        }..
222e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
222f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22330 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
22340 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
22350 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20 20   AppDebug(..    
22360 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
22370 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
22380 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
22390 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
223a0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
223b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
223c0 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28 53  eOps.DebugCore(S
223d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
223f0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
22400 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65  mat, TraceOps.Ne
22410 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20 20  xtDebugId(),..  
22420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
22430 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70  aceOps.TimeStamp
22440 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77  (DateTime.UtcNow
22450 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74  ), message), cat
22460 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
22470 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
22480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
224d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
224e0 76 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a  void AppTrace(..
224f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
22500 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
22510 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
22520 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
22530 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
22540 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22550 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f  TraceOps.TraceCo
22560 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  re(String.Format
22570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
22580 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
22590 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70  eFormat, TraceOp
225a0 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28 29 2c  s.NextTraceId(),
225b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
225c0 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53    TraceOps.TimeS
225d0 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74  tamp(DateTime.Ut
225e0 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c  cNow), message),
225f0 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
22600 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
22610 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
22620 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22670 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
22680 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66 6f 72   Generic Platfor
22690 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  m Handling..    
226a0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
226b0 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69 74 50  ic bool Is64BitP
226c0 72 6f 63 65 73 73 28 29 0d 0a 20 20 20 20 20 20  rocess()..      
226d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
226e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
226f0 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e   // NOTE: Return
22700 73 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  s true if the cu
22710 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 69 73  rrent process is
22720 20 36 34 2d 62 69 74 2e 20 20 49 66 20 74 68 69   64-bit.  If thi
22730 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
22740 2f 20 20 20 20 20 20 20 69 73 20 74 72 75 65 2c  /       is true,
22750 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74 20   we *know* that 
22760 77 65 20 6d 75 73 74 20 62 65 20 72 75 6e 6e 69  we must be runni
22770 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d 0a  ng on a 64-bit..
22780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
22790 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73       operating s
227a0 79 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20 20  ystem as well.  
227b0 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 69 73  However, if this
227c0 20 69 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a 20   is false, we.. 
227d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
227e0 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73      do not neces
227f0 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61 74  sarily know that
22800 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20   we are running 
22810 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20 20 20  on a 32-bit..   
22820 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
22830 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74    operating syst
22840 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57 36 34  em, due to WoW64
22850 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34   (Win32-on-Win64
22860 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20  ), etc...       
22870 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
22880 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
22890 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a 65  Ptr.Size == size
228a0 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f  of(long)); // NO
228b0 54 45 3a 20 50 6f 69 6e 74 65 72 20 69 73 20 36  TE: Pointer is 6
228c0 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20 20 20  4-bits?..       
228d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
228e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22920 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22930 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
22940 62 6f 6f 6c 20 49 73 53 75 70 70 6f 72 74 65 64  bool IsSupported
22950 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20 20  RootKey(..      
22960 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
22970 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20  ry registry,..  
22980 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
22990 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
229a0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
229b0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
229c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
229d0 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
229e0 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
229f0 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  registry.Current
22a00 55 73 65 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20  User) ||..      
22a10 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74            Object
22a20 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73  .ReferenceEquals
22a30 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74  (rootKey, regist
22a40 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29  ry.LocalMachine)
22a50 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
22a60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22ab0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
22ac0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
22ad0 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
22ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
22af0 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
22b00 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
22b10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22b20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
22b30 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52  rmat("{0}{1}", R
22b40 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ootKeyName,..   
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77               wow
22b60 36 34 20 26 26 20 49 73 36 34 42 69 74 50 72 6f  64 && Is64BitPro
22b70 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20  cess() ?..      
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
22b90 5c 22 20 2b 20 57 6f 77 36 34 53 75 62 4b 65 79  \" + Wow64SubKey
22ba0 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d  Name : String.Em
22bb0 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  pty);..        }
22bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
22bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
22c20 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
22c30 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69  ring GetSystemDi
22c40 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
22c50 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
22c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
22c70 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
22c80 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20  WINDOWS..       
22c90 20 20 20 20 20 69 66 20 28 77 6f 77 36 34 29 0d       if (wow64).
22ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cc0 69 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74  if (systemDirect
22cd0 6f 72 79 57 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c  oryWow64 == null
22ce0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
22cf0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22d00 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d            system
22d10 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d  DirectoryWow64 =
22d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22d30 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
22d40 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65  NativeMethods.Ge
22d50 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
22d60 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
22d70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22d80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22d90 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
22da0 57 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20  Wow64;..        
22db0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
22dc0 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d     else..#endif.
22dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22df0 69 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74  if (systemDirect
22e00 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ory == null)..  
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72    systemDirector
22e30 79 20 3d 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  y = Environment.
22e40 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b  SystemDirectory;
22e50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22e60 20 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65      return syste
22e70 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20  mDirectory;..   
22e80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
22e90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
22ea0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
22eb0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22f00 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
22f10 47 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20 48  Generic String H
22f20 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
22f30 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
22f40 73 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c 61  string ForDispla
22f50 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
22f60 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20  object value..  
22f70 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
22f80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22f90 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
22fa0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22fb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
22fc0 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20  <null>";....    
22fd0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
22fe0 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
22ff0 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20      Type type = 
23000 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b  value.GetType();
23010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23020 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
23030 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d  of(XmlElement)).
23040 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23060 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65  XmlElement eleme
23070 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74  nt = (XmlElement
23080 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
23090 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
230a0 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65  t = element.Oute
230b0 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  rXml;..         
230c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
230d0 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20    else if (type 
230e0 3d 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69 6f  == typeof(Versio
230f0 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n))..           
23100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23110 20 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72 73      Version vers
23120 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29 76  ion = (Version)v
23130 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
23140 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
23150 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
23160 22 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29  "v{0}", version)
23170 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
23180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
23190 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
231a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
231b0 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75     result = valu
231c0 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d  e.ToString();...
231d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
231e0 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67   if (result.Leng
231f0 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  th == 0)..      
23200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23210 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d  turn "<empty>";.
23220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23230 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69     result = Stri
23240 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
23250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23260 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f  type.IsSubclassO
23270 66 28 74 79 70 65 6f 66 28 56 61 6c 75 65 54 79  f(typeof(ValueTy
23280 70 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a 20 22  pe)) ? "{0}" : "
23290 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20 20 20  \"{0}\"",..     
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
232b0 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20  esult);..       
232c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
232d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
232e0 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
232f0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
23300 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f 2f 2f 2f 2f 2f 2f  ////////////////
23330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23350 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23360 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62    #region Assemb
23370 6c 79 20 41 74 74 72 69 62 75 74 65 20 48 61 6e  ly Attribute Han
23380 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
23390 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
233a0 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 43  ing GetAssemblyC
233b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20  onfiguration(.. 
233c0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
233d0 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  bly assembly..  
233e0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
233f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23400 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
23410 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
23420 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23430 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23460 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
23470 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20  ly.IsDefined(.. 
23480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23490 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
234a0 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67  f(AssemblyConfig
234b0 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65  urationAttribute
234c0 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
234f0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
23500 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
23510 41 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69 67  Attribute config
23520 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20  uration =..     
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23540 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
23550 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74  ConfigurationAtt
23560 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20  ribute)..       
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23580 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65       assembly.Ge
23590 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65  tCustomAttribute
235a0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235c0 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
235d0 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
235e0 41 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20 20  Attribute),..   
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
23610 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20  se)[0];....     
23620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23630 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67     return config
23640 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72  uration.Configur
23650 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  ation;..        
23660 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23690 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
236a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
236b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236c0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
236f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23700 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
23710 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23720 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23770 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
23780 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
23790 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20  semblyTitle(..  
237a0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
237b0 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ly assembly..   
237c0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
237d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
237e0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
237f0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
23800 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23810 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
23820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
23830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23840 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
23850 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20  y.IsDefined(..  
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23870 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
23880 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
23890 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29  tribute), false)
238a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
238b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41    AssemblyTitleA
238e0 74 74 72 69 62 75 74 65 20 74 69 74 6c 65 20 3d  ttribute title =
238f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41                (A
23910 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
23920 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20  ibute)..        
23930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23940 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74      assembly.Get
23950 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73  CustomAttributes
23960 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
23990 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
239a0 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d  ), false)[0];...
239b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
239d0 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20  title.Title;..  
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
23a00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23a10 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
23a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a40 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
23a50 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
23a60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23a70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23a80 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
23a90 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  l;..        }.. 
23aa0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
23ab0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
23ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23b10 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61  #region .NET Fra
23b20 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d  mework Handling.
23b30 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23b40 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
23b50 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b  etFrameworkRootK
23b60 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
23b70 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
23b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23b90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23ba0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
23bb0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
23bc0 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45  \\Microsoft\\.NE
23bd0 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20  TFramework",..  
23be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
23bf0 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  tRootKeyName(wow
23c00 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  64));..        }
23c10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23c70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
23c80 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72  ring GetFramewor
23c90 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
23ca0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
23cb0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
23cc0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
23cd0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
23ce0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
23cf0 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
23d00 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
23d10 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
23d20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
23d30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23d40 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
23d50 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e  at = !String.IsN
23d60 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66  ullOrEmpty(platf
23d70 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ormName) ?..    
23d80 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
23d90 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
23da0 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a  \\v{2}\\{3}" :..
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dc0 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
23dd0 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a  \{1}\\v{2}";....
23de0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23df0 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
23e00 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74  (format, GetRoot
23e10 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 0d  KeyName(wow64),.
23e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23e30 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
23e40 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
23e50 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b  , platformName);
23e60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
23e70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23ec0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
23ed0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
23ee0 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  GetImageRuntimeV
23ef0 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
23f00 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
23f10 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
23f20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
23f30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
23f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f60 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
23f70 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
23f80 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
23f90 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79  y.ReflectionOnly
23fa0 4c 6f 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61 6d  LoadFrom(fileNam
23fb0 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e); /* throw */.
23fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23fd0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
23fe0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24000 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d  turn assembly.Im
24010 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
24020 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
24030 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
24040 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
24050 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24060 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
24070 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
24080 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
24090 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
240a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
240b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
240c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24100 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24110 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
24120 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74  tFrameworkDirect
24130 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
24140 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
24150 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
24160 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
24170 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
24180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
24190 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
241a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
241b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
241c0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
241d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
241e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
241f0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
24200 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
24210 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
24220 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24240 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46     rootKey, GetF
24250 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e  rameworkRootKeyN
24260 61 6d 65 28 77 6f 77 36 34 29 2c 20 66 61 6c 73  ame(wow64), fals
24270 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
24280 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
24290 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
242a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
242b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
242c0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242e0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
242f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24300 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52  object value = R
24310 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
24320 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
24340 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c  , "InstallRoot",
24350 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
24360 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
24370 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24380 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
24390 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
243a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
243b0 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
243c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
243d0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243f0 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65     (string)value
24400 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
24410 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72  "v{0}", framewor
24420 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20  kVersion));..   
24430 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24440 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
24450 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
24460 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
24470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
244b0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
244c0 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c  Per-Framework/Pl
244d0 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d  atform Handling.
244e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
244f0 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69   static void Ini
24500 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b  tializeFramework
24510 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20  List(..         
24520 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
24530 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
24540 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
24550 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
24560 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
24570 20 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b     ref Framework
24580 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
24590 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
245a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
245b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
245c0 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e  ameworkList == n
245d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
245e0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
245f0 69 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77  ist = new Framew
24600 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  orkList();....  
24610 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
24620 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
24630 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
24650 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74  ameworkList.Root
24660 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a  Key = rootKey;..
24670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
24680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
246d0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
246e0 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  st.Names == null
246f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24710 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
24720 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69  Names = new Stri
24730 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
24740 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
24750 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
24760 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
24770 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
24780 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
24790 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
247a0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
247b0 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  dd(".NETFramewor
247c0 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  k");....        
247d0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
247e0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
247f0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
24800 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
24810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24820 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24830 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
24840 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64  rkList.Names.Add
24850 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
24860 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20  mework");..     
24870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
24880 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
24890 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70  es.Add(".NETComp
248a0 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  actFramework");.
248b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
248c0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
248d0 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
248e0 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
248f0 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rk");..         
24900 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
24910 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24920 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
24980 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
24990 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
249a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
249c0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
249d0 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69  ions = new Versi
249e0 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20  onMap();....    
249f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24a00 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
24a10 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
24a20 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b  iguration.NoDesk
24a30 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20  top)..          
24a40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
24a60 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70  sionList desktop
24a70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65  VersionList = ne
24a80 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
24a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24aa0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
24ab0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
24ac0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
24ad0 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29  ation.NoNetFx20)
24ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24af0 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
24b00 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  pVersionList.Add
24b10 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20  (new Version(2, 
24b20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20  0, 50727));.... 
24b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b40 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
24b50 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
24b60 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
24b70 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20 20  .NoNetFx40)..   
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
24ba0 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
24bb0 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30  Version(4, 0, 30
24bc0 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  319));....      
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24be0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
24bf0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
24c00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
24c10 74 46 78 34 35 29 0d 0a 20 20 20 20 20 20 20 20  tFx45)..        
24c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c30 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
24c40 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
24c50 6f 6e 28 34 2c 20 35 2c 20 35 30 37 30 39 29 29  on(4, 5, 50709))
24c60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24c70 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
24c80 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
24c90 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f  Add(".NETFramewo
24ca0 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rk",..          
24cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
24cc0 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
24cd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24ce0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24cf0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
24d00 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
24d10 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
24d20 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74  ration.NoCompact
24d30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24d40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24d50 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
24d60 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
24d70 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63  .Add(".NETCompac
24d80 74 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20  tFramework",..  
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24da0 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f        new Versio
24db0 6e 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f  nList(new Versio
24dc0 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  n[] {..         
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
24de0 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c  ew Version(2, 0,
24df0 20 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73   0, 0), new Vers
24e00 69 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d  ion(3, 5, 0, 0).
24e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24e20 20 20 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20       }));..     
24e30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24e40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24e50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
24e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24eb0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
24ec0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d  PlatformNames ==
24ed0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24ee0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24ef0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
24f00 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
24f10 65 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c  es = new StringL
24f20 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
24f30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
24f40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
24f50 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
24f60 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f  uration.NoDeskto
24f70 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p)..            
24f80 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
24f90 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
24fa0 6d 65 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a  mes.Add(null);..
24fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24fc0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
24fd0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
24fe0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
24ff0 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20  NoCompact)..    
25000 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25020 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
25030 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
25040 64 64 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d  dd("PocketPC");.
25050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25060 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
25070 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
25080 2e 41 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65  .Add("Smartphone
25090 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
250a0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
250b0 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
250c0 61 6d 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77  ames.Add("Window
250d0 73 43 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  sCE");..        
250e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
250f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25100 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
25110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25150 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25160 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
25170 20 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77   bool HaveFramew
25180 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
25190 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
251a0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
251b0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
251c0 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
251d0 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
251e0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
251f0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
25200 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
25210 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
25220 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
25230 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
25240 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
25250 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
25260 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
25270 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
25280 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25290 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
252a0 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72  me = GetFramewor
252b0 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
252c0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
252d0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
252e0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
252f0 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29  formName, wow64)
25300 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25310 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
25320 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
25330 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
25340 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
25360 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
25370 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
25380 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
25390 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
253a0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
253b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
253c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
253d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
253e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253f0 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
25400 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54   != null) // NOT
25410 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b  E: Skip non-desk
25420 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  top...          
25430 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25440 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
25450 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
25460 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74   directory = Get
25470 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
25480 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
25490 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
254a0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
254b0 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  on, wow64, whatI
254c0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
254f0 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f  lOrEmpty(directo
25500 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
25510 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25520 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
25530 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
25540 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
25550 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
25580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25590 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
255a0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
255b0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255d0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
255e0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
255f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
25600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25610 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
25620 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20  ework {0} found 
25630 76 69 61 20 64 69 72 65 63 74 6f 72 79 20 7b 31  via directory {1
25640 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
25650 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
25660 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
25670 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
25680 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d  ay(directory)),.
25690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
256a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
256b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
256c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
256d0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
256e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
256f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
25700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
25750 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
25760 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65   HaveFrameworkRe
25770 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
25780 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
25790 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
257a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
257b0 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
257c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
257d0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
257e0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
257f0 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
25800 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
25810 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
25820 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
25830 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
25840 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
25850 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
25860 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
25870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25880 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
25890 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61  etFrameworkKeyNa
258a0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
258b0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
258c0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
258d0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
258e0 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  me, wow64);.... 
258f0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
25900 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
25910 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
25920 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
25930 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
25940 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
25950 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
25960 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
25970 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
25980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25990 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
259a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
259b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
259c0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
259d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
259e0 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
259f0 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69  ll) // NOTE: Ski
25a00 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a  p non-desktop...
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
25a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25a40 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
25a50 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
25a60 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
25a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a80 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
25a90 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
25aa0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
25ab0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25ac0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
25ad0 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64  mework {0} found
25ae0 20 76 69 61 20 72 65 67 69 73 74 72 79 20 7b 31   via registry {1
25af0 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
25b00 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
25b10 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
25b20 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
25b30 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20  ay(keyName)),.. 
25b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
25b60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25b70 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
25b80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25b90 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
25ba0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25bf0 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
25c00 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
25c10 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
25c20 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
25c30 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
25c40 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77  ol ForEachFramew
25c50 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20  orkConfig(..    
25c60 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
25c70 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
25c80 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
25c90 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
25ca0 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20  orkList,..      
25cb0 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43        FrameworkC
25cc0 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61  onfigCallback ca
25cd0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
25ce0 20 20 20 20 20 73 74 72 69 6e 67 20 76 65 72 73       string vers
25cf0 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70  ion, /* NOTE: Op
25d00 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20  tional. */..    
25d10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
25d20 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20  nvariant,..     
25d30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
25d40 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
25d50 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
25d60 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
25d70 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
25d80 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25d90 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
25da0 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
25db0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
25dc0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
25dd0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
25de0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
25df0 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
25e00 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
25e10 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
25e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
25e30 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
25e40 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
25e50 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
25e60 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
25e70 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
25e80 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
25ea0 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c  (registry == nul
25eb0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
25ec0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25ed0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
25ee0 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a  lid registry";..
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f00 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25f10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25f20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25f30 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d  frameworkList ==
25f40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25f50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25f60 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
25f70 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
25f80 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20  k list";..      
25f90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25fa0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
25fb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25fc0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
25fd0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20  ryKey rootKey = 
25fe0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f  frameworkList.Ro
25ff0 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
26000 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
26010 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
26020 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26030 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
26040 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74   = "invalid root
26050 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20   key";..        
26060 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
26070 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
26080 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26090 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f      if (!IsSuppo
260a0 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69  rtedRootKey(regi
260b0 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d  stry, rootKey)).
260c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260e0 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65  error = "root ke
260f0 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73  y must be per-us
26100 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e  er or per-machin
26110 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
26120 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
26130 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26140 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26150 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
26160 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  st.Names == null
26170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26190 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
261a0 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f  amework names fo
261b0 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
261c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
261d0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
261e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
261f0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
26200 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
26210 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
26220 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26230 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
26240 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  no framework ver
26250 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  sions found";.. 
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
26270 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
26280 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
262a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
262b0 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75  tformNames == nu
262c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
262d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
262e0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
262f0 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66  platform names f
26300 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
26310 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
26320 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
26330 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26340 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
26350 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
26360 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  t != frameworkLi
26370 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
26380 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20  .Count)..       
26390 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
263a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
263b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66  String.Format("f
263c0 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f  ramework name co
263d0 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74  unt {0} does not
263e0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
263f0 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68            "match
26400 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63   platform name c
26410 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65  ount {1}", frame
26420 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
26430 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ount,..         
26440 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
26450 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
26460 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a  mNames.Count);..
26470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26480 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
26490 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
264a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
264b0 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
264c0 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77  ; index < framew
264d0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
264e0 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  unt; index++).. 
264f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26520 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
26530 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
26540 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20  framework (e.g. 
26550 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29  ".NETFramework")
26560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26570 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74    //       and t
26580 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70  he name of the p
26590 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57  latform (e.g. "W
265a0 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20  indowsCE")...   
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
265c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
265d0 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
265e0 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  kName = framewor
265f0 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65  kList.Names[inde
26600 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x];..           
26610 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
26620 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65  formName = frame
26630 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
26640 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  mNames[index];..
26650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26660 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
26670 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
26680 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b  kip all non-desk
26690 74 6f 70 20 66 72 61 6d 65 77 6f 72 6b 73 20 28  top frameworks (
266a0 69 2e 65 2e 20 69 66 20 74 68 65 20 70 6c 61 74  i.e. if the plat
266b0 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  form..          
266c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e        //       n
266d0 61 6d 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29  ame is not null)
266e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
266f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
26700 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66         if (platf
26710 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  ormName != null)
26720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26730 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
26740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26750 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
26760 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
26770 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 74  Grab the support
26780 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  ed versions of t
26790 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a  his particular..
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267b0 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f  //       framewo
267c0 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rk...           
267d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
267e0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
267f0 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65  List frameworkVe
26800 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  rsionList;....  
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26820 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c   (version != nul
26830 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
26840 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26850 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
26860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26870 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75     // NOTE: Manu
26880 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74  al override of t
26890 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f  he *ONE* framewo
268a0 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20  rk version..    
268b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268c0 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63  //       to proc
268d0 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...          
268e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
268f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26900 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69    frameworkVersi
26910 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72  onList = new Ver
26920 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20  sionList();..   
26930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26940 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
26950 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
26960 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b  rsion(version));
26970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26980 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26990 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
269a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
269b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269c0 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b    if (!framework
269d0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72  List.Versions.Tr
269e0 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  yGetValue(..    
269f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a00 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
26a10 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65  kName, out frame
26a20 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29  workVersionList)
26a30 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72               (fr
26a50 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
26a60 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  st == null))..  
26a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26a90 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
26aa0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26ae0 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72      foreach (Ver
26af0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
26b00 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f  rsion in framewo
26b10 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a  rkVersionList)..
26b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26b40 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
26b50 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
26b60 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
26b70 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
26b80 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
26b90 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
26ba0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
26bb0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65    "frameworkName
26be0 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72   = {0}, framewor
26bf0 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20  kVersion = {1}, 
26c00 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70 6c               "pl
26c20 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d  atformName = {2}
26c30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
26c40 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20  ameworkName),.. 
26c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c60 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
26c70 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
26c80 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
26c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
26ca0 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72  rDisplay(platfor
26cb0 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  mName)), traceCa
26cc0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ce0 69 66 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f  if (!HaveFramewo
26cf0 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  rkDirectory(..  
26d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d10 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
26d20 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
26d30 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
26d40 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
26d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d60 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77   platformName, w
26d70 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
26d80 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26db0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
26dc0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
26dd0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
26de0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
26e00 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
26e10 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
26e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e30 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
26e40 46 72 61 6d 65 77 6f 72 6b 20 64 69 72 65 63 74  Framework direct
26e50 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73  ory not found, s
26e60 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20  kipping...",..  
26e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
26e90 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26eb0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
26ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ed0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26ef0 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c  (callback == nul
26f00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
26f10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
26f20 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
26f40 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
26f50 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  GetFrameworkDire
26f60 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f80 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
26f90 72 6b 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34  rkVersion, wow64
26fa0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
26fb0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
26fc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
26fd0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
26fe0 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
26ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27000 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27020 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
27030 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
27040 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
27070 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
27080 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
27090 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
270c0 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 69   {0} directory i
270d0 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a  s invalid, " +..
270e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270f0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
27100 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
27110 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
27120 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27140 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
27150 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
27160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27170 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
27180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27190 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
271a0 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74            direct
271b0 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ory = Path.Combi
271c0 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 43  ne(directory, "C
271d0 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271f0 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
27200 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29  xists(directory)
27210 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27220 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27240 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
27250 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
27260 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
27270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27280 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
27290 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
272a0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
272b0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
272c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272d0 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
272e0 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79  rk {0} directory
272f0 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {1} does not " 
27300 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27320 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e 67 2e  exist, skipping.
27330 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
27340 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
27350 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
27380 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61 74  tory)), traceCat
27390 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273b0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
273e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
273f0 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  g fileName = Pat
27400 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
27410 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63 6f  ory, "machine.co
27420 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  nfig");....     
27430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27440 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73 28  f (!File.Exists(
27450 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  fileName))..    
27460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27480 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
27490 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
274a0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
274b0 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
274c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274d0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
274e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
274f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27510 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
27520 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
27530 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e 6f  file {1} does no
27540 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20  t exist, " +..  
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27560 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70            "skipp
27570 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
27580 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
27590 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
275a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275b0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
275c0 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63 65  ileName)), trace
275d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275f0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
27600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27610 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
27630 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20  ol localSaved = 
27640 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
27650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
27660 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20   (!callback(..  
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27680 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
27690 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e  me, invariant, n
276a0 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e  ame, description
276b0 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  , typeName,..   
276c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276d0 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
276e0 79 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74  yName, clientDat
276f0 61 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f  a, wow64, throwO
27700 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27720 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
27730 65 72 62 6f 73 65 2c 20 72 65 66 20 6c 6f 63 61  erbose, ref loca
27740 6c 53 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f  lSaved, ref erro
27750 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
27760 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27780 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
27790 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
277a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
277c0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
277d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277f0 20 20 20 69 66 20 28 6c 6f 63 61 6c 53 61 76 65     if (localSave
27800 64 20 26 26 20 21 73 61 76 65 64 29 0d 0a 20 20  d && !saved)..  
27810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27820 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20            saved 
27830 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27850 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
27860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27870 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
27880 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
27890 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
278a0 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20  y.Lowest,..     
278b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278c0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
278d0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
278e0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
278f0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
27900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27910 20 20 20 20 20 20 20 20 20 22 6c 6f 63 61 6c 53           "localS
27920 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65  aved = {0}, save
27930 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  d = {1}",..     
27940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27950 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
27960 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61 76 65 64  splay(localSaved
27970 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 61  ), ForDisplay(sa
27980 76 65 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ved)),..        
27990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
279b0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
279c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
279d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
279f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27a00 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
27a10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27a20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
27a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
27a70 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
27a80 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
27a90 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
27aa0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
27ab0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f  e static bool Fo
27ac0 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65  rEachFrameworkRe
27ad0 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
27ae0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
27af0 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y registry,..   
27b00 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
27b10 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
27b20 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
27b30 20 20 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69     FrameworkRegi
27b40 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c  stryCallback cal
27b50 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
27b60 20 20 20 20 73 74 72 69 6e 67 20 76 65 72 73 69      string versi
27b70 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74  on, /* NOTE: Opt
27b80 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20  ional. */..     
27b90 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
27ba0 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
27bb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
27bc0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
27bd0 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
27be0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
27bf0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
27c00 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
27c10 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
27c20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
27c30 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
27c40 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
27c50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
27c60 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e  f (registry == n
27c70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27c80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27c90 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
27ca0 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b  valid registry";
27cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27cc0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
27cf0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20   (frameworkList 
27d00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27d10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27d20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
27d30 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
27d40 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20  ork list";..    
27d50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27d60 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
27d70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27d80 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
27d90 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20  stryKey rootKey 
27da0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
27db0 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
27dc0 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
27dd0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
27de0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27e00 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
27e10 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
27e20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27e30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
27e40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27e50 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70        if (!IsSup
27e60 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65  portedRootKey(re
27e70 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29  gistry, rootKey)
27e80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
27e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ea0 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
27eb0 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
27ec0 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
27ed0 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
27ee0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
27ef0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
27f00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27f10 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
27f20 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75  List.Names == nu
27f30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27f40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27f50 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
27f60 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20  framework names 
27f70 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
27f80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27f90 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
27fa0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27fb0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
27fc0 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  rkList.Versions 
27fd0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27fe0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27ff0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
28000 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76   "no framework v
28010 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
28020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28030 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
28040 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28050 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28060 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50  (frameworkList.P
28070 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20  latformNames == 
28080 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
28090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
280a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
280b0 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73  o platform names
280c0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
280d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
280e0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
280f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28100 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
28110 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
28120 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b  unt != framework
28130 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
28140 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20  es.Count)..     
28150 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28160 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
28170 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
28180 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20  "framework name 
28190 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e  count {0} does n
281a0 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  ot " +..        
281b0 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74              "mat
281c0 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  ch platform name
281d0 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61   count {1}", fra
281e0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
281f0 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  .Count,..       
28200 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
28210 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
28220 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b  ormNames.Count);
28230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28240 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
28250 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28270 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
28280 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d   0; index < fram
28290 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
282a0 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d  Count; index++).
282b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
282c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
282e0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
282f0 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  b the name of th
28300 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67  e framework (e.g
28310 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  . ".NETFramework
28320 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ")..            
28330 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
28340 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
28350 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20   platform (e.g. 
28360 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20  "WindowsCE")... 
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28380 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
28390 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
283a0 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  orkName = framew
283b0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e  orkList.Names[in
283c0 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex];..         
283d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
283e0 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61  atformName = fra
283f0 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
28400 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  ormNames[index];
28410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28420 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
28430 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
28440 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72   Grab the suppor
28450 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ted versions of 
28460 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d  this particular.
28470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28480 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77   //       framew
28490 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ork...          
284a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
284b0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
284c0 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56  nList frameworkV
284d0 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20  ersionList;.... 
284e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
284f0 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75  f (version != nu
28500 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28510 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28540 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e      // NOTE: Man
28550 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20  ual override of 
28560 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77  the *ONE* framew
28570 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20  ork version..   
28580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28590 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f   //       to pro
285a0 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
285b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285d0 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
285e0 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65  ionList = new Ve
285f0 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20  rsionList();..  
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28610 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69    frameworkVersi
28620 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
28630 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29  ersion(version))
28640 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28650 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
28660 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
28670 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28690 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72     if (!framewor
286a0 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54  kList.Versions.T
286b0 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  ryGetValue(..   
286c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286d0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
286e0 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d  rkName, out fram
286f0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
28700 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
28710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66                (f
28720 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
28730 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ist == null)).. 
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28750 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
28770 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
28780 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
28790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
287b0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
287c0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
287d0 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77  ersion in framew
287e0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d  orkVersionList).
287f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28800 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28810 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
28820 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
28830 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
28840 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
28860 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
28870 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
28880 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288a0 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d     "frameworkNam
288b0 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f  e = {0}, framewo
288c0 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c  rkVersion = {1},
288d0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
288e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70                "p
288f0 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32  latformName = {2
28900 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  }", ForDisplay(f
28910 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a  rameworkName),..
28920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28930 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
28940 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
28950 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
28960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
28970 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f  orDisplay(platfo
28980 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  rmName)), traceC
28990 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
289a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289b0 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65 77   if (!HaveFramew
289c0 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  orkRegistry(..  
289d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289e0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
289f0 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
28a00 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
28a10 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a30 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77   platformName, w
28a40 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
28a50 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
28a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a80 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
28a90 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
28aa0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
28ab0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
28ad0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
28ae0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b00 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
28b10 46 72 61 6d 65 77 6f 72 6b 20 72 65 67 69 73 74  Framework regist
28b20 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  ry not found, sk
28b30 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
28b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b50 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
28b60 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
28b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b80 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
28b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ba0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28bc0 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
28bd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28be0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
28bf0 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
28c00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28c10 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  !callback(..    
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c30 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
28c40 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
28c50 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
28c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
28c80 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 63 6c 69  latformName, cli
28c90 65 6e 74 44 61 74 61 2c 20 77 6f 77 36 34 2c 20  entData, wow64, 
28ca0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
28cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
28cd0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
28ce0 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
28cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28d20 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
28d30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
28d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
28d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28d70 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
28d80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28d90 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
28da0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28df0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
28e00 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53 74 75  n Per-Visual Stu
28e10 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61 6e 64  dio Version Hand
28e20 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
28e30 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
28e40 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69  d InitializeVsLi
28e50 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st(..           
28e60 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
28e70 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
28e80 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
28e90 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
28ea0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
28eb0 20 72 65 66 20 56 73 4c 69 73 74 20 76 73 4c 69   ref VsList vsLi
28ec0 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
28ed0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
28ee0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
28ef0 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
28f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
28f10 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73 4c 69  sList = new VsLi
28f20 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
28f30 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e       if (vsList.
28f40 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  RootKey == null)
28f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f60 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79    vsList.RootKey
28f70 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20   = rootKey;.... 
28f80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
28f90 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  sList.Versions =
28fa0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
28fb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28fc0 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56          vsList.V
28fd0 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65  ersions = new Ve
28fe0 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a  rsionList();....
28ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29000 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
29010 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
29020 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
29030 56 73 32 30 30 35 29 0d 0a 20 20 20 20 20 20 20  Vs2005)..       
29040 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
29050 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
29060 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c 20  (new Version(8, 
29070 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d 0a 0d 0a  0)); // 2005....
29080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29090 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
290a0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
290b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
290c0 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20 20 20  Vs2008)..       
290d0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
290e0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
290f0 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c 20  (new Version(9, 
29100 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d 0a 0d 0a  0)); // 2008....
29110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29120 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
29130 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
29140 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
29150 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20 20 20  Vs2010)..       
29160 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
29170 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
29180 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 30 2c  (new Version(10,
29190 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d 0a 0d 0a   0));// 2010....
291a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291b0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
291c0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
291d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
291e0 56 73 32 30 31 32 29 0d 0a 20 20 20 20 20 20 20  Vs2012)..       
291f0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
29200 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
29210 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 31 2c  (new Version(11,
29220 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d 0a 20 20   0));// 2012..  
29230 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
29240 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29250 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29290 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
292a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
292b0 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56 73 56  tic bool HaveVsV
292c0 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
292d0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
292e0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
292f0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
29300 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
29310 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
29320 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
29330 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
29340 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
29350 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
29360 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
29370 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
29380 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
29390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
293a0 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
293b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
293c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
293d0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
293e0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
293f0 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
29400 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
29410 69 78 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  ix, wow64);.... 
29420 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
29430 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
29440 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
29450 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
29460 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
29470 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
29480 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
29490 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
294a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
294b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
294c0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
294d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
294e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
294f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
29500 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
29510 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72   value = Registr
29520 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65  yHelper.GetValue
29530 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29540 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73         key, "Ins
29550 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20  tallDir", null, 
29560 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
29570 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29580 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
29590 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
295a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
295c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
295d0 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
295e0 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61  ory = (string)va
295f0 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
29600 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
29610 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
29620 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
29630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29640 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
29650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29660 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
29670 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f  y.Exists(directo
29680 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
29690 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
296a0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
296b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
296c0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
296d0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
296e0 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
296f0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
29700 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
29710 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
29720 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56                "V
29740 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30 7d  isual Studio {0}
29750 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65 63 74   found in direct
29760 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  ory {1}.",..    
29770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29780 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72  ForDisplay(vsVer
29790 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61  sion), ForDispla
297a0 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a  y(directory)),..
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
297d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
297e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
297f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
29800 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
29810 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
29820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
29870 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
29880 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
29890 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
298a0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
298b0 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72  ool ForEachVsVer
298c0 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20  sionRegistry(.. 
298d0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
298e0 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
298f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
29900 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20  sList vsList,.. 
29910 20 20 20 20 20 20 20 20 20 20 20 56 69 73 75 61             Visua
29920 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43  lStudioRegistryC
29930 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
29940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
29950 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
29960 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
29970 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
29980 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
29990 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
299a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
299b0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
299c0 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
299d0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
299e0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
299f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
29a00 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
29a10 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
29a20 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
29a30 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
29a40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29a50 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d   if (registry ==
29a60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
29a70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29a80 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
29a90 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79  invalid registry
29aa0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
29ab0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
29ac0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
29ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29ae0 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75  if (vsList == nu
29af0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29b00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29b10 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
29b20 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b 0d 0a  alid VS list";..
29b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b40 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
29b50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29b60 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
29b70 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
29b80 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52 6f 6f  Key = vsList.Roo
29b90 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
29ba0 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
29bb0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
29bc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29bd0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
29be0 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
29bf0 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
29c00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29c10 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29c20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29c30 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f 72     if (!IsSuppor
29c40 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73  tedRootKey(regis
29c50 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a  try, rootKey))..
29c60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
29c80 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79  rror = "root key
29c90 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65   must be per-use
29ca0 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65  r or per-machine
29cb0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
29cc0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
29cd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
29ce0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29cf0 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69  if (vsList.Versi
29d00 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
29d10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
29d30 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65 72 73  or = "no VS vers
29d40 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
29d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29d60 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29d70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29d80 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
29d90 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56 65 72  h (Version vsVer
29da0 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74 2e 56  sion in vsList.V
29db0 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  ersions)..      
29dc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29dd0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
29de0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
29df0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
29e00 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
29e10 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
29e20 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
29e30 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
29e40 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
29e50 20 20 20 20 20 20 20 20 20 20 20 20 22 76 73 56              "vsV
29e60 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46  ersion = {0}", F
29e70 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73  orDisplay(vsVers
29e80 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
29e90 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
29ea0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29ec0 66 20 28 21 48 61 76 65 56 73 56 65 72 73 69 6f  f (!HaveVsVersio
29ed0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
29ee0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
29ef0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
29f00 73 75 66 66 69 78 2c 20 77 6f 77 36 34 2c 20 77  suffix, wow64, w
29f10 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
29f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29f40 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
29f50 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
29f60 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
29f70 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
29f80 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
29f90 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
29fa0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
29fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fc0 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64 69     "Visual Studi
29fd0 6f 20 76 65 72 73 69 6f 6e 20 6e 6f 74 20 66 6f  o version not fo
29fe0 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e  und, skipping...
29ff0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2a000 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2a010 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a030 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
2a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2a050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a060 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20     if (callback 
2a070 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2a090 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
2a0a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2a0b0 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  callback(..     
2a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0d0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
2a0e0 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
2a0f0 61 63 6b 61 67 65 2c 20 63 6c 69 65 6e 74 44 61  ackage, clientDa
2a100 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2a110 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77               wow
2a120 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  64, throwOnMissi
2a130 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
2a140 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ose, ref error))
2a150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a160 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a170 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a180 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2a190 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2a1a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a1b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2a1c0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2a1d0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2a1e0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2a1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a230 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a240 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67    #region Config
2a250 75 72 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e  uration File Han
2a260 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b  dling..        [
2a270 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
2a280 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
2a290 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
2a2a0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2a2b0 63 20 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76  c bool AddDbProv
2a2c0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
2a2d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2a2e0 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
2a2f0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
2a300 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20  nvariant,..     
2a310 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
2a320 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2a330 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
2a340 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2a350 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
2a360 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2a370 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
2a380 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
2a390 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2a3a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2a3b0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2a3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2a3d0 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
2a3e0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2a3f0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2a400 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2a410 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a420 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
2a430 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2a440 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
2a450 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
2a460 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
2a470 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
2a480 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
2a490 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
2a4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
2a4b0 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
2a4c0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2a4d0 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
2a4e0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2a4f0 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
2a500 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
2a510 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
2a520 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41  Format(XPathForA
2a530 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
2a540 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65  iant)) as XmlEle
2a550 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
2a560 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d       if (addElem
2a570 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
2a580 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a590 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
2a5a0 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d  ing[] elementNam
2a5b0 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20  es = {..        
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 79 73              "sys
2a5d0 74 65 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72  tem.data", "DbPr
2a5e0 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 22  oviderFactories"
2a5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a600 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    };....        
2a610 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
2a620 6e 74 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65  nt previousEleme
2a630 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
2a640 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
2a650 6e 74 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65  nt.DocumentEleme
2a660 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61  nt; /* configura
2a670 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  tion */....     
2a680 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
2a690 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65  ch (string eleme
2a6a0 6e 74 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e  ntName in elemen
2a6b0 74 4e 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20  tNames)..       
2a6c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6e0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65  addElement = pre
2a6f0 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c  viousElement.Sel
2a700 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a720 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e          elementN
2a730 61 6d 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65  ame) as XmlEleme
2a740 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nt;....         
2a750 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
2a760 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c  ddElement == nul
2a770 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2a780 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7a0 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20     addElement = 
2a7b0 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45  document.CreateE
2a7c0 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20  lement(..       
2a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7e0 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65       elementName
2a7f0 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
2a800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a810 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76              prev
2a820 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65  iousElement.Appe
2a830 6e 64 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65  ndChild(addEleme
2a840 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
2a850 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a870 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
2a880 6e 74 20 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b  nt = addElement;
2a890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a8a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a8b0 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
2a8c0 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65  t = document.Cre
2a8d0 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20  ateElement(..   
2a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8f0 20 22 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45   "add", String.E
2a900 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
2a910 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
2a920 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64  usElement.Append
2a930 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74  Child(addElement
2a940 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a950 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
2a960 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2a970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a980 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
2a990 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e  uals(addElement.
2a9a0 47 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61  GetAttribute("na
2a9b0 6d 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me"),..         
2a9c0 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c             name,
2a9d0 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
2a9e0 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
2a9f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
2aa10 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
2aa20 75 74 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65  ute("name", name
2aa30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2aa40 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
2aa50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2aa60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2aa70 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
2aa80 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
2aa90 74 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61  tAttribute("inva
2aaa0 72 69 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20  riant"),..      
2aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2aac0 76 61 72 69 61 6e 74 2c 20 53 74 72 69 6e 67 43  variant, StringC
2aad0 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
2aae0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
2aaf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ab00 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
2ab10 65 74 41 74 74 72 69 62 75 74 65 28 22 69 6e 76  etAttribute("inv
2ab20 61 72 69 61 6e 74 22 2c 20 69 6e 76 61 72 69 61  ariant", invaria
2ab30 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
2ab40 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
2ab50 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2ab60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ab70 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
2ab80 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e  uals(addElement.
2ab90 47 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65  GetAttribute("de
2aba0 73 63 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20  scription"),..  
2abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abc0 20 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53    description, S
2abd0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
2abe0 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
2abf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ac00 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
2ac10 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
2ac20 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c  e("description",
2ac30 20 64 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a   description);..
2ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac50 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2ac60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ac80 6e 67 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20  ng fullTypeName 
2ac90 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2aca0 22 7b 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20  "{0}, {1}",..   
2acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
2acc0 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e  eName, assemblyN
2acd0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2ace0 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
2acf0 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65  .Equals(addEleme
2ad00 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28  nt.GetAttribute(
2ad10 22 74 79 70 65 22 29 2c 0d 0a 20 20 20 20 20 20  "type"),..      
2ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 75                fu
2ad30 6c 6c 54 79 70 65 4e 61 6d 65 2c 20 53 74 72 69  llTypeName, Stri
2ad40 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
2ad50 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  inal))..        
2ad60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ad70 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
2ad80 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
2ad90 74 79 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e  type", fullTypeN
2ada0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
2adb0 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
2adc0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2add0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ade0 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20     if (dirty || 
2adf0 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
2ae00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ae10 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
2ae20 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
2ae30 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2ae40 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2ae50 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
2ae60 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae80 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2ae90 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2aea0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aec0 20 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65         "addEleme
2aed0 6e 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69  nt = {0}", ForDi
2aee0 73 70 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74  splay(addElement
2aef0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2af10 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af30 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
2af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af50 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28    document.Save(
2af60 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
2af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
2af80 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a  lesModified++;..
2af90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2afa0 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
2afb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2afc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2afd0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2afe0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2aff0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b030 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2b040 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2b050 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2b060 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2b070 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2b080 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
2b090 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  veDbProviderFact
2b0a0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
2b0b0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
2b0c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b0d0 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
2b0e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2b0f0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2b100 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2b110 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2b120 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
2b130 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
2b140 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2b150 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2b160 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2b170 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
2b180 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  rty = false;..  
2b190 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63            XmlDoc
2b1a0 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d  ument document =
2b1b0 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74   new XmlDocument
2b1c0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2b1d0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73     document.Pres
2b1e0 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d  erveWhitespace =
2b1f0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2b200 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61      document.Loa
2b210 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  d(fileName);....
2b220 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
2b230 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e  lement addElemen
2b240 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
2b250 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
2b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b270 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
2b280 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
2b290 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73  , invariant)) as
2b2a0 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b2c0 61 64 64 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75  addElement != nu
2b2d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2b2e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b2f0 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50      addElement.P
2b300 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65  arentNode.Remove
2b310 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74  Child(addElement
2b320 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2b330 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
2b340 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b360 58 6d 6c 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76  XmlElement remov
2b370 65 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d  eElement = docum
2b380 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
2b390 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
2b3a0 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
2b3b0 72 6d 61 74 28 58 50 61 74 68 46 6f 72 52 65 6d  rmat(XPathForRem
2b3c0 6f 76 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  oveElement, inva
2b3d0 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c  riant)) as XmlEl
2b3e0 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ement;....      
2b3f0 20 20 20 20 20 20 69 66 20 28 72 65 6d 6f 76 65        if (remove
2b400 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29  Element != null)
2b410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b430 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2e 50   removeElement.P
2b440 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65  arentNode.Remove
2b450 43 68 69 6c 64 28 72 65 6d 6f 76 65 45 6c 65 6d  Child(removeElem
2b460 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
2b470 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
2b480 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2b490 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b4a0 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20     if (dirty || 
2b4b0 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
2b4c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b4d0 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
2b4e0 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
2b4f0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2b500 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2b510 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
2b520 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
2b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b540 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2b550 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2b560 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b580 20 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65         "addEleme
2b590 6e 74 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f 76 65  nt = {0}, remove
2b5a0 45 6c 65 6d 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d  Element = {1}",.
2b5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b5c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2b5d0 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 2c  lay(addElement),
2b5e0 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 6d 6f   ForDisplay(remo
2b5f0 76 65 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20  veElement)),..  
2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b610 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2b620 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2b630 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
2b640 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2b650 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2b660 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d  ent.Save(fileNam
2b670 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2b680 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69         filesModi
2b690 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  fied++;....     
2b6a0 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
2b6b0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2b6c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b6d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2b6e0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2b6f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2b700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b740 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2b750 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2b760 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64   ProcessDbProvid
2b770 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
2b780 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2b790 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
2b7a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
2b7b0 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20  ariant,..       
2b7c0 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
2b7d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2b7e0 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f  tring descriptio
2b7f0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2b800 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c  string typeName,
2b810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
2b820 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
2b830 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  blyName,..      
2b840 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
2b850 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
2b860 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2b870 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2b880 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
2b890 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
2b8a0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2b8b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2b8c0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2b8d0 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
2b8e0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2b8f0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2b900 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2b910 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2b920 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
2b930 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
2b940 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
2b950 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
2b960 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
2b970 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b980 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
2b990 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2b9b0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
2b9c0 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20  ramework config 
2b9d0 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
2b9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b9f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2ba00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ba10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ba20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
2ba30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ba40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ba50 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72  RemoveDbProvider
2ba60 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
2ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
2ba80 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e  leName, invarian
2ba90 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  t, whatIf, verbo
2baa0 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a  se, ref saved,..
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bac0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 20 26      ref error) &
2bad0 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
2bae0 20 20 20 41 64 64 44 62 50 72 6f 76 69 64 65 72     AddDbProvider
2baf0 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
2bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
2bb10 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e  leName, invarian
2bb20 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70  t, name, descrip
2bb30 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d  tion, typeName,.
2bb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb50 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d       assemblyNam
2bb60 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2bb70 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 20 72  se, ref saved, r
2bb80 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2bb90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2bba0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2bbb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2bbc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2bbd0 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69  rn RemoveDbProvi
2bbe0 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc00 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72   fileName, invar
2bc10 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65  iant, whatIf, ve
2bc20 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64  rbose, ref saved
2bc30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bc40 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
2bc50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2bc60 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
2bc70 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2bc80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2bc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2bce0 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20  region Assembly 
2bcf0 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c 69 6e 67  Folders Handling
2bd00 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2bd10 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
2bd20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  GetAssemblyFolde
2bd30 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rsKeyName(..    
2bd40 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2bd50 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
2bd60 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2bd70 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
2bd80 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2bd90 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
2bda0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
2bdb0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
2bdc0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2bdd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2bde0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2bdf0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
2be00 68 69 73 20 72 65 67 69 73 74 72 79 20 6b 65 79  his registry key
2be10 20 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61   appears to alwa
2be20 79 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c  ys be 32-bit onl
2be30 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  y..            /
2be40 2f 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72  /       (i.e. pr
2be50 6f 62 61 62 6c 79 20 62 65 63 61 75 73 65 20 69  obably because i
2be60 74 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62  t is only used b
2be70 79 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20  y Visual..      
2be80 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53        //       S
2be90 74 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20  tudio, which is 
2bea0 63 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73  currently always
2beb0 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a   32-bit only)...
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2bee0 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72  ng format = !Str
2bef0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
2bf00 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20  y(platformName) 
2bf10 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
2bf20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
2bf30 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b  ft\\{1}\\v{2}\\{
2bf40 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64  3}\\AssemblyFold
2bf50 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20  ersEx" :..      
2bf60 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
2bf70 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c  Microsoft\\{1}\\
2bf80 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f  v{2}\\AssemblyFo
2bf90 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20  ldersEx";....   
2bfa0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2bfb0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f  String.Format(fo
2bfc0 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79  rmat, GetRootKey
2bfd0 4e 61 6d 65 28 77 6f 77 36 34 29 2c 0d 0a 20 20  Name(wow64),..  
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2bff0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
2c000 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
2c010 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20  latformName);.. 
2c020 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2c030 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2c040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2c080 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2c090 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f  tatic bool AddTo
2c0a0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
2c0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2c0c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2c0d0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2c0e0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
2c0f0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
2c100 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
2c110 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2c120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2c130 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
2c140 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2c150 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
2c160 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2c170 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
2c180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2c190 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2c1a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2c1b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2c1c0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2c1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2c1e0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2c1f0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c200 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c210 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
2c220 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c  ame = GetAssembl
2c230 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
2c240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c250 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
2c260 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2c270 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2c280 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2c290 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2c2a0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2c2b0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2c2c0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2c2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c2e0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2c2f0 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61  yName, true, wha
2c300 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2c310 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c330 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2c340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c350 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c360 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2c370 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c390 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2c3a0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2c3b0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2c3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c3d0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2c3e0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c400 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2c410 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c420 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2c430 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2c440 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2c450 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2c460 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2c470 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2c490 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77  y, subKeyName, w
2c4a0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2c4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c4c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c4d0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2c4e0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c500 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c510 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2c520 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2c530 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c550 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
2c560 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
2c570 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
2c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c590 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
2c5a0 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
2c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2c5d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2c5e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c600 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2c610 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c630 20 20 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c      subKey, null
2c640 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 61  , directory, wha
2c650 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c670 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2c680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c690 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2c6a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c6b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2c6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c700 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2c710 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2c720 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64  FromAssemblyFold
2c730 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
2c740 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2c750 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2c760 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2c770 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
2c780 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2c790 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
2c7a0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2c7b0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
2c7c0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
2c7d0 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
2c7e0 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
2c7f0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2c800 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2c810 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
2c820 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2c830 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2c840 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2c850 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2c860 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2c870 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2c880 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2c890 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2c8a0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
2c8b0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b  AssemblyFoldersK
2c8c0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
2c8d0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2c8e0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2c8f0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2c900 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d  rmName, wow64);.
2c910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2c920 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2c930 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2c940 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2c950 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2c960 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2c970 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72  Key, keyName, tr
2c980 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
2c990 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2c9a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c9b0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
2c9c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2c9d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2c9f0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2ca00 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2ca20 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
2ca30 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
2ca40 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
2ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca60 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2ca70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2ca80 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ca90 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2caa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2cac0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
2cad0 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  leteSubKey(..   
2cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2caf0 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
2cb00 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
2cb10 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2cb20 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2cb30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2cb40 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2cb50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2cb60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2cb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2cbb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2cbc0 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
2cbd0 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  essAssemblyFolde
2cbe0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2cbf0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2cc00 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2cc10 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
2cc20 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
2cc30 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2cc40 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
2cc50 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2cc60 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
2cc70 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2cc80 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
2cc90 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
2cca0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ccc0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2ccd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2cce0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2ccf0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2cd00 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2cd10 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2cd20 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2cd30 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2cd40 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
2cd50 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
2cd60 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
2cd70 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
2cd80 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cda0 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
2cdb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2cdd0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
2cde0 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63  ramework callbac
2cdf0 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
2ce00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ce10 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2ce20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ce30 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
2ce40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ce50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ce60 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46    return RemoveF
2ce70 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
2ce80 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2ce90 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2cea0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
2ceb0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2cec0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2ced0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cee0 20 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a        LegacyProj
2cef0 65 63 74 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20  ectName, wow64, 
2cf00 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
2cf10 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2cf30 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20   error) &&..    
2cf40 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64 54              AddT
2cf50 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  oAssemblyFolders
2cf60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2cf70 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2cf80 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
2cf90 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2cfa0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfc0 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c      ProjectName,
2cfd0 20 70 61 69 72 2e 58 2c 20 77 6f 77 36 34 2c 20   pair.X, wow64, 
2cfe0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2cff0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
2d000 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2d010 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2d020 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d040 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41  turn RemoveFromA
2d050 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
2d060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d070 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
2d080 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
2d090 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
2d0a0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0c0 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77    ProjectName, w
2d0d0 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  ow64, throwOnMis
2d0e0 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
2d0f0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2d100 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2d110 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2d120 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2d130 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2d140 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2d150 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2d160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d190 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d1a0 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
2d1b0 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69  al Studio Handli
2d1c0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
2d1d0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2d1e0 67 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61  g GetVsRootKeyNa
2d1f0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2d200 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
2d210 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2d220 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d230 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
2d240 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69  .Format("{0}\\Mi
2d250 63 72 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53  crosoft\\VisualS
2d260 74 75 64 69 6f 22 2c 0d 0a 20 20 20 20 20 20 20  tudio",..       
2d270 20 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74           GetRoot
2d280 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 29 3b  KeyName(wow64));
2d290 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2d2a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2d2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2d2f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2d300 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
2d310 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  GetVsKeyName(.. 
2d320 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2d330 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2d340 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2d350 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
2d360 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2d370 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
2d380 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2d390 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
2d3a0 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
2d3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d3c0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
2d3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2d3e0 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
2d3f0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2d400 20 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d      "{0}\\{1}{2}
2d410 22 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e  ", GetVsRootKeyN
2d420 61 6d 65 28 77 6f 77 36 34 29 2c 20 76 73 56 65  ame(wow64), vsVe
2d430 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 29 3b 0d  rsion, suffix);.
2d440 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2d450 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2d460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2d4a0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2d4b0 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44   Visual Studio D
2d4c0 61 74 61 20 53 6f 75 72 63 65 20 48 61 6e 64 6c  ata Source Handl
2d4d0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
2d4e0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2d4f0 20 41 64 64 56 73 44 61 74 61 53 6f 75 72 63 65   AddVsDataSource
2d500 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2d510 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2d520 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
2d530 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
2d540 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2d550 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
2d560 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
2d570 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
2d580 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d590 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2d5a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2d5b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2d5c0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2d5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2d5e0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2d5f0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2d600 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d610 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2d620 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2d630 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d640 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2d650 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2d660 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
2d670 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d680 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2d690 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d6a0 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
2d6b0 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
2d6c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2d6e0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2d6f0 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
2d700 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2d710 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2d720 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d730 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
2d740 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
2d750 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
2d760 73 75 66 66 69 78 2c 20 77 6f 77 36 34 29 3b 0d  suffix, wow64);.
2d770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2d780 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2d790 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2d7a0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2d7b0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2d7d0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
2d7e0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
2d7f0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2d800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d810 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
2d820 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2d830 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d850 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2d860 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d880 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2d890 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2d8a0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
2d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8c0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2d8d0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2d8e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d8f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2d900 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d920 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2d930 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
2d940 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2d950 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d970 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f      key, "DataSo
2d980 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  urces", true, wh
2d990 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2d9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d9b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d9c0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
2d9d0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2da00 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2da10 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2da20 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da40 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2da50 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2da60 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c  }\\DataSources",
2da70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2da90 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2dab0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dad0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2dae0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2daf0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2db00 79 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20  y dataSourceKey 
2db10 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2db30 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
2db40 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
2db50 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db70 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
2db80 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
2db90 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
2dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbb0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2dbc0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2dbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dbf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61            if (da
2dc00 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e  taSourceKey == n
2dc10 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2dc30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2dc50 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2dc60 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc80 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2dc90 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
2dca0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20  key: {0}\\{1}", 
2dcb0 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
2dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcd0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
2dce0 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72  taSourceId.ToStr
2dcf0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
2dd00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd60 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2dd70 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd90 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 53             dataS
2dda0 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20  ourceKey, null, 
2ddb0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
2dde0 20 44 61 74 61 62 61 73 65 20 46 69 6c 65 22 2c   Database File",
2ddf0 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77   ProjectName), w
2de00 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
2de30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de40 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de60 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2de70 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20  is value is new 
2de80 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d  as of 1.0.83.0..
2de90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dea0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dec0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2ded0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2def0 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 53             dataS
2df00 6f 75 72 63 65 4b 65 79 2c 20 22 44 65 66 61 75  ourceKey, "Defau
2df10 6c 74 50 72 6f 76 69 64 65 72 22 2c 0d 0a 20 20  ltProvider",..  
2df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df30 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2df40 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
2df50 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2df60 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
2df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df80 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2df90 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfb0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2dfc0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
2dfd0 61 53 6f 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20  aSourceKey,..   
2dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dff0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
2e000 46 6f 72 6d 61 74 28 22 53 75 70 70 6f 72 74 69  Format("Supporti
2e010 6e 67 50 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d  ngProviders\\{0}
2e020 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e040 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
2e050 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28  iderId.ToString(
2e060 56 73 49 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20  VsIdFormat)),.. 
2e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e080 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2e090 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
2e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2e0c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2e0d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e0e0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2e0f0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2e100 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2e110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e150 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2e160 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
2e170 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63  emoveVsDataSourc
2e180 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2e190 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e1a0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2e1b0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2e1c0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2e1d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2e1e0 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2e1f0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2e200 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2e210 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2e220 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2e230 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2e240 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2e250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2e260 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2e270 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2e280 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e290 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2e2a0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2e2b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2e2d0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2e2e0 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e300 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2e310 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e320 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
2e330 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
2e340 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e350 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2e360 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2e370 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
2e380 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e390 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2e3a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e3b0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2e3c0 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
2e3d0 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
2e3e0 20 73 75 66 66 69 78 2c 20 77 6f 77 36 34 29 3b   suffix, wow64);
2e3f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e400 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2e410 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
2e420 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2e430 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2e450 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
2e460 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2e470 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2e480 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e490 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2e4a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2e4b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4d0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2e4e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e500 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2e510 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2e520 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e540 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2e550 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2e560 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e570 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2e580 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e5a0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2e5b0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
2e5c0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2e5d0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5f0 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53       key, "DataS
2e600 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77  ources", true, w
2e610 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2e620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e630 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e640 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
2e650 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e670 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e680 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2e690 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2e6a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6c0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2e6d0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2e6e0 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22  0}\\DataSources"
2e6f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2e710 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
2e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e730 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e750 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e760 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2e770 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
2e780 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
2e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7a0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
2e7b0 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
2e7c0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
2e7d0 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
2e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7f0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2e800 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2e810 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2e820 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e830 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2e840 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2e850 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2e860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e8a0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2e8b0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
2e8c0 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75 72  rocessVsDataSour
2e8d0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
2e8e0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2e8f0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2e900 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
2e910 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
2e920 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
2e930 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
2e940 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
2e950 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
2e960 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
2e970 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2e980 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
2e990 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
2e9a0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e9c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2e9d0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2e9e0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2e9f0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2ea00 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2ea10 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2ea20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
2ea30 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
2ea40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2ea60 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
2ea70 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
2ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ea90 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2eaa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2eab0 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
2eac0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
2ead0 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
2eae0 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
2eaf0 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
2eb00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2eb10 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
2eb20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2eb40 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2eb50 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
2eb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eb70 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2eb80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2eb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2eba0 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
2ebb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ebc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ebd0 41 64 64 56 73 44 61 74 61 53 6f 75 72 63 65 28  AddVsDataSource(
2ebe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ebf0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
2ec00 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
2ec10 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34  , package, wow64
2ec20 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2ec40 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
2ec50 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2ec60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2ec70 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2ec80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ec90 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2eca0 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  veVsDataSource(.
2ecb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ecc0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
2ecd0 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
2ece0 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c   package, wow64,
2ecf0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2ed10 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
2ed20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2ed30 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
2ed40 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2ed50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2ed60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eda0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2edb0 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
2edc0 75 64 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64  udio Data Provid
2edd0 65 72 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  er Handling..   
2ede0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2edf0 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61  tic bool AddVsDa
2ee00 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
2ee10 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2ee20 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2ee30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2ee40 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2ee50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2ee60 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
2ee70 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
2ee80 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
2ee90 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2eea0 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
2eeb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2eec0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2eed0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2eee0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2eef0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2ef00 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
2ef10 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2ef20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2ef30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ef40 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
2ef50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ef60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ef70 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2ef80 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
2ef90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2efa0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2efb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2efc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2efd0 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
2efe0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2eff0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f000 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2f010 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
2f020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f030 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2f040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2f050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
2f060 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
2f070 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
2f080 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
2f090 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2f0a0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2f0b0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2f0c0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2f0d0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0f0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2f100 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
2f110 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2f120 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2f140 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2f150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f170 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2f180 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1a0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2f1b0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2f1c0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2f1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f1e0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2f1f0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f210 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2f220 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f230 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2f240 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2f250 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2f260 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2f270 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2f280 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2f290 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2f2a0 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22   "DataProviders"
2f2b0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
2f2c0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2f2d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2f0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2f300 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2f310 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f330 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2f340 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f360 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2f370 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2f380 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
2f390 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20  aProviders",..  
2f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3b0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
2f3c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f3d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2f3e0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2f400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f410 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2f420 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61  ckRegistryKey da
2f430 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d  taProviderKey =.
2f440 0a 20 20 20 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 20 52 65 67               Reg
2f460 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2f470 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c  teSubKey(subKey,
2f480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2f4a0 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
2f4b0 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
2f4c0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
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 77 68 61 74 49 66 2c 20          whatIf, 
2f4f0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2f510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f520 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61            if (da
2f530 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d  taProviderKey ==
2f540 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f560 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2f580 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2f590 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5b0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2f5c0 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
2f5d0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2f5e0 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  , key,..        
2f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f600 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2f610 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
2f620 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2f630 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
2f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f650 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2f660 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2f670 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f690 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2f6a0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2f6b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2f6d0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
2f6e0 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69 6f  null, Descriptio
2f6f0 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  n, whatIf,..    
2f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f710 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2f720 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2f740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f750 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2f760 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20  : This value is 
2f770 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33  new as of 1.0.83
2f780 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20  .0.  However,.. 
2f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7a0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2f7b0 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62  it should only b
2f7c0 65 20 73 65 74 20 69 66 20 74 68 65 20 70 61 63  e set if the pac
2f7d0 6b 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  kage assembly.. 
2f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2f800 61 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73 65  and all the asse
2f810 6d 62 6c 69 65 73 20 69 74 20 72 65 66 65 72 73  mblies it refers
2f820 20 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a 20   to are being.. 
2f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f840 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2f850 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 20  placed into the 
2f860 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20  global assembly 
2f870 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20  cache...        
2f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f890 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f8b0 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73  package.GlobalAs
2f8c0 73 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20 20  semblyCache)..  
2f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f900 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2f910 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2f940 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
2f950 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20  "Assembly",..   
2f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2f980 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d  kage.AssemblyNam
2f990 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20  e.ToString(),.. 
2f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2f9c0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2f9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f9e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa00 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
2fa30 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73   value is new as
2fa40 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20   of 1.0.83.0... 
2fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa60 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa80 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2fa90 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fab0 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
2fac0 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f 63  viderKey, "Assoc
2fad0 69 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a 20  iatedSource",.. 
2fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faf0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2fb00 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e  ge.DataSourceId.
2fb10 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2fb20 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb40 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2fb50 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb70 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
2fb80 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2fb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fba0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
2fbb0 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e  erKey, "Invarian
2fbc0 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e  tName", Invarian
2fbd0 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
2fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbf0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2fc00 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2fc30 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
2fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc50 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
2fc60 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c  derKey, "Technol
2fc70 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ogy",..         
2fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc90 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65     package.AdoNe
2fca0 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f  tTechnologyId.To
2fcb0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2fcc0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fce0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2fcf0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2fd10 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2fd20 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd40 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
2fd50 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c  Key, "CodeBase",
2fd60 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49   fileName, whatI
2fd70 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdb0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2fdc0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fde0 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
2fdf0 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63  roviderKey, "Fac
2fe00 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20  toryService",.. 
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2fe30 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
2fe40 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2fe50 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
2fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe70 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2fe80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2fea0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2feb0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
2fec0 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
2fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fee0 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
2fef0 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
2ff00 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f  nnectionUIContro
2ff10 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l",..           
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff30 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2ff40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2ff60 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2ff70 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
2ff80 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
2ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffa0 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
2ffb0 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
2ffc0 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74  onnectionPropert
2ffd0 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ies",..         
2ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fff0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
30000 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
30010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30020 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
30030 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
30040 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
30050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30060 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
30070 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
30080 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f  aConnectionSuppo
30090 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  rt", whatIf,..  
300a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300b0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
300c0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
300e0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
300f0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
30100 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
30110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30120 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
30130 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
30140 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20  ObjectSupport", 
30150 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
30160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30170 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
30180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30190 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
301a0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
301b0 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
301c0 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
301d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301e0 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
301f0 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53  jects\\DataViewS
30200 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c  upport", whatIf,
30210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
30230 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
30240 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30260 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
30270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30280 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
30290 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
302a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
302b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
302f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
30300 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
30310 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
30320 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
30330 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
30340 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
30350 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
30360 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
30370 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
30380 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
30390 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
303a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
303b0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
303c0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
303d0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
303e0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
303f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
30400 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
30410 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
30420 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30430 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
30440 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30450 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30460 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
30470 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
30480 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
30490 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
304a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
304b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
304c0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
304d0 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
304e0 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  me(vsVersion, su
304f0 66 66 69 78 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  ffix, wow64);...
30500 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
30510 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
30520 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
30530 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
30540 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
30550 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
30560 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
30570 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
30580 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
30590 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
305a0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
305b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
305c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
305d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
305e0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
305f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
30600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
30610 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
30620 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
30630 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
30640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30650 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
30660 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30670 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30680 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30690 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
306a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
306b0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
306c0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
306d0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
306e0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
306f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30700 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76    key, "DataProv
30710 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68  iders", true, wh
30720 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
30730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30740 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30750 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
30760 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
30770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30790 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
307a0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
307b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
307c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307d0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
307e0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
307f0 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73  }\\DataProviders
30800 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
30810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30820 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
30830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30840 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
30850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30870 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
30880 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
30890 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
308a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308b0 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
308c0 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
308d0 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
308e0 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
308f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30900 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
30910 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
30920 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30930 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30940 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
30950 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
30960 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
30970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
309c0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
309d0 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 50  l ProcessVsDataP
309e0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
309f0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
30a00 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
30a10 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
30a20 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
30a30 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30a40 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
30a50 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
30a60 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
30a70 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
30a80 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
30a90 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
30aa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30ab0 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
30ac0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
30ad0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
30ae0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
30af0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
30b00 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
30b10 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
30b20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
30b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
30b40 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
30b50 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
30b60 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
30b70 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
30b80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30b90 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
30ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30bc0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
30bd0 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
30be0 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
30bf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
30c00 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
30c10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
30c20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
30c30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30c50 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 50 72  turn AddVsDataPr
30c60 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
30c70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
30c80 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
30c90 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
30ca0 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77 36 34 2c  , pair.X, wow64,
30cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30cc0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
30cd0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
30ce0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30cf0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
30d00 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
30d10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30d20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
30d30 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  eVsDataProvider(
30d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30d50 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
30d60 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
30d70 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34  , package, wow64
30d80 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
30d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
30da0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
30db0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
30dc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
30dd0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
30de0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
30df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
30e40 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
30e50 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48 61  tudio Package Ha
30e60 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
30e70 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
30e80 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73  oid InitializeVs
30e90 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
30ea0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
30eb0 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
30ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
30ed0 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ol globalAssembl
30ee0 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20  yCache,..       
30ef0 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 65       ref Package
30f00 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20   package..      
30f10 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
30f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30f30 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
30f40 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
30f50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30f60 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 6e       package = n
30f70 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d  ew Package();...
30f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30f90 20 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c   package.Assembl
30fa0 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c 79  yName = assembly
30fb0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
30fc0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 47         package.G
30fd0 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
30fe0 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65 6d  he = globalAssem
30ff0 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20 20  blyCache;....   
31000 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
31010 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e  kage.AdoNetTechn
31020 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47 75  ologyId = new Gu
31030 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
31040 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39 41           "77AB9A
31050 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31 41  9D-78B9-4BA7-91A
31060 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22 29  C-873F5338F1D2")
31070 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31080 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63       package.Pac
31090 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75 69  kageId = new Gui
310a0 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
310b0 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38          "DCBE6C8
310c0 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33  D-0E57-4099-A183
310d0 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29 3b  -98FF74C64D9C");
310e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
310f0 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76      package.Serv
31100 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64  iceId = new Guid
31110 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31120 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38 44         "DCBE6C8D
31130 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d  -0E57-4099-A183-
31140 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b 0d  98FF74C64D9D");.
31150 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31160 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
31170 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47 75  ourceId = new Gu
31180 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
31190 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42           "0EBAAB
311a0 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44  6E-CA80-4B4A-8DD
311b0 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22 29  F-CBE6BF058C71")
311c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
311d0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
311e0 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e 65  aProviderId = ne
311f0 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45               "0E
31210 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41  BAAB6E-CA80-4B4A
31220 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43  -8DDF-CBE6BF058C
31230 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  70");..         
31240 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
31250 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
31260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
312b0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
312c0 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d  l AddVsPackage(.
312d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
312e0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
312f0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
31300 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
31310 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
31320 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
31330 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
31340 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
31350 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
31360 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
31370 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
31380 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
31390 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
313a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
313b0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
313c0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
313d0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
313e0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
313f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31400 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
31410 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
31420 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31430 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
31440 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
31450 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
31460 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
31470 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
31480 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31490 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
314a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
314b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
314c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
314d0 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
314e0 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
314f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
31500 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
31510 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
31520 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
31530 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
31540 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
31550 69 78 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  ix, wow64);.... 
31560 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
31570 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
31580 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
31590 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
315a0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
315b0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
315c0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
315d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
315e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
315f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31600 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
31610 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
31620 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31630 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
31640 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
31650 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
31660 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
31670 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
31680 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
31690 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
316b0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
316c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
316d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
316e0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
316f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31700 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
31710 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
31720 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
31730 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
31740 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31760 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c  key, "Packages",
31770 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
31780 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
31790 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317b0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
317c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
317d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
317e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317f0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
31800 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
31810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31820 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
31830 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
31840 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b  y key: {0}\\Pack
31850 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ages",..        
31860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31870 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
31880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31890 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
318a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
318b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
318c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
318e0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
318f0 3a 20 2a 57 41 52 4e 49 4e 47 2a 20 43 68 61 6e  : *WARNING* Chan
31900 67 69 6e 67 20 61 6e 79 20 6f 66 20 74 68 65 73  ging any of thes
31910 65 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6c 69  e values will li
31920 6b 65 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  kely..          
31930 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
31940 20 20 20 72 65 71 75 69 72 65 20 61 20 6e 65 77     require a new
31950 20 22 70 61 63 6b 61 67 65 20 6c 6f 61 64 20 6b   "package load k
31960 65 79 22 20 28 50 4c 4b 29 20 74 6f 20 62 65 0d  ey" (PLK) to be.
31970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31980 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67 65       //       ge
31990 6e 65 72 61 74 65 64 20 69 6e 20 6f 72 64 65 72  nerated in order
319a0 20 74 6f 20 70 72 6f 70 65 72 6c 79 20 73 75 70   to properly sup
319b0 70 6f 72 74 20 6c 6f 61 64 69 6e 67 20 74 68 65  port loading the
319c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
319d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
319e0 61 63 6b 61 67 65 20 69 6e 74 6f 20 56 69 73 75  ackage into Visu
319f0 61 6c 20 53 74 75 64 69 6f 20 32 30 30 38 20 61  al Studio 2008 a
31a00 6e 64 20 65 61 72 6c 69 65 72 20 77 69 74 68 6f  nd earlier witho
31a10 75 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut..            
31a20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
31a30 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 56 69   the matching Vi
31a40 73 75 61 6c 20 53 74 75 64 69 6f 20 53 44 4b 20  sual Studio SDK 
31a50 62 65 69 6e 67 20 69 6e 73 74 61 6c 6c 65 64 2e  being installed.
31a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31a70 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 50        //       P
31a80 6c 65 61 73 65 20 72 65 66 65 72 20 74 6f 20 74  lease refer to t
31a90 68 65 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67  he "SQLite.Desig
31aa0 6e 65 72 5c 70 6c 6b 2e 74 78 74 22 20 66 69 6c  ner\plk.txt" fil
31ab0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
31ac0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
31ad0 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e 67  for the existing
31ae0 20 6f 66 66 69 63 69 61 6c 20 76 61 6c 75 65 73   official values
31af0 20 61 6e 64 20 75 70 64 61 74 65 20 74 68 65 6d   and update them
31b00 20 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20   if..           
31b10 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
31b20 20 20 6e 65 63 65 73 73 61 72 79 2e 20 20 41 6c    necessary.  Al
31b30 73 6f 2c 20 74 68 65 20 6e 65 77 6c 79 20 67 65  so, the newly ge
31b40 6e 65 72 61 74 65 64 20 70 61 63 6b 61 67 65 20  nerated package 
31b50 6c 6f 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20  load..          
31b60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
31b70 20 20 20 6b 65 79 20 69 74 73 65 6c 66 2c 20 77     key itself, w
31b80 68 69 63 68 20 69 73 20 61 20 31 32 38 20 63 68  hich is a 128 ch
31b90 61 72 61 63 74 65 72 20 61 6c 70 68 61 6e 75 6d  aracter alphanum
31ba0 65 72 69 63 0d 0a 20 20 20 20 20 20 20 20 20 20  eric..          
31bb0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
31bc0 20 20 20 73 74 72 69 6e 67 2c 20 6d 75 73 74 20     string, must 
31bd0 62 65 20 70 6c 61 63 65 64 20 69 6e 20 74 68 65  be placed in the
31be0 20 72 65 73 6f 75 72 63 65 20 73 74 72 69 6e 67   resource string
31bf0 20 6e 61 6d 65 64 0d 0a 20 20 20 20 20 20 20 20   named..        
31c00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
31c10 20 20 20 20 20 22 34 30 30 22 20 69 6e 20 74 68       "400" in th
31c20 65 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e  e "SQLite.Design
31c30 65 72 5c 56 53 50 61 63 6b 61 67 65 2e 72 65 73  er\VSPackage.res
31c40 78 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20  x" file..       
31c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
31c60 20 20 20 20 20 20 61 6e 64 20 74 68 65 6e 20 74        and then t
31c70 68 65 20 64 65 73 69 67 6e 65 72 20 61 73 73 65  he designer asse
31c80 6d 62 6c 79 20 69 74 73 65 6c 66 20 6d 75 73 74  mbly itself must
31c90 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
31ca0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
31cb0 20 20 72 65 63 6f 6d 70 69 6c 65 64 2e 20 20 41    recompiled.  A
31cc0 73 20 6f 66 20 74 68 69 73 20 77 72 69 74 69 6e  s of this writin
31cd0 67 20 28 69 6e 20 46 65 62 72 75 61 72 79 20 32  g (in February 2
31ce0 30 31 32 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  012),..         
31cf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
31d00 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e      the followin
31d10 67 20 55 52 4c 20 69 73 20 74 68 65 20 70 72 6f  g URL is the pro
31d20 70 65 72 20 70 6c 61 63 65 20 74 6f 20 67 65 6e  per place to gen
31d30 65 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20 20  erate..         
31d40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
31d50 20 20 20 20 70 61 63 6b 61 67 65 20 6c 6f 61 64      package load
31d60 20 6b 65 79 73 3a 0d 0a 20 20 20 20 20 20 20 20   keys:..        
31d70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
31d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d90 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 74 74      //       htt
31da0 70 3a 2f 2f 6d 73 64 6e 2e 6d 69 63 72 6f 73 6f  p://msdn.microso
31db0 66 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 76 73 74  ft.com/en-us/vst
31dc0 75 64 69 6f 2f 63 63 36 35 35 37 39 35 0d 0a 20  udio/cc655795.. 
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31de0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
31df0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
31e00 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
31e10 79 20 70 61 63 6b 61 67 65 4b 65 79 20 3d 0d 0a  y packageKey =..
31e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e30 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
31e40 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
31e50 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
31e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31e70 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
31e80 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54  kage.PackageId.T
31e90 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
31ea0 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  at), whatIf,..  
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ec0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
31ed0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
31ee0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f00 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 4b      if (packageK
31f10 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
31f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f50 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
31f60 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f80 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
31f90 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
31fa0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
31fb0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
31fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fd0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63          key, pac
31fe0 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54  kage.PackageId.T
31ff0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
32000 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
32010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32020 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32030 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32040 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32060 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
32070 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
32080 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75 6c  (packageKey, nul
32090 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
320a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
320c0 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b  0} Designer Pack
320d0 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d  age", ProjectNam
320e0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32100 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
32110 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32130 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
32140 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
32150 2c 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20 20 20  , "Class",..    
32160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32170 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 2e          "SQLite.
32180 44 65 73 69 67 6e 65 72 2e 53 51 4c 69 74 65 50  Designer.SQLiteP
32190 61 63 6b 61 67 65 22 2c 20 77 68 61 74 49 66 2c  ackage", whatIf,
321a0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321c0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
321d0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
321e0 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64 65 42  ckageKey, "CodeB
321f0 61 73 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ase",..         
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32210 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61     fileName, wha
32220 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
32230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32240 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
32250 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
32260 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49  e(packageKey, "I
32270 44 22 2c 20 34 30 30 2c 20 77 68 61 74 49 66 2c  D", 400, whatIf,
32280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
322a0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
322b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322c0 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
322d0 6f 72 79 20 3d 20 47 65 74 53 79 73 74 65 6d 44  ory = GetSystemD
322e0 69 72 65 63 74 6f 72 79 28 77 6f 77 36 34 29 3b  irectory(wow64);
322f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32300 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32310 64 69 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c  directory == nul
32320 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
32330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32340 64 69 72 65 63 74 6f 72 79 20 3d 20 53 74 72 69  directory = Stri
32350 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20  ng.Empty;....   
32360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32370 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
32380 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
32390 6b 61 67 65 4b 65 79 2c 20 22 49 6e 70 72 6f 63  kageKey, "Inproc
323a0 53 65 72 76 65 72 33 32 22 2c 0d 0a 20 20 20 20  Server32",..    
323b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323c0 20 20 20 20 20 20 20 20 50 61 74 68 2e 43 6f 6d          Path.Com
323d0 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20  bine(directory, 
323e0 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c 0d  "mscoree.dll"),.
323f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32400 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
32410 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
32420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32430 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
32440 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
32450 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43  e(packageKey, "C
32460 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20  ompanyName",..  
32470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32480 20 20 20 20 20 20 20 20 20 20 22 68 74 74 70 3a            "http:
32490 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e 73 71  //system.data.sq
324a0 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68 61 74  lite.org/", what
324b0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
324c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
324d0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
324e0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
324f0 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 4d 69  (packageKey, "Mi
32500 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20 20 20  nEdition",..    
32510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32520 20 20 20 20 20 20 20 20 22 73 74 61 6e 64 61 72          "standar
32530 64 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  d", whatIf, verb
32540 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
32550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32560 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
32570 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
32580 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 4e 61 6d  Key, "ProductNam
32590 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
325a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325b0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
325c0 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63  {0} Designer Pac
325d0 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61  kage", ProjectNa
325e0 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
325f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32600 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
32610 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
32620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
32630 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
32640 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
32650 79 2c 20 22 50 72 6f 64 75 63 74 56 65 72 73 69  y, "ProductVersi
32660 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on",..          
32670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32680 20 20 22 31 2e 30 22 2c 20 77 68 61 74 49 66 2c    "1.0", whatIf,
32690 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
326a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326b0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
326c0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 74 6f 6f  kRegistryKey too
326d0 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20 20 20 20 20  lboxKey =..     
326e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326f0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
32700 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
32710 53 75 62 4b 65 79 28 70 61 63 6b 61 67 65 4b 65  SubKey(packageKe
32720 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
32730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32740 20 20 20 20 22 54 6f 6f 6c 62 6f 78 22 2c 20 77      "Toolbox", w
32750 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
32760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32770 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32790 20 20 20 20 20 20 20 20 20 69 66 20 28 74 6f 6f           if (too
327a0 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  lboxKey == null)
327b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
327d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
327e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327f0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
32800 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
32810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32820 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
32830 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
32840 65 67 69 73 74 72 79 20 6b 65 79 3a 20 22 20 2b  egistry key: " +
32850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32870 20 20 20 20 20 20 22 7b 30 7d 5c 5c 54 6f 6f 6c        "{0}\\Tool
32880 62 6f 78 22 2c 20 70 61 63 6b 61 67 65 4b 65 79  box", packageKey
32890 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
328a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
328c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
328f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32900 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
32910 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32930 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6f 6c              tool
32940 62 6f 78 4b 65 79 2c 20 22 44 65 66 61 75 6c 74  boxKey, "Default
32950 20 49 74 65 6d 73 22 2c 20 33 2c 20 77 68 61 74   Items", 3, what
32960 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
32970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32980 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
32990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
329b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
329c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
329d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
329e0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
329f0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
32a00 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
32a10 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
32a20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32a30 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
32a40 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77  "Menus", true, w
32a50 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
32a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32a70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32a80 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
32a90 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
32aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ab0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32ad0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
32ae0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b00 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
32b10 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
32b20 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20  0}\\Menus",..   
32b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b40 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
32b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32b60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32b70 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
32b80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32ba0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
32bb0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bd0 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
32be0 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
32bf0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
32c00 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
32c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c20 20 22 2c 20 31 30 30 30 2c 20 33 22 2c 20 77 68   ", 1000, 3", wh
32c30 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
32c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
32c60 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
32c70 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
32c80 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
32c90 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
32ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32cb0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
32cc0 53 65 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c  Services", true,
32cd0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
32ce0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
32cf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32d00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
32d10 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
32d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32d50 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
32d60 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
32d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d80 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
32d90 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
32da0 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c   {0}\\Services",
32db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
32dd0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
32de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32df0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
32e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
32e20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
32e30 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
32e40 79 20 73 65 72 76 69 63 65 4b 65 79 20 3d 0d 0a  y serviceKey =..
32e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e60 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
32e70 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
32e80 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
32e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
32eb0 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54  kage.ServiceId.T
32ec0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
32ed0 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  at), whatIf,..  
32ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ef0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
32f00 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
32f10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f30 20 20 20 20 69 66 20 28 73 65 72 76 69 63 65 4b      if (serviceK
32f40 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
32f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f80 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
32f90 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
32fc0 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
32fd0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
32fe0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33000 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63          key, pac
33010 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54  kage.ServiceId.T
33020 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
33030 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
33040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33050 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
33060 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
33070 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
33080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33090 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
330a0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
330b0 28 73 65 72 76 69 63 65 4b 65 79 2c 20 6e 75 6c  (serviceKey, nul
330c0 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
330d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330e0 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
330f0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
33100 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
33110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33120 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
33130 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
33140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33150 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
33160 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76 69 63  .SetValue(servic
33170 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20  eKey, "Name",.. 
33180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33190 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
331a0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65  g.Format("{0} De
331b0 73 69 67 6e 65 72 20 53 65 72 76 69 63 65 22 2c  signer Service",
331c0 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a   ProjectName),..
331d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331e0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
331f0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
33200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33210 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
33220 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33230 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33240 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
33250 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
33260 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
33270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
332c0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
332d0 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28  RemoveVsPackage(
332e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
332f0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
33300 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
33310 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
33320 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
33330 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
33340 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
33350 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
33360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
33370 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
33380 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
33390 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
333a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
333b0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
333c0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
333d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
333e0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
333f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
33400 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33410 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
33420 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
33430 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33440 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
33450 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
33460 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
33470 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33480 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
33490 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
334a0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
334b0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
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 65 72 72               err
334e0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
334f0 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
33500 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33510 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
33520 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33530 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
33540 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
33550 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
33560 20 73 75 66 66 69 78 2c 20 77 6f 77 36 34 29 3b   suffix, wow64);
33570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33580 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
33590 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
335a0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
335b0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
335c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
335d0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
335e0 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
335f0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
33600 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33610 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
33620 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
33630 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33650 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
33660 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33680 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
33690 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
336a0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
336b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336c0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
336d0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
336e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
336f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
33700 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
33710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33720 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
33730 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
33740 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
33750 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
33760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33770 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61       key, "Packa
33780 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ges", true, what
33790 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
337a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
337b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
337c0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
337d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
337e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
337f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33800 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
33810 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
33820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
33840 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
33850 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
33860 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20  \Packages",..   
33870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33880 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
33890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
338a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
338b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
338c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
338d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
338e0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
338f0 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65  lper.DeleteSubKe
33900 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
33910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33920 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e  subKey, package.
33930 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69  PackageId.ToStri
33940 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
33950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33960 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
33970 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
33980 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
33990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
339a0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
339b0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
339c0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
339d0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
339e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339f0 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73       key, "Menus
33a00 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
33a10 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
33a20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a40 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
33a50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
33a60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a80 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
33a90 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
33aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ab0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
33ac0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
33ad0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65  try key: {0}\\Me
33ae0 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  nus",..         
33af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b00 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
33b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
33b30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33b40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b60 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
33b70 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20  eleteValue(..   
33b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b90 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
33ba0 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54  kage.PackageId.T
33bb0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
33bc0 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
33bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
33be0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68  rowOnMissing, wh
33bf0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
33c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33c10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33c20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
33c30 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
33c40 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
33c50 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
33c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33c70 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
33c80 53 65 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c  Services", true,
33c90 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
33ca0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
33cb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33cc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
33cd0 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
33ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
33d10 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
33d20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
33d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d40 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
33d50 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
33d60 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c   {0}\\Services",
33d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
33d90 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33db0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
33dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33de0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
33df0 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65  tryHelper.Delete
33e00 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
33e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
33e30 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54  kage.ServiceId.T
33e40 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
33e50 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
33e70 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
33e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33e90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
33ea0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33eb0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
33ec0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33ed0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
33f20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
33f30 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
33f40 73 73 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  ssVsPackage(..  
33f50 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
33f60 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
33f70 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
33f80 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
33f90 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
33fa0 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
33fb0 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
33fc0 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
33fd0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
33fe0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
33ff0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
34000 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
34010 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
34020 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
34030 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
34040 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
34050 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
34060 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
34070 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
34080 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
34090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
340a0 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
340b0 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
340c0 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
340d0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
340e0 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
340f0 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
34100 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
34110 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34120 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
34130 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63  valid VS callbac
34140 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
34150 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34160 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
34170 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34180 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
34190 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
341a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
341b0 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 50 61    return AddVsPa
341c0 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
341d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
341e0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
341f0 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
34200 20 70 61 69 72 2e 58 2c 20 77 6f 77 36 34 2c 0d   pair.X, wow64,.
34210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34220 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
34230 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
34240 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
34250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
34260 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
34270 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34280 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
34290 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
342a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342b0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
342c0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b  on, suffix, pack
342d0 61 67 65 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  age, wow64,..   
342e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342f0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
34300 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34310 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
34320 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
34330 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
34340 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
34350 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
34360 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
34370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
343c0 65 67 69 6f 6e 20 41 70 70 6c 69 63 61 74 69 6f  egion Applicatio
343d0 6e 20 45 6e 74 72 79 20 50 6f 69 6e 74 0d 0a 20  n Entry Point.. 
343e0 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
343f0 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
34400 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
34410 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ]..        priva
34420 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 4d 61  te static int Ma
34430 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in(..           
34440 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 0d 0a   string[] args..
34450 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
34460 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34470 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
34480 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34490 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
344a0 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
344b0 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  ation = null;.. 
344c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
344d0 74 72 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75  tring error = nu
344e0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
344f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
34500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34530 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
34540 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
34550 6e 20 44 65 62 75 67 67 65 72 20 48 6f 6f 6b 0d  n Debugger Hook.
34560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34570 20 69 66 20 28 45 6e 76 69 72 6f 6e 6d 65 6e 74   if (Environment
34580 2e 47 65 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 56  .GetEnvironmentV
34590 61 72 69 61 62 6c 65 28 22 42 72 65 61 6b 22 29  ariable("Break")
345a0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
345b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
345c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345d0 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c    Console.WriteL
345e0 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
345f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
34600 74 74 61 63 68 20 61 20 64 65 62 75 67 67 65 72  ttach a debugger
34610 20 74 6f 20 70 72 6f 63 65 73 73 20 7b 30 7d 20   to process {0} 
34620 61 6e 64 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  and " +..       
34630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34640 20 22 70 72 65 73 73 20 61 6e 79 20 6b 65 79 20   "press any key 
34650 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 22 2c 0d 0a  to continue.",..
34660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34670 20 20 20 20 20 20 20 20 50 72 6f 63 65 73 73 2e          Process.
34680 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65 73  GetCurrentProces
34690 73 28 29 2e 49 64 29 3b 0d 0a 0d 0a 20 20 20 20  s().Id);....    
346a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346b0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
346c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346e0 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64      Console.Read
346f0 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a 20 74 68  Key(true); /* th
34700 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
34710 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
34720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34730 20 20 20 63 61 74 63 68 20 28 49 6e 76 61 6c 69     catch (Invali
34740 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
34750 69 6f 6e 29 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e  ion) // Console.
34760 52 65 61 64 4b 65 79 0d 0a 20 20 20 20 20 20 20  ReadKey..       
34770 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34790 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
347a0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
347b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
347c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
347d0 20 20 20 20 20 44 65 62 75 67 67 65 72 2e 42 72       Debugger.Br
347e0 65 61 6b 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  eak();..        
347f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
34800 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
34810 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
34820 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34860 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34870 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
34880 69 6f 6e 20 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65  ion Command Line
34890 20 50 72 6f 63 65 73 73 69 6e 67 0d 0a 20 20 20   Processing..   
348a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
348b0 28 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!Configuration.
348c0 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20  FromArgs(..     
348d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348e0 20 20 20 61 72 67 73 2c 20 74 72 75 65 2c 20 72     args, true, r
348f0 65 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ef configuration
34900 2c 20 72 65 66 20 65 72 72 6f 72 29 20 7c 7c 0d  , ref error) ||.
34910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34920 20 20 20 20 20 21 43 6f 6e 66 69 67 75 72 61 74       !Configurat
34930 69 6f 6e 2e 50 72 6f 63 65 73 73 28 0d 0a 20 20  ion.Process(..  
34940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34950 20 20 20 20 20 20 61 72 67 73 2c 20 63 6f 6e 66        args, conf
34960 69 67 75 72 61 74 69 6f 6e 2c 20 74 72 75 65 2c  iguration, true,
34970 20 72 65 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a   ref error) ||..
34980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34990 20 20 20 20 21 43 6f 6e 66 69 67 75 72 61 74 69      !Configurati
349a0 6f 6e 2e 43 68 65 63 6b 52 75 6e 74 69 6d 65 56  on.CheckRuntimeV
349b0 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
349c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
349e0 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29  true, ref error)
349f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34a00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34a10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
34a20 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54  ps.ShowMessage(T
34a30 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
34a40 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
34a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
34a60 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
34a70 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
34a80 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
34a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34aa0 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65      error, trace
34ab0 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67  Category, Messag
34ac0 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d  eBoxButtons.OK,.
34ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ae0 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
34af0 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
34b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34b10 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
34b20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
34b30 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
34b40 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
34b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b60 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
34b70 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
34b80 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20  Failure.",..    
34b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ba0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
34bb0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
34bc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34bd0 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
34be0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
34bf0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
34c00 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
34c10 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
34c20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
34c70 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
34c80 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
34c90 73 74 72 79 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  stry = new MockR
34ca0 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34cc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
34cd0 57 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66  WhatIf, false, f
34ce0 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alse))..        
34cf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
34d10 72 65 67 69 6f 6e 20 43 6f 72 65 20 41 73 73 65  region Core Asse
34d20 6d 62 6c 79 20 4e 61 6d 65 20 43 68 65 63 6b 0d  mbly Name Check.
34d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d40 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
34d50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
34d60 4e 4f 54 45 3a 20 44 6f 20 74 68 69 73 20 66 69  NOTE: Do this fi
34d70 72 73 74 2c 20 62 65 66 6f 72 65 20 6d 61 6b 69  rst, before maki
34d80 6e 67 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74  ng any changes t
34d90 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
34da0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34db0 20 20 20 20 73 79 73 74 65 6d 2c 20 62 65 63 61      system, beca
34dc0 75 73 65 20 69 74 20 77 69 6c 6c 20 74 68 72 6f  use it will thro
34dd0 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69  w an exception i
34de0 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  f the..         
34df0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34e00 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 64 6f      file name do
34e10 65 73 20 6e 6f 74 20 72 65 70 72 65 73 65 6e 74  es not represent
34e20 20 61 20 76 61 6c 69 64 20 6d 61 6e 61 67 65 64   a valid managed
34e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e40 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
34e50 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...      
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e80 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
34e90 6d 65 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e  me coreAssemblyN
34ea0 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
34eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
34ec0 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41  ssemblyName.GetA
34ed0 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
34ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ef0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
34f00 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
34f10 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
34f20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
34f30 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
34f40 6c 79 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41  lyName designerA
34f50 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20  ssemblyName =.. 
34f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f70 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
34f80 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e  ame.GetAssemblyN
34f90 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
34fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fb0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
34fc0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
34fd0 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
34fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ff0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
35000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35010 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
35020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35050 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
35060 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
35070 20 53 79 73 74 65 6d 20 44 69 72 65 63 74 6f 72   System Director
35080 79 20 43 68 65 63 6b 0d 0a 20 20 20 20 20 20 20  y Check..       
35090 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
350a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
350b0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
350c0 74 74 69 6e 67 20 74 68 65 20 73 79 73 74 65 6d  tting the system
350d0 20 64 69 72 65 63 74 6f 72 79 20 76 61 6c 75 65   directory value
350e0 20 68 65 72 65 20 73 65 72 76 65 73 0d 0a 20 20   here serves..  
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35100 20 20 2f 2f 20 20 20 20 20 20 20 74 77 6f 20 70    //       two p
35110 75 72 70 6f 73 65 73 3a 0d 0a 20 20 20 20 20 20  urposes:..      
35120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
35130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35140 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 31        //       1
35150 2e 20 49 74 20 65 6e 61 62 6c 65 73 20 75 73 20  . It enables us 
35160 74 6f 20 6c 6f 67 20 74 68 65 20 73 79 73 74 65  to log the syste
35170 6d 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  m directory..   
35180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35190 20 2f 2f 20 20 20 20 20 20 20 20 20 20 76 61 6c   //          val
351a0 75 65 20 76 65 72 79 20 65 61 72 6c 79 20 69 6e  ue very early in
351b0 20 74 68 65 20 69 6e 73 74 61 6c 6c 61 74 69 6f   the installatio
351c0 6e 20 70 72 6f 63 65 73 73 0d 0a 20 20 20 20 20  n process..     
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
351e0 2f 20 20 20 20 20 20 20 20 20 20 28 69 2e 65 2e  /          (i.e.
351f0 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65   even though the
35200 20 76 61 6c 75 65 20 69 74 73 65 6c 66 20 69 73   value itself is
35210 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20   not..          
35220 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
35230 20 20 20 20 20 20 6e 65 65 64 65 64 20 75 6e 74        needed unt
35240 69 6c 20 6d 75 63 68 20 6c 61 74 65 72 29 2e 0d  il much later)..
35250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35260 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
35280 20 20 20 20 20 20 32 2e 20 53 69 6e 63 65 20 74        2. Since t
35290 68 65 20 76 61 6c 75 65 20 69 73 20 63 61 63 68  he value is cach
352a0 65 64 2c 20 69 74 20 70 72 65 76 65 6e 74 73 20  ed, it prevents 
352b0 61 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  an..            
352c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
352d0 20 20 20 20 65 78 63 65 70 74 69 6f 6e 20 66 72      exception fr
352e0 6f 6d 20 62 65 69 6e 67 20 74 68 72 6f 77 6e 20  om being thrown 
352f0 6d 75 63 68 20 6c 61 74 65 72 20 64 75 72 69 6e  much later durin
35300 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
35310 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
35320 20 20 20 74 68 65 20 69 6e 73 74 61 6c 6c 20 77     the install w
35330 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 69 73  hen the value is
35340 20 71 75 65 72 69 65 64 20 61 67 61 69 6e 0d 0a   queried again..
35350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35360 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
35370 28 69 2e 65 2e 20 77 69 74 68 20 74 68 65 20 73  (i.e. with the s
35380 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
35390 65 20 22 77 6f 77 36 34 22 0d 0a 20 20 20 20 20  e "wow64"..     
353a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
353b0 2f 20 20 20 20 20 20 20 20 20 20 70 61 72 61 6d  /          param
353c0 65 74 65 72 29 2e 0d 0a 20 20 20 20 20 20 20 20  eter)...        
353d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
353e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353f0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
35400 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
35410 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c  Priority.MediumL
35420 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
35430 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
35440 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
35450 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
35460 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
35470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35480 20 20 20 22 53 79 73 74 65 6d 20 64 69 72 65 63     "System direc
35490 74 6f 72 79 20 69 73 20 7b 30 7d 2e 22 2c 20 46  tory is {0}.", F
354a0 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
354b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354c0 20 20 20 20 47 65 74 53 79 73 74 65 6d 44 69 72      GetSystemDir
354d0 65 63 74 6f 72 79 28 63 6f 6e 66 69 67 75 72 61  ectory(configura
354e0 74 69 6f 6e 2e 57 6f 77 36 34 29 29 29 2c 0d 0a  tion.Wow64))),..
354f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35500 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
35510 65 67 6f 72 79 29 3b 20 2f 2a 20 74 68 72 6f 77  egory); /* throw
35520 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
35530 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
35540 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
35550 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
35560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35590 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
355a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
355b0 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65  egion .NET Frame
355c0 77 6f 72 6b 20 2f 20 56 69 73 75 61 6c 20 53 74  work / Visual St
355d0 75 64 69 6f 20 44 61 74 61 0d 0a 20 20 20 20 20  udio Data..     
355e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
355f0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 20 3d  ackage package =
35600 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
35610 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
35620 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
35630 6f 72 6b 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d  orkList = null;.
35640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35650 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69       VsList vsLi
35660 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  st = null;....  
35670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35680 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
35690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
356c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
356d0 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 56       InitializeV
356e0 73 50 61 63 6b 61 67 65 28 64 65 73 69 67 6e 65  sPackage(designe
356f0 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a  rAssemblyName,..
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35710 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
35720 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
35730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35740 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
35750 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f 62 61 6c  tallFlags.Global
35760 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74  AssemblyCache, t
35770 72 75 65 29 20 26 26 0d 0a 20 20 20 20 20 20 20  rue) &&..       
35780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35790 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48   configuration.H
357a0 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
357b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357c0 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
357d0 67 73 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f 62  gs.VsPackageGlob
357e0 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c  alAssemblyCache,
357f0 20 74 72 75 65 29 2c 0d 0a 20 20 20 20 20 20 20   true),..       
35800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35810 20 72 65 66 20 70 61 63 6b 61 67 65 29 3b 0d 0a   ref package);..
35820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35830 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
35840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35870 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
35880 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c           Initial
35890 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  izeFrameworkList
358a0 28 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d  (registry.LocalM
358b0 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20  achine,..       
358c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
358e0 72 65 66 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ref frameworkLis
358f0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
35900 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69             Initi
35910 61 6c 69 7a 65 56 73 4c 69 73 74 28 63 6f 6e 66  alizeVsList(conf
35920 69 67 75 72 61 74 69 6f 6e 2e 50 65 72 55 73 65  iguration.PerUse
35930 72 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r ?..           
35940 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67               reg
35950 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65  istry.CurrentUse
35960 72 20 3a 20 72 65 67 69 73 74 72 79 2e 4c 6f 63  r : registry.Loc
35970 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20  alMachine,..    
35980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35990 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
359a0 6e 2c 20 72 65 66 20 76 73 4c 69 73 74 29 3b 0d  n, ref vsList);.
359b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
359c0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
359d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
359e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
359f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
35a30 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
35a40 6e 20 53 68 61 72 65 64 20 43 6c 69 65 6e 74 20  n Shared Client 
35a50 44 61 74 61 20 43 72 65 61 74 69 6f 6e 0d 0a 20  Data Creation.. 
35a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a70 20 20 20 6f 62 6a 65 63 74 20 64 69 72 65 63 74     object direct
35a80 6f 72 79 44 61 74 61 20 3d 20 6e 65 77 20 41 6e  oryData = new An
35a90 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
35aa0 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ol>(..          
35ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
35ac0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 69 72 65  nfiguration.Dire
35ad0 63 74 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72 61  ctory, configura
35ae0 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a  tion.Install);..
35af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35b00 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 69 6c        object fil
35b10 65 4e 61 6d 65 44 61 74 61 20 3d 20 6e 65 77 20  eNameData = new 
35b20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
35b30 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20  bool>(..        
35b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65  configuration.De
35b60 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20  signerFileName, 
35b70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e  configuration.In
35b80 73 74 61 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20  stall);..       
35b90 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
35ba0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
35bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
35c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c10 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47    #region .NET G
35c20 41 43 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76  AC Install/Remov
35c30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
35c40 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
35c50 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
35c60 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
35c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c80 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f  InstallFlags.Glo
35c90 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
35ca0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
35cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
35cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35cd0 20 20 20 20 20 20 20 20 20 50 75 62 6c 69 73 68           Publish
35ce0 20 70 75 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b   publish = null;
35cf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35d00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35d10 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
35d20 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
35d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d40 20 20 20 20 70 75 62 6c 69 73 68 20 3d 20 6e 65      publish = ne
35d50 77 20 50 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a  w Publish();....
35d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d70 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
35d80 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c  iguration.Instal
35d90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
35da0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
35dd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
35de0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
35df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e00 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
35e10 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
35e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e30 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49      publish.GacI
35e40 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61  nstall(configura
35e50 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  tion.CoreFileNam
35e60 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
35e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e80 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
35e90 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
35ea0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
35eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ed0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
35ee0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
35ef0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
35f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73  "GacInstall: ass
35f30 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22  emblyPath = {0}"
35f40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f60 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
35f70 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
35f80 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
35f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
35fb0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
35fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
35fe0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
35ff0 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
36000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36010 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77          /* throw
36020 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
36030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36040 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63       publish.Gac
36050 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72  Install(configur
36060 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61  ation.LinqFileNa
36070 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
36080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36090 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
360a0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
360b0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
360c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
360d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360e0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
360f0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
36100 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
36110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36130 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73   "GacInstall: as
36140 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d  semblyPath = {0}
36150 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
36160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36170 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
36180 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e  onfiguration.Lin
36190 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  qFileName)),..  
361a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
361c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
361d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
361e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
361f0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
36200 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
36210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
36230 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63  stallFlags.VsPac
36240 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62  kageGlobalAssemb
36250 6c 79 43 61 63 68 65 2c 20 74 72 75 65 29 29 0d  lyCache, true)).
36260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36270 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362a0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
362b0 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20  on.WhatIf)..    
362c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362e0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
362f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36310 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
36320 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
36330 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.DesignerFileNa
36340 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
36350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36360 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
36370 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
36380 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
36390 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
363a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363b0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
363c0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
363d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
363e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
363f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36400 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61               "Ga
36410 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
36420 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
36430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36450 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
36460 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73  onfiguration.Des
36470 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c  ignerFileName)),
36480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
364b0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
364e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
364f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36500 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36520 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36540 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
36550 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73  uration.HasFlags
36560 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36580 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
36590 61 67 73 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f  ags.VsPackageGlo
365a0 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
365b0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
365c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
365e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
36600 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
36610 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
36620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36630 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f           /* thro
36640 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
36650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36660 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73            publis
36670 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66  h.GacRemove(conf
36680 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e  iguration.Design
36690 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  erFileName);....
366a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
366d0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
366e0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
366f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36710 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
36720 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
36730 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
36740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36760 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a       "GacRemove:
36770 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
36780 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
36790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367a0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
367b0 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74  splay(configurat
367c0 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ion.DesignerFile
367d0 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
367e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
36800 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
36810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36840 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
36850 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
36860 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
36870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36880 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
36890 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
368a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368b0 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52      publish.GacR
368c0 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74  emove(configurat
368d0 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.LinqFileName
368e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
368f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36900 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
36910 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
36920 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
36930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36950 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
36960 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
36970 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
36980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
369a0 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d  GacRemove: assem
369b0 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
369c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
369d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369e0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
369f0 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
36a00 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
36a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
36a30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
36a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
36a60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
36a70 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
36a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a90 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a        /* throw *
36aa0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
36ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ac0 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
36ad0 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
36ae0 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
36af0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
36b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b10 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
36b20 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
36b30 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
36b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b60 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
36b70 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
36b80 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
36b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
36bb0 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62  acRemove: assemb
36bc0 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
36bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bf0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
36c00 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
36c10 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
36c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c30 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
36c40 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
36c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
36c70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c90 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
36ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
36cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
36cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36d00 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
36d10 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  ET AssemblyFolde
36d20 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
36d30 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
36d40 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
36d50 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
36d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d70 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73   InstallFlags.As
36d80 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74  semblyFolders, t
36d90 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
36da0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36dc0 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
36dd0 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  chFrameworkRegis
36de0 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  try(registry,.. 
36df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
36e10 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72  rameworkList, Pr
36e20 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
36e30 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ders,..         
36e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e50 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
36e60 74 69 6f 6e 2e 52 65 67 69 73 74 72 79 56 65 72  tion.RegistryVer
36e70 73 69 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79 44  sion, directoryD
36e80 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ea0 20 20 20 20 20 20 4e 65 74 46 78 49 73 33 32 42        NetFxIs32B
36eb0 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67  itOnly || config
36ec0 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a  uration.Wow64,..
36ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ef0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68  configuration.Th
36f00 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
36f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
36f30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
36f40 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  tIf, configurati
36f50 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20  on.Verbose,..   
36f60 20 20 20 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 20 20 72 65 66               ref
36f80 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
36f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fa0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fc0 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65   TraceOps.ShowMe
36fd0 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72  ssage(TracePrior
36fe0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
36ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
37010 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
37020 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73  ceCallback, this
37030 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  Assembly,..     
37040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37050 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
37060 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
37070 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
37080 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20  ns.OK,..        
37090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370a0 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
370b0 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a  oxIcon.Error);..
370c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
370d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
370e0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
370f0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
37100 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a  ty.MediumHigh,..
37110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37130 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
37140 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46  raceCallback, "F
37150 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20  ailure.",..     
37160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37170 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
37180 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
371b0 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a   1; /* FAILURE *
371c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
371d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
37200 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
37210 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
37220 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
37230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37260 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
37270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
37280 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50 72 6f  egion .NET DbPro
37290 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a 20 20  viderFactory..  
372a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372b0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
372c0 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20  ion.HasFlags(.. 
372d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372e0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
372f0 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76 69 64  llFlags.DbProvid
37300 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75 65 29  erFactory, true)
37310 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37320 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37340 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d 20 66    bool saved = f
37350 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
37360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37370 20 69 66 20 28 21 46 6f 72 45 61 63 68 46 72 61   if (!ForEachFra
37380 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 72 65 67  meworkConfig(reg
37390 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
373a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373b0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
373c0 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 44 62  kList, ProcessDb
373d0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c  ProviderFactory,
373e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
373f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37400 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
37410 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 2c 20 49  ConfigVersion, I
37420 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
37430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
37450 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20 44 65 73  roviderName, Des
37460 63 72 69 70 74 69 6f 6e 2c 20 46 61 63 74 6f 72  cription, Factor
37470 79 54 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  yTypeName,..    
37480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37490 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
374a0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 64 69  AssemblyName, di
374b0 72 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20 20  rectoryData,..  
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 65                Ne
374e0 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c  tFxIs32BitOnly |
374f0 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  | configuration.
37500 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  Wow64,..        
37510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37520 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
37530 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73  ation.ThrowOnMis
37540 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
37550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37560 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
37570 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e  tion.WhatIf, con
37580 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f  figuration.Verbo
37590 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
375a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375b0 20 20 20 20 20 72 65 66 20 73 61 76 65 64 2c 20       ref saved, 
375c0 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
375d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
375f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37600 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f      TraceOps.Sho
37610 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72  wMessage(TracePr
37620 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
37630 0a 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 20 20 20 20                  
37650 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
37660 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74  traceCallback, t
37670 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  hisAssembly,..  
37680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
376a0 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ror, traceCatego
376b0 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75  ry, MessageBoxBu
376c0 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20  ttons.OK,..     
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376e0 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
376f0 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
37700 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37720 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
37730 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
37740 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
37750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37770 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
37780 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
37790 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20   "Failure.",..  
377a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
377c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
377d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
377e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
377f0 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52  urn 1; /* FAILUR
37800 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
37810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37830 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
37840 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
37850 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
37860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
37870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
378b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378c0 20 23 72 65 67 69 6f 6e 20 56 53 20 50 61 63 6b   #region VS Pack
378d0 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  age..           
378e0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
378f0 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
37900 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
37910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37920 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56    InstallFlags.V
37930 73 50 61 63 6b 61 67 65 2c 20 74 72 75 65 29 29  sPackage, true))
37940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37950 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37970 20 69 66 20 28 21 46 6f 72 45 61 63 68 56 73 56   if (!ForEachVsV
37980 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 72  ersionRegistry(r
37990 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
379a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379b0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
379c0 2c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61  , ProcessVsPacka
379d0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
379e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379f0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
37a00 6f 6e 2e 56 73 56 65 72 73 69 6f 6e 53 75 66 66  on.VsVersionSuff
37a10 69 78 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  ix, package,..  
37a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
37a40 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20  leNameData,..   
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a60 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73 49               VsI
37a70 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f  s32BitOnly || co
37a80 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36  nfiguration.Wow6
37a90 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
37aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ab0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
37ac0 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  n.ThrowOnMissing
37ad0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37af0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
37b00 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
37b10 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
37b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b40 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
37b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b80 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68       TraceOps.Sh
37b90 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50  owMessage(TraceP
37ba0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
37bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bd0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
37be0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
37bf0 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
37c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
37c20 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67  rror, traceCateg
37c30 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42  ory, MessageBoxB
37c40 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20  uttons.OK,..    
37c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c60 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
37c70 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
37c80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ca0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
37cb0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
37cc0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
37cd0 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
37ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cf0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
37d00 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
37d10 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20  , "Failure.",.. 
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 20 20 20 20 20 20 20 74                 t
37d40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
37d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
37d70 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
37d80 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
37d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
37da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37db0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
37dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
37dd0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
37de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
37df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
37e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e40 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44 61 74    #region VS Dat
37e50 61 53 6f 75 72 63 65 0d 0a 20 20 20 20 20 20 20  aSource..       
37e60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
37e70 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
37e80 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
37e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ea0 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
37eb0 67 73 2e 56 73 44 61 74 61 53 6f 75 72 63 65 2c  gs.VsDataSource,
37ec0 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
37ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 69 66 20 28 21 46 6f 72          if (!For
37f00 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67  EachVsVersionReg
37f10 69 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d  istry(registry,.
37f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f40 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73   vsList, Process
37f50 56 73 44 61 74 61 53 6f 75 72 63 65 2c 0d 0a 20  VsDataSource,.. 
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 20 63                 c
37f80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 73 56  onfiguration.VsV
37f90 65 72 73 69 6f 6e 53 75 66 66 69 78 2c 20 70 61  ersionSuffix, pa
37fa0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
37fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fc0 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
37fd0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
37fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ff0 20 20 20 20 20 20 20 56 73 49 73 33 32 42 69 74         VsIs32Bit
38000 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72  Only || configur
38010 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20  ation.Wow64,..  
38020 20 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 63 6f                co
38040 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f  nfiguration.Thro
38050 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
38060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38070 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
38080 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
38090 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
380a0 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
380b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380c0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
380d0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
380e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
38100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
38110 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
38120 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
38130 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
38140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38150 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
38160 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
38170 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
38180 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
38190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
381b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
381c0 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
381d0 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
381e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381f0 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
38200 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
38210 20 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 54 72 61 63              Trac
38230 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
38240 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
38250 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
38260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
38280 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
38290 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69  ceCallback, "Fai
382a0 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  lure.",..       
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 74 72 61 63 65 43 61           traceCa
382d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
382e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
38300 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d  ; /* FAILURE */.
38310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38320 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
38330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38340 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
38350 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
38360 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
38370 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
38380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
383a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
383b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
383c0 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
383d0 69 6f 6e 20 56 53 20 44 61 74 61 50 72 6f 76 69  ion VS DataProvi
383e0 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  der..           
383f0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
38400 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
38410 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
38420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38430 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56    InstallFlags.V
38440 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20 74  sDataProvider, t
38450 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
38460 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
38470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38480 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
38490 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
384a0 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  try(registry,.. 
384b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
384d0 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73  sList, ProcessVs
384e0 44 61 74 61 50 72 6f 76 69 64 65 72 2c 0d 0a 20  DataProvider,.. 
384f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
38510 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 73 56  onfiguration.VsV
38520 65 72 73 69 6f 6e 53 75 66 66 69 78 2c 20 70 61  ersionSuffix, pa
38530 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
38540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38550 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
38560 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
38570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38580 20 20 20 20 20 20 20 56 73 49 73 33 32 42 69 74         VsIs32Bit
38590 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72  Only || configur
385a0 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20  ation.Wow64,..  
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
385d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f  nfiguration.Thro
385e0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
385f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38600 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
38610 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
38620 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
38630 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
38640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38650 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
38660 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
38670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38680 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
38690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
386a0 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
386b0 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
386c0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
386d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386e0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
386f0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
38700 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
38710 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
38720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38730 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
38740 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
38750 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
38760 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
38770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38780 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
38790 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
387a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
387c0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
387d0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
387e0 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
387f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
38810 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
38820 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46