0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72 /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57 .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65 stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75 leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65 blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73 at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67 k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20 System;..using
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69 ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79 stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53 stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75 m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76 ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74 DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73 ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72 tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69 missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73 m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67 ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73 System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69 ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65 Lite..{.. #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65 gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72 gates.. inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69 nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 .. string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20 message, /* in
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 */.. stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69 ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a n */.. );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 ... internal
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72 delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 lback(..
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 */.. str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 20 20 ing invariant,
03d0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 .. string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 name,
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 /* in */..
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20 scription,
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 /* in */..
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f ame, /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 * in */..
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69 semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 n */.. st
04a0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 ring directory,
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 /.. objec
04d0: 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 t clientData,
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 bool per
0500: 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 User,
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 /* in */..
0520: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c bool wow64,
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 /* in */..
0550: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 bool throwOnMi
0560: 73 73 69 6e 67 2c 20 20 20 20 20 20 20 2f 2a 20 ssing, /*
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 in */.. b
0580: 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20 ool whatIf,
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 /* in
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c */.. bool
05b0: 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 verbose,
05c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d /* in */.
05d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f . ref boo
05e0: 6c 20 73 61 76 65 64 2c 20 20 20 20 20 20 20 20 l saved,
05f0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 /* out */..
0600: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e ref strin
0610: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20 g error
0620: 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 /* out */..
0630: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f );.... /////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e //////.... in
0690: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 ternal delegate
06a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65 bool FrameworkRe
06b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d gistryCallback(.
06c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c . Install
06d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b er.MockRegistryK
06e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69 ey rootKey, /* i
06f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 n */.. st
0700: 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 ring frameworkNa
0710: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 me,
0720: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 /* in */..
0730: 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 Version frame
0740: 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 20 20 20 workVersion,
0750: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a /* in */..
0760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 string p
0770: 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 20 20 20 latformName,
0780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e /* in
0790: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 */.. str
07a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 ing directory,
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
07c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 /* in */..
07d0: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 object clientD
07e0: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 ata,
07f0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 /* in */..
0800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 bool perU
0810: 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 ser,
0820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 /* in
0830: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c */.. bool
0840: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 wow64,
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
0860: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 * in */..
0870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 bool throwOnMis
0880: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 sing,
0890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 /* in */..
08a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
08b0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f,
08c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a /* in *
08d0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 /.. bool
08e0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 verbose,
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a /*
0900: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 in */..
0910: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 ref string error
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0930: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 /* out */..
0940: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f );.... ////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 ///////.... i
09a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 nternal delegate
09b0: 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64 bool VisualStud
09c0: 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 ioRegistryCallba
09d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 ck(.. Ins
09e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73 taller.MockRegis
09f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20 tryKey rootKey,
0a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 /* in */..
0a10: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 Version vsVers
0a20: 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 ion,
0a30: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 /* in */..
0a40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 string su
0a50: 66 66 69 78 2c 20 20 20 20 20 20 20 20 20 20 20 ffix,
0a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c /* in,
0a70: 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20 optional */..
0a80: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e Installer.
0a90: 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c Package package,
0aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a /* in *
0ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e /.. strin
0ac0: 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 20 20 g directory,
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a /*
0ae0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 in */..
0af0: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 object clientDat
0b00: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a,
0b10: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 /* in */..
0b20: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 bool perUse
0b30: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 r,
0b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f /* in */
0b50: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 .. bool w
0b60: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 ow64,
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
0b80: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 in */.. b
0b90: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 ool throwOnMissi
0ba0: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 ng,
0bb0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 /* in */..
0bc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c bool whatIf,
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d /* in */.
0bf0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 . bool ve
0c00: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20 rbose,
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 /* i
0c20: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 n */.. re
0c30: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 f string error
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c50: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 /* out */..
0c60: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 );.. #endregi
0c70: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f on.... //////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0cc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 /////.... #re
0cd0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d gion Public Enum
0ce0: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46 erations.. [F
0cf0: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 lags()].. pub
0d00: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c lic enum Install
0d10: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 Flags.. {..
0d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f #region No
0d30: 72 6d 61 6c 20 46 6c 61 67 73 0d 0a 20 20 20 20 rmal Flags..
0d40: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d None = 0x0,.
0d50: 0a 20 20 20 20 20 20 20 20 47 6c 6f 62 61 6c 41 . GlobalA
0d60: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 ssemblyCache = 0
0d70: 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41 73 73 x1,.. Ass
0d80: 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20 30 emblyFolders = 0
0d90: 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 50 x2,.. DbP
0da0: 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 20 3d roviderFactory =
0db0: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 56 0x4,.. V
0dc0: 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38 2c 0d sPackage = 0x8,.
0dd0: 0a 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 . VsPacka
0de0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 geGlobalAssembly
0df0: 43 61 63 68 65 20 3d 20 30 78 31 30 2c 0d 0a 20 Cache = 0x10,..
0e00: 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f 75 VsDataSou
0e10: 72 63 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 rce = 0x20,..
0e20: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69 VsDataProvi
0e30: 64 65 72 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 der = 0x40,..
0e40: 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65 74 VsDevEnvSet
0e50: 75 70 20 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20 up = 0x80,..
0e60: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a #endregion..
0e70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f .. //////
0e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0ec0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 /.... #re
0ed0: 67 69 6f 6e 20 43 6f 6d 70 6f 73 69 74 65 20 46 gion Composite F
0ee0: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 46 72 lags.. Fr
0ef0: 61 6d 65 77 6f 72 6b 20 3d 20 47 6c 6f 62 61 6c amework = Global
0f00: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 20 AssemblyCache |
0f10: 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 AssemblyFolders
0f20: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |..
0f30: 20 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 DbProvide
0f40: 72 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20 20 20 rFactory,....
0f50: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
0fa0: 20 20 20 20 20 20 20 20 56 73 20 3d 20 56 73 50 Vs = VsP
0fb0: 61 63 6b 61 67 65 20 7c 20 56 73 50 61 63 6b 61 ackage | VsPacka
0fc0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 geGlobalAssembly
0fd0: 43 61 63 68 65 20 7c 20 56 73 44 61 74 61 53 6f Cache | VsDataSo
0fe0: 75 72 63 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 urce |..
0ff0: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69 VsDataProvi
1000: 64 65 72 20 7c 20 56 73 44 65 76 45 6e 76 53 65 der | VsDevEnvSe
1010: 74 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 tup,....
1020: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 ///////....
1070: 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77 6f All = Framewo
1080: 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20 20 rk | Vs,....
1090: 20 20 20 20 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 0d 0a 0d 0a 20 ///////////....
10e0: 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70 74 AllExcept
10f0: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 GlobalAssemblyCa
1100: 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 28 47 6c che = All & ~(Gl
1110: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 obalAssemblyCach
1120: 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e |..
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1140: 20 20 20 20 20 20 20 20 20 20 20 20 56 73 50 61 VsPa
1150: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d ckageGlobalAssem
1160: 62 6c 79 43 61 63 68 65 29 2c 0d 0a 20 20 20 20 blyCache),..
1170: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a #endregion..
1180: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f .. //////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
11d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 65 66 /.... Def
11e0: 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20 20 20 20 ault = All..
11f0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f }.... ///////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1240: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61 ////.... [Fla
1250: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 gs()].. publi
1260: 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69 6f c enum TracePrio
1270: 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 rity.. {..
1280: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c None = 0x0,
1290: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74 .. Lowest
12a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 = 0x1,..
12b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20 Lower = 0x2,..
12c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34 Low = 0x4
12d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75 ,.. Mediu
12e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20 mLow = 0x8,..
12f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78 Medium = 0x
1300: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 10,.. Med
1310: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d iumHigh = 0x20,.
1320: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20 . High =
1330: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 0x40,.. H
1340: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20 igher = 0x80,..
1350: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d Highest =
1360: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20 0x100,..
1370: 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64 69 75 Default = Mediu
1380: 6d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 m.. }.. #e
1390: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 ndregion....
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
13f0: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 73 74 61 #region Insta
1400: 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 23 69 66 20 ller Class..#if
1410: 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 NET_40 || NET_45
1420: 20 7c 7c 20 4e 45 54 5f 34 35 31 0d 0a 20 20 20 || NET_451..
1430: 20 5b 53 65 63 75 72 69 74 79 43 72 69 74 69 63 [SecurityCritic
1440: 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20 al()]..#else..
1450: 20 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69 [SecurityPermi
1460: 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63 ssion(SecurityAc
1470: 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c tion.LinkDemand,
1480: 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d UnmanagedCode =
1490: 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d true)]..#endif.
14a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 . internal st
14b0: 61 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61 atic class Insta
14c0: 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 ller.. {..
14d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73 #region Uns
14e0: 61 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f afe Native Metho
14f0: 64 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 ds Class..
1500: 20 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e [SuppressUnman
1510: 61 67 65 64 43 6f 64 65 53 65 63 75 72 69 74 79 agedCodeSecurity
1520: 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 ()].. pri
1530: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 vate sealed clas
1540: 73 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 s UnsafeNativeMe
1550: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b thods.. {
1560: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 ..#if WINDOWS..
1570: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 #regi
1580: 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20 on Native Win32
1590: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 Constants..
15a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 private c
15b0: 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54 onst int MAX_PAT
15c0: 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20 H = 260;....
15d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1620: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
1630: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49 te const int CSI
1640: 44 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30 DL_SYSTEMX86 = 0
1650: 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20 x0029;....
1660: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
16b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
16c0: 20 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50 const int SHGFP
16d0: 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20 _TYPE_CURRENT =
16e0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 0;....
16f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
1740: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e private con
1750: 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b st int S_OK = 0;
1760: 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a /* HRESULT */..
1770: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 #end
1780: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
1790: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
17d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
17e0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e #region
17f0: 20 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20 Native Windows
1800: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 Methods..
1810: 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28 [DllImport(
1820: 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d "shfolder.dll",.
1830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1840: 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 CallingConventi
1850: 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 on = CallingConv
1860: 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a ention.Winapi,..
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1880: 43 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65 CharSet = CharSe
1890: 74 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d t.Auto, BestFitM
18a0: 61 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d apping = false,.
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
18c0: 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62 ThrowOnUnmappab
18d0: 6c 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53 leChar = true, S
18e0: 65 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72 etLastError = tr
18f0: 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ue)]..
1900: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
1910: 20 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65 extern int SHGe
1920: 74 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20 tFolderPath(..
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e In
1940: 74 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20 tPtr hWndOwner,
1950: 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74 int nFolder, Int
1960: 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74 Ptr hToken, uint
1970: 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 flags,..
1980: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 IntPtr
1990: 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58 buffer /* >= MAX
19a0: 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20 _PATH */);..
19b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 #endregi
19c0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 on....
19d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
1a20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 #region Pub
1a30: 6c 69 63 20 57 72 61 70 70 65 72 20 4d 65 74 68 lic Wrapper Meth
1a40: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ods..
1a50: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 public static s
1a60: 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 tring GetSystemD
1a70: 69 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20 irectory()..
1a80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
1a90: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 IntPt
1aa0: 72 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 r buffer = IntPt
1ab0: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 r.Zero;....
1ac0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a try..
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
1af0: 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20 buffer =
1b00: 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54 Marshal.AllocCoT
1b10: 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20 askMem(..
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b30: 20 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20 sizeof(char) *
1b40: 28 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b (MAX_PATH + 1));
1b50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1b60: 20 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66 if (buff
1b70: 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 er != IntPtr.Zer
1b80: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 o)..
1b90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb0: 20 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64 if (SHGetFold
1bc0: 65 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65 erPath(IntPtr.Ze
1bd0: 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ro,..
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bf0: 20 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54 45 CSIDL_SYSTE
1c00: 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72 MX86, IntPtr.Zer
1c10: 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 o,..
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c30: 20 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43 SHGFP_TYPE_C
1c40: 55 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20 URRENT, buffer)
1c50: 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20 == S_OK)..
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c90: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e return Marshal.
1ca0: 50 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28 PtrToStringAuto(
1cb0: 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 buffer);..
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
1ce0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
1d10: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 atch (Exception
1d20: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e)..
1d30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
1d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d60: 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74 // TODO: Is t
1d70: 68 69 73 20 74 68 65 20 72 69 67 68 74 20 65 72 his the right er
1d80: 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c ror handling sol
1d90: 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 ution..
1da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
1db0: 20 20 20 20 74 6f 20 75 73 65 20 61 74 20 74 68 to use at th
1dc0: 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20 is point?..
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
1de0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
1df0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e TraceOps.
1e00: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 DebugAndTrace(Tr
1e10: 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 acePriority.Medi
1e20: 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 umHigh,..
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e40: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 debugCallback,
1e50: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 traceCallback, S
1e60: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 tring.Format(..
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e80: 20 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f "Could no
1e90: 74 20 67 65 74 20 73 79 73 74 65 6d 20 64 69 72 t get system dir
1ea0: 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29 ectory: {0}", e)
1eb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
1ec0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1ed0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 Category);....
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ef0: 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20 throw;..
1f00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e fin
1f20: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 ally..
1f30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
1f50: 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74 (buffer != IntPt
1f60: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 r.Zero)..
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f90: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e Marshal.
1fa0: 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75 FreeCoTaskMem(bu
1fb0: 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 ffer);..
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fd0: 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e buffer = IntPtr.
1fe0: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 Zero;..
1ff0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
2000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
2010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
2020: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d return null;.
2030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2040: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 #end
2050: 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a region..#endif..
2060: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
2070: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
2080: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
2090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
20e0: 69 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70 ion Private Help
20f0: 65 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20 er Classes..
2100: 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50 #region AnyP
2110: 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 air Class..
2120: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 private seale
2130: 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c d class AnyPair<
2140: 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20 T1, T2>..
2150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2160: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 #region Public C
2170: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 onstructors..
2180: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
2190: 20 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e // WARN
21a0: 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72 ING: This constr
21b0: 75 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61 uctor produces a
21c0: 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70 n immutable "emp
21d0: 74 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20 ty" pair..
21e0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 //
21f0: 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20 object...
2200: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
2210: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e public An
2220: 79 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20 yPair()..
2230: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 : base(
2240: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
2250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2260: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e // do nothing.
2270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
2280: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
2290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22d0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
22e0: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 public AnyPair
22f0: 28 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20 (T1 x)..
2300: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 : this()
2310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
2320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2330: 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 this.x = x;..
2340: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
2350: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
2360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
23a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
23b0: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20 blic AnyPair(T1
23c0: 78 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20 x, T2 y)..
23d0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 : this
23e0: 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 (x)..
23f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2400: 20 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d this.y = y;.
2410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2420: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 #end
2430: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
2440: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
2490: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e #region
24a0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 Public Properti
24b0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 es..
24c0: 70 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20 private T1 x;..
24d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
24e0: 63 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20 c T1 X..
24f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2500: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 get { ret
2510: 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20 urn x; }..
2520: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
2530: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
2540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
2580: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
2590: 65 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20 e T2 y;..
25a0: 20 20 20 20 20 70 75 62 6c 69 63 20 54 32 20 59 public T2 Y
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
25c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
25d0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b get { return y;
25e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
25f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 }.. #
2600: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 endregion..
2610: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 }.. #e
2620: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 ndregion....
2630: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
2640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
2680: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 #region T
2690: 72 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20 raceOps Class..
26a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
26b0: 74 61 74 69 63 20 63 6c 61 73 73 20 54 72 61 63 tatic class Trac
26c0: 65 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d eOps.. {.
26d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 . #re
26e0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e gion Private Con
26f0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 stants..
2700: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 private cons
2710: 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 t string Default
2720: 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23 DebugFormat = "#
2730: 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b {0} @ {1}: {2}";
2740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 .. pr
2750: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 ivate const stri
2760: 6e 67 20 44 65 66 61 75 6c 74 54 72 61 63 65 46 ng DefaultTraceF
2770: 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20 ormat = "#{0} @
2780: 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 {1}: {2}";....
2790: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
27a0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 e const string I
27b0: 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75 so8601DateTimeOu
27c0: 74 70 75 74 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 tputFormat =..
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 79 "y
27e0: 79 79 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a yyy.MM.ddTHH:mm:
27f0: 73 73 2e 66 66 66 66 66 66 66 22 3b 0d 0a 20 20 ss.fffffff";..
2800: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 #endre
2810: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 gion....
2820: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
2830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
2870: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 #region P
2880: 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44 61 rivate Static Da
2890: 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ta..
28a0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f private static o
28b0: 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d bject syncRoot =
28c0: 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a new object();..
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 priv
28e0: 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 ate static long
28f0: 6e 65 78 74 44 65 62 75 67 49 64 3b 0d 0a 20 20 nextDebugId;..
2900: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
2910: 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 e static long ne
2920: 78 74 54 72 61 63 65 49 64 3b 0d 0a 20 20 20 20 xtTraceId;..
2930: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
2940: 73 74 61 74 69 63 20 49 4c 69 73 74 3c 54 72 61 static IList<Tra
2950: 63 65 4c 69 73 74 65 6e 65 72 3e 20 64 65 62 75 ceListener> debu
2960: 67 4c 69 73 74 65 6e 65 72 73 3b 0d 0a 20 20 20 gListeners;..
2970: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
2980: 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 static TracePri
2990: 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 ority debugPrior
29a0: 69 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 ity = TracePrior
29b0: 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 ity.Default;..
29c0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
29d0: 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 e static TracePr
29e0: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f iority tracePrio
29f0: 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f rity = TracePrio
2a00: 72 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 rity.Default;..
2a10: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
2a20: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 te static string
2a30: 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44 debugFormat = D
2a40: 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 efaultDebugForma
2a50: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t;..
2a60: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 private static s
2a70: 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 tring traceForma
2a80: 74 20 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65 t = DefaultTrace
2a90: 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 Format;..
2aa0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
2ab0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b00: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
2b10: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 #region Public
2b20: 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 Static Properti
2b30: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 es..
2b40: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 public static Tr
2b50: 61 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 acePriority Debu
2b60: 67 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 gPriority..
2b70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
2b80: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
2b90: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 lock (syncRoot)
2ba0: 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 { return debugPr
2bb0: 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 iority; } }..
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
2bd0: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f { lock (syncRoo
2be0: 74 29 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 t) { debugPriori
2bf0: 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d ty = value; } }.
2c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
2c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c60: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
2c70: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 public static T
2c80: 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 racePriority Tra
2c90: 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 cePriority..
2ca0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
2cb0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b get {
2cc0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 lock (syncRoot)
2cd0: 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 { return traceP
2ce0: 72 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 riority; } }..
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
2d00: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f t { lock (syncRo
2d10: 6f 74 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 ot) { tracePrior
2d20: 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d ity = value; } }
2d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
2d40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
2d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
2da0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 public static
2db0: 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d string DebugForm
2dc0: 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 at..
2dd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
2de0: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 get { lock (s
2df0: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 yncRoot) { retur
2e00: 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d n debugFormat; }
2e10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
2e20: 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 set { lock (
2e30: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 syncRoot) { debu
2e40: 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b gFormat = value;
2e50: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 } }..
2e60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
2e70: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
2ec0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 public sta
2ed0: 74 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 tic string Trace
2ee0: 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 Format..
2ef0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2f00: 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 get { loc
2f10: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 k (syncRoot) { r
2f20: 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 eturn traceForma
2f30: 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 t; } }..
2f40: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f set { lo
2f50: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 ck (syncRoot) {
2f60: 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 traceFormat = va
2f70: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 lue; } }..
2f80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
2f90: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
2fa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
2fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ff0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
3000: 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61 #region Intera
3010: 63 74 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65 ctive Support Me
3020: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 thods..
3030: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d [MethodImpl(M
3040: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 ethodImplOptions
3050: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 .NoInlining)]..
3060: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
3070: 63 20 73 74 61 74 69 63 20 44 69 61 6c 6f 67 52 c static DialogR
3080: 65 73 75 6c 74 20 53 68 6f 77 4d 65 73 73 61 67 esult ShowMessag
3090: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
30a0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 TracePriorit
30b0: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c y tracePriority,
30c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
30d0: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 TraceCallback
30e0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a debugCallback,..
30f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3100: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 TraceCallback tr
3110: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 aceCallback,..
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 As
3130: 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c sembly assembly,
3140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3150: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 string message
3160: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
3170: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f string catego
3180: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ry,..
3190: 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 42 MessageBoxB
31a0: 75 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c 0d uttons buttons,.
31b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
31c0: 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 20 MessageBoxIcon
31d0: 69 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 icon..
31e0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
31f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
3200: 20 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52 65 DialogRe
3210: 73 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44 69 sult result = Di
3220: 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a alogResult.OK;..
3230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3240: 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 DebugAndTrace(
3250: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a tracePriority,..
3260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3270: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
3280: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
3290: 2c 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 , message, categ
32a0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
32b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 79 73 if (Sys
32c0: 74 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55 temInformation.U
32d0: 73 65 72 49 6e 74 65 72 61 63 74 69 76 65 29 0d serInteractive).
32e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
32f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
3300: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 string t
3310: 69 74 6c 65 20 3d 20 47 65 74 41 73 73 65 6d 62 itle = GetAssemb
3320: 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 lyTitle(assembly
3330: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
3340: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 69 if (ti
3350: 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 tle == null)..
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3370: 20 20 20 20 20 20 74 69 74 6c 65 20 3d 20 41 70 title = Ap
3380: 70 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75 63 plication.Produc
3390: 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 tName;....
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
33b0: 73 75 6c 74 20 3d 20 4d 65 73 73 61 67 65 42 6f sult = MessageBo
33c0: 78 2e 53 68 6f 77 28 6d 65 73 73 61 67 65 2c 20 x.Show(message,
33d0: 74 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c 20 title, buttons,
33e0: 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 icon);....
33f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 De
3400: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 bugAndTrace(trac
3410: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 ePriority,..
3420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3430: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
3440: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
3450: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
3460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3470: 20 20 20 20 20 20 20 20 20 20 22 55 73 65 72 20 "User
3480: 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c choice of {0}.",
3490: 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 ForDisplay(resu
34a0: 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 lt)),..
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
34c0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34e0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d return result;.
34f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3500: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
3510: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72 DebugAndTr
3520: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 ace(tracePriorit
3530: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
3540: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c debugCal
3550: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c lback, traceCall
3560: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
3570: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
3580: 20 20 20 20 20 20 20 20 20 20 22 44 65 66 61 75 "Defau
3590: 6c 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d lt choice of {0}
35a0: 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 .", ForDisplay(r
35b0: 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 esult)),..
35c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 ca
35d0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 tegory);....
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
35f0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 rn result;..
3600: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
3610: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f #endregio
3620: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n....
3630: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
3680: 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 #region Trac
3690: 69 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68 ing Support Meth
36a0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ods..
36b0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 public static v
36c0: 6f 69 64 20 53 65 74 75 70 44 65 62 75 67 4c 69 oid SetupDebugLi
36d0: 73 74 65 6e 65 72 73 28 29 0d 0a 20 20 20 20 20 steners()..
36e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
36f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 65 if (de
3700: 62 75 67 4c 69 73 74 65 6e 65 72 73 20 3d 3d 20 bugListeners ==
3710: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
3720: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 debug
3730: 4c 69 73 74 65 6e 65 72 73 20 3d 20 6e 65 77 20 Listeners = new
3740: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e List<TraceListen
3750: 65 72 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 er>();....
3760: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 4c debugL
3770: 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 isteners.Add(new
3780: 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 ConsoleTraceLis
3790: 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 tener());..
37a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
37b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
37c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
3800: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
3810: 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 c static long Ne
3820: 78 74 44 65 62 75 67 49 64 28 29 0d 0a 20 20 20 xtDebugId()..
3830: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
3840: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
3850: 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 rn Interlocked.I
3860: 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 ncrement(ref nex
3870: 74 44 65 62 75 67 49 64 29 3b 0d 0a 20 20 20 20 tDebugId);..
3880: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
3890: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
38a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
38f0: 69 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e ic static long N
3900: 65 78 74 54 72 61 63 65 49 64 28 29 0d 0a 20 20 extTraceId()..
3910: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
3930: 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e urn Interlocked.
3940: 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 Increment(ref ne
3950: 78 74 54 72 61 63 65 49 64 29 3b 0d 0a 20 20 20 xtTraceId);..
3960: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
3970: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
3980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
39a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
39c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
39d0: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e lic static strin
39e0: 67 20 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 g TimeStamp(Date
39f0: 54 69 6d 65 20 64 61 74 65 54 69 6d 65 29 0d 0a Time dateTime)..
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 72 r
3a20: 65 74 75 72 6e 20 64 61 74 65 54 69 6d 65 2e 54 eturn dateTime.T
3a30: 6f 53 74 72 69 6e 67 28 49 73 6f 38 36 30 31 44 oString(Iso8601D
3a40: 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 ateTimeOutputFor
3a50: 6d 61 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 mat);..
3a60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
3a70: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
3a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3ab0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
3ac0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d [MethodIm
3ad0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 pl(MethodImplOpt
3ae0: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 ions.NoInlining)
3af0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ].. p
3b00: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 rivate static st
3b10: 72 69 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e 61 ring GetMethodNa
3b20: 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me(..
3b30: 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 StackTrace
3b40: 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 stackTrace,..
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 int
3b60: 20 6c 65 76 65 6c 0d 0a 20 20 20 20 20 20 20 20 level..
3b70: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
3b80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
3b90: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 try..
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
3bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3bc0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
3be0: 20 4e 4f 54 45 3a 20 49 66 20 61 20 76 61 6c 69 NOTE: If a vali
3bf0: 64 20 73 74 61 63 6b 20 74 72 61 63 65 20 77 61 d stack trace wa
3c00: 73 20 6e 6f 74 20 73 75 70 70 6c 69 65 64 20 62 s not supplied b
3c10: 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 y the..
3c20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
3c30: 20 20 20 20 63 61 6c 6c 65 72 2c 20 63 72 65 61 caller, crea
3c40: 74 65 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65 64 te one now based
3c50: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d on the current.
3c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3c70: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 // ex
3c80: 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a ecution stack...
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ca0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
3cc0: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 stackTrace == nu
3cd0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
3ce0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d20: 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 // NOTE: Grab th
3d30: 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75 74 e current execut
3d40: 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 ion stack...
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d60: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d80: 73 74 61 63 6b 54 72 61 63 65 20 3d 20 6e 65 77 stackTrace = new
3d90: 20 53 74 61 63 6b 54 72 61 63 65 28 29 3b 0d 0a StackTrace();..
3da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3db0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3dd0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 // NOTE: A
3de0: 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69 73 20 lways skip this
3df0: 63 61 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e 20 call frame when
3e00: 77 65 20 63 61 70 74 75 72 65 0d 0a 20 20 20 20 we capture..
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e20: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 // the
3e30: 20 73 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a 20 stack trace...
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e50: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e70: 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20 level++;..
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
3ea0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ec0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 // NOTE: Get t
3ed0: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74 61 he specified sta
3ee0: 63 6b 20 66 72 61 6d 65 20 28 61 6c 77 61 79 73 ck frame (always
3ef0: 20 61 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20 20 add one to..
3f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f10: 20 2f 2f 20 20 20 20 20 20 20 73 6b 69 70 20 74 // skip t
3f20: 68 69 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20 20 his method)...
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f40: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
3f50: 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b 46 StackF
3f60: 72 61 6d 65 20 73 74 61 63 6b 46 72 61 6d 65 20 rame stackFrame
3f70: 3d 20 73 74 61 63 6b 54 72 61 63 65 2e 47 65 74 = stackTrace.Get
3f80: 46 72 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d Frame(level);...
3f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3fa0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
3fc0: 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6d 65 NOTE: Get the me
3fd0: 74 68 6f 64 20 66 6f 72 20 74 68 65 20 73 74 61 thod for the sta
3fe0: 63 6b 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20 20 ck frame...
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
4000: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
4010: 20 20 20 20 20 20 20 4d 65 74 68 6f 64 42 61 73 MethodBas
4020: 65 20 6d 65 74 68 6f 64 42 61 73 65 20 3d 20 73 e methodBase = s
4030: 74 61 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65 74 tackFrame.GetMet
4040: 68 6f 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 hod();....
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
4060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4070: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 // NOTE: G
4080: 65 74 20 74 68 65 20 74 79 70 65 20 66 6f 72 20 et the type for
4090: 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 the method...
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
40b0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
40c0: 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 Type ty
40d0: 70 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e pe = methodBase.
40e0: 44 65 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d 0a DeclaringType;..
40f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4100: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
4120: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6e NOTE: Get the n
4130: 61 6d 65 20 6f 66 20 74 68 65 20 6d 65 74 68 6f ame of the metho
4140: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d...
4150: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4170: 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d 65 string name = me
4180: 74 68 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a thodBase.Name;..
4190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
41a0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
41c0: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th
41d0: 65 20 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d 61 e properly forma
41e0: 74 74 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20 20 tted result...
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4200: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
4210: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
4220: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
4230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4240: 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d "{0}{1}
4250: 7b 32 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65 2c {2}", type.Name,
4260: 20 54 79 70 65 2e 44 65 6c 69 6d 69 74 65 72 2c Type.Delimiter,
4270: 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 name);..
4280: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
4290: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 catc
42a0: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 h..
42b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
42c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 // do
42d0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 nothing...
42e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
4300: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 eturn null;..
4310: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
4320: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
4330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
4370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
4380: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 lic static void
4390: 44 65 62 75 67 43 6f 72 65 28 0d 0a 20 20 20 20 DebugCore(..
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
43b0: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 ng message,..
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
43d0: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 ing category..
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d ).
43f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4410: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d lock (syncRoot).
4420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
4440: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 62 75 if (debu
4450: 67 4c 69 73 74 65 6e 65 72 73 20 21 3d 20 6e 75 gListeners != nu
4460: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
4470: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4490: 20 20 20 20 66 6f 72 65 61 63 68 20 28 54 72 61 foreach (Tra
44a0: 63 65 4c 69 73 74 65 6e 65 72 20 6c 69 73 74 65 ceListener liste
44b0: 6e 65 72 20 69 6e 20 64 65 62 75 67 4c 69 73 74 ner in debugList
44c0: 65 6e 65 72 73 29 0d 0a 20 20 20 20 20 20 20 20 eners)..
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
44e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
4500: 69 73 74 65 6e 65 72 2e 57 72 69 74 65 4c 69 6e istener.WriteLin
4510: 65 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 e(message, categ
4520: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 ory);..
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4540: 20 20 20 6c 69 73 74 65 6e 65 72 2e 46 6c 75 73 listener.Flus
4550: 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 h();..
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
4570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4580: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
4590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
45a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
45b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
45c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
4600: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
4610: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 54 72 c static void Tr
4620: 61 63 65 43 6f 72 65 28 0d 0a 20 20 20 20 20 20 aceCore(..
4630: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
4640: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 message,..
4650: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
4660: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 g category..
4670: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
4680: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f lo
46a0: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 ck (syncRoot)..
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
46c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
46d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
46f0: 20 4e 4f 54 45 3a 20 57 72 69 74 65 20 74 68 65 NOTE: Write the
4700: 20 6d 65 73 73 61 67 65 20 74 6f 20 61 6c 6c 20 message to all
4710: 74 68 65 20 61 63 74 69 76 65 20 74 72 61 63 65 the active trace
4720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4730: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c // l
4740: 69 73 74 65 6e 65 72 73 2e 0d 0a 20 20 20 20 20 isteners...
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
4760: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
4770: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 Trace.Wri
4780: 74 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 teLine(message,
4790: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 category);..
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
47b0: 54 72 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d 0a Trace.Flush();..
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
47d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
47e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
47f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4830: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
4840: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d [MethodImpl(M
4850: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 ethodImplOptions
4860: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 .NoInlining)]..
4870: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
4880: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 c static string
4890: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a DebugAndTrace(..
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48b0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 TracePriority tr
48c0: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 acePriority,..
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
48e0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 aceCallback debu
48f0: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 gCallback,..
4900: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
4910: 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 eCallback traceC
4920: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 allback,..
4930: 20 20 20 20 20 20 20 20 20 20 45 78 63 65 70 74 Except
4940: 69 6f 6e 20 65 78 63 65 70 74 69 6f 6e 2c 0d 0a ion exception,..
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4960: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d string category.
4970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4980: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )..
4990: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
49a0: 20 20 20 69 66 20 28 65 78 63 65 70 74 69 6f 6e if (exception
49b0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 != null)..
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
49d0: 65 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 eturn DebugAndTr
49e0: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 ace(tracePriorit
49f0: 79 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b y, debugCallback
4a00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
4a10: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
4a20: 43 61 6c 6c 62 61 63 6b 2c 20 6e 65 77 20 53 74 Callback, new St
4a30: 61 63 6b 54 72 61 63 65 28 65 78 63 65 70 74 69 ackTrace(excepti
4a40: 6f 6e 2c 20 74 72 75 65 29 2c 20 30 2c 0d 0a 20 on, true), 0,..
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a60: 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e exception
4a70: 2e 54 6f 53 74 72 69 6e 67 28 29 2c 20 63 61 74 .ToString(), cat
4a80: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
4a90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
4aa0: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 n null;..
4ab0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
4ac0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
4ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
4b10: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 [Method
4b20: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f Impl(MethodImplO
4b30: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e ptions.NoInlinin
4b40: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 g)]..
4b50: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 public static s
4b60: 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 tring DebugAndTr
4b70: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ace(..
4b80: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 TracePrior
4b90: 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 ity tracePriorit
4ba0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
4bb0: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 TraceCallbac
4bc0: 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c k debugCallback,
4bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4be0: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 TraceCallback
4bf0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a traceCallback,..
4c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c10: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d string message,.
4c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4c30: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 string category
4c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4c50: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )..
4c60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
4c70: 20 20 20 20 72 65 74 75 72 6e 20 44 65 62 75 67 return Debug
4c80: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 AndTrace(..
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
4ca0: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 racePriority, de
4cb0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 bugCallback, tra
4cc0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c ceCallback, null
4cd0: 2c 20 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 , 1,..
4ce0: 20 20 20 20 20 20 20 20 20 20 6d 65 73 73 61 67 messag
4cf0: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 e, category);..
4d00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
4d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
4d60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b ... [
4d70: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f MethodImpl(Metho
4d80: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 dImplOptions.NoI
4d90: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 nlining)]..
4da0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
4db0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 tatic string Deb
4dc0: 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 ugAndTrace(..
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
4de0: 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 cePriority trace
4df0: 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 Priority,..
4e00: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
4e10: 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 Callback debugCa
4e20: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 llback,..
4e30: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 TraceCa
4e40: 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c llback traceCall
4e50: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 back,..
4e60: 20 20 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 StackTrac
4e70: 65 20 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 e stackTrace,..
4e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
4e90: 6e 74 20 6c 65 76 65 6c 2c 0d 0a 20 20 20 20 20 nt level,..
4ea0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
4eb0: 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 g message,..
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
4ed0: 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 ng category..
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
4f10: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
4f20: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 // NOTE: Alwa
4f30: 79 73 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c ys skip this cal
4f40: 6c 20 66 72 61 6d 65 20 69 66 20 74 68 65 20 73 l frame if the s
4f50: 74 61 63 6b 20 74 72 61 63 65 20 69 73 0d 0a 20 tack trace is..
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
4f70: 2f 20 20 20 20 20 20 20 67 6f 69 6e 67 20 74 6f / going to
4f80: 20 62 65 20 63 61 70 74 75 72 65 64 20 62 79 20 be captured by
4f90: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a GetMethodName...
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4fb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
4fc0: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 if (stackTra
4fd0: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ce == null)..
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ff0: 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 level++;....
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d //.
5010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5020: 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 6d 61 74 // NOTE: Format
5030: 20 74 68 65 20 6d 65 73 73 61 67 65 20 66 6f 72 the message for
5040: 20 64 69 73 70 6c 61 79 20 28 6f 6e 63 65 29 2e display (once).
5050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5060: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
5070: 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 string for
5080: 6d 61 74 74 65 64 20 3d 20 53 74 72 69 6e 67 2e matted = String.
5090: 46 6f 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31 7d Format("{0}: {1}
50a0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
50b0: 20 20 20 20 20 20 20 20 47 65 74 4d 65 74 68 6f GetMetho
50c0: 64 4e 61 6d 65 28 73 74 61 63 6b 54 72 61 63 65 dName(stackTrace
50d0: 2c 20 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61 67 , level), messag
50e0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
50f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
5100: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f // NO
5110: 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75 67 TE: If the debug
5120: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 callback is inv
5130: 61 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 alid or the trac
5140: 65 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 e priority..
5150: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
5160: 20 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 of this mes
5170: 73 61 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 sage is less tha
5180: 6e 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e n what we curren
5190: 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 tly want to..
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
51b0: 20 20 20 20 20 20 64 65 62 75 67 2c 20 73 6b 69 debug, ski
51c0: 70 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 p it...
51d0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
51e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 if ((
51f0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 21 3d debugCallback !=
5200: 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 null) &&..
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
5220: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d tracePriority >=
5230: 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 DebugPriority))
5240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5250: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
5260: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5280: 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 // NOTE: Invoke
5290: 20 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 the debug callb
52a0: 61 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 ack with the for
52b0: 6d 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 matted..
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
52d0: 20 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 message and
52e0: 20 74 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 the category sp
52f0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a ecified by the..
5300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5310: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c // cal
5320: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ler...
5330: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5350: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 28 debugCallback(
5360: 66 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 formatted, categ
5370: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 ory);..
5380: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
5390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
53b0: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 // NOTE: If the
53c0: 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 69 trace callback i
53d0: 73 20 69 6e 76 61 6c 69 64 20 6f 72 20 74 68 65 s invalid or the
53e0: 20 74 72 61 63 65 20 70 72 69 6f 72 69 74 79 0d trace priority.
53f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5400: 20 2f 2f 20 20 20 20 20 20 20 6f 66 20 74 68 69 // of thi
5410: 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73 s message is les
5420: 73 20 74 68 61 6e 20 77 68 61 74 20 77 65 20 63 s than what we c
5430: 75 72 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f urrently want to
5440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5450: 20 20 2f 2f 20 20 20 20 20 20 20 74 72 61 63 65 // trace
5460: 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20 20 , skip it...
5470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
5480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5490: 69 66 20 28 28 74 72 61 63 65 43 61 6c 6c 62 61 if ((traceCallba
54a0: 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a ck != null) &&..
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
54c0: 20 20 20 20 28 74 72 61 63 65 50 72 69 6f 72 69 (tracePriori
54d0: 74 79 20 3e 3d 20 54 72 61 63 65 50 72 69 6f 72 ty >= TracePrior
54e0: 69 74 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ity))..
54f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
5500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
5510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5520: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 // NOTE: I
5530: 6e 76 6f 6b 65 20 74 68 65 20 74 72 61 63 65 20 nvoke the trace
5540: 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 callback with th
5550: 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20 20 e formatted..
5560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5570: 20 2f 2f 20 20 20 20 20 20 20 6d 65 73 73 61 67 // messag
5580: 65 20 61 6e 64 20 74 68 65 20 63 61 74 65 67 6f e and the catego
5590: 72 79 20 73 70 65 63 69 66 69 65 64 20 62 79 20 ry specified by
55a0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 the..
55b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
55c0: 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 caller...
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
55e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
55f0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
5600: 62 61 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c 20 back(formatted,
5610: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 category);..
5620: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
5630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5640: 20 72 65 74 75 72 6e 20 6d 65 73 73 61 67 65 3b return message;
5650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
5660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e . #en
5670: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 dregion..
5680: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 }.. #end
5690: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
56a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
56b0: 2f 2f 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 0d 0a 0d 0a 20 20 20 /////////....
56f0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63 #region Moc
5700: 6b 52 65 67 69 73 74 72 79 20 43 6c 61 73 73 0d kRegistry Class.
5710: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 . private
5720: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f sealed class Mo
5730: 63 6b 52 65 67 69 73 74 72 79 20 3a 20 49 44 69 ckRegistry : IDi
5740: 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 sposable..
5750: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
5760: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 #region Public
5770: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 Constructors..
5780: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
5790: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 29 0d MockRegistry().
57a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
57b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57c0: 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a whatIf = true;..
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57e0: 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b readOnly = true;
57f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5800: 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a safe = true;..
5810: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
5820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
5830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5870: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
5880: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 public MockRegis
5890: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 try(..
58a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
58b0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 f..
58c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 )..
58d0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a : this()..
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
58f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
5900: 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 his.whatIf = wha
5910: 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf;..
5920: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
5930: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5970: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
5980: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 public Moc
5990: 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 kRegistry(..
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
59b0: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
59c0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 bool r
59d0: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 eadOnly..
59e0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 )..
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 : th
5a00: 69 73 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20 is(whatIf)..
5a10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
5a20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
5a30: 72 65 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f readOnly = readO
5a40: 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 nly;..
5a50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
5a60: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
5ab0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 public Moc
5ac0: 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 kRegistry(..
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
5ae0: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
5af0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 bool r
5b00: 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 eadOnly,..
5b10: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 bool s
5b20: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 afe..
5b30: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 )..
5b40: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 : this(w
5b50: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 hatIf, readOnly)
5b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
5b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5b80: 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 this.safe = saf
5b90: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
5ba0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 }.. #
5bb0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 endregion....
5bc0: 20 20 20 20 20 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 #reg
5c20: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 ion Public Prope
5c30: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 rties..
5c40: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 private bool
5c50: 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 whatIf;..
5c60: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c public bool
5c70: 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 WhatIf..
5c80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
5c90: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 get { Ch
5ca0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 eckDisposed(); r
5cb0: 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d eturn whatIf; }.
5cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5cd0: 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 set { CheckDisp
5ce0: 6f 73 65 64 28 29 3b 20 77 68 61 74 49 66 20 3d osed(); whatIf =
5cf0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
5d00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
5d10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
5d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
5d60: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
5d70: 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 te bool readOnly
5d80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
5d90: 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f ublic bool ReadO
5da0: 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nly..
5db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
5dc0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 get { CheckD
5dd0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 isposed(); retur
5de0: 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 n readOnly; }..
5df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
5e00: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 et { CheckDispos
5e10: 65 64 28 29 3b 20 72 65 61 64 4f 6e 6c 79 20 3d ed(); readOnly =
5e20: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
5e30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
5e40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
5e90: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
5ea0: 74 65 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 te bool safe;..
5eb0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
5ec0: 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20 c bool Safe..
5ed0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
5ef0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 { CheckDisposed(
5f00: 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20 ); return safe;
5f10: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
5f20: 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 set { CheckDi
5f30: 73 70 6f 73 65 64 28 29 3b 20 73 61 66 65 20 3d sposed(); safe =
5f40: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
5f50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
5f60: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
5fb0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
5fc0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b te MockRegistryK
5fd0: 65 79 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d ey classesRoot;.
5fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
5ff0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 lic MockRegistry
6000: 4b 65 79 20 43 6c 61 73 73 65 73 52 6f 6f 74 0d Key ClassesRoot.
6010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6030: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 get..
6040: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
6050: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 Chec
6060: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a kDisposed();....
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6080: 20 20 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 if (classesR
6090: 6f 6f 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 oot == null)..
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
60b0: 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f classesRoo
60c0: 74 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 t = new MockRegi
60d0: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 stryKey(..
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
60f0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 Registry.C
6100: 6c 61 73 73 65 73 52 6f 6f 74 2c 20 77 68 61 74 lassesRoot, what
6110: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 If, readOnly, sa
6120: 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 fe);....
6130: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
6140: 72 6e 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d rn classesRoot;.
6150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6160: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
6170: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
6180: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
6190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
61a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
61c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
61d0: 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b private Mock
61e0: 52 65 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 RegistryKey curr
61f0: 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 entConfig;..
6200: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d public M
6210: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 ockRegistryKey C
6220: 75 72 72 65 6e 74 43 6f 6e 66 69 67 0d 0a 20 20 urrentConfig..
6230: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 get
6250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
6260: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
6270: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 CheckDi
6280: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 sposed();....
6290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
62a0: 20 69 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 if (currentConf
62b0: 69 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ig == null)..
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
62d0: 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 currentConf
62e0: 69 67 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 ig = new MockReg
62f0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 istryKey(..
6300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6310: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e Registry.
6320: 43 75 72 72 65 6e 74 43 6f 6e 66 69 67 2c 20 77 CurrentConfig, w
6330: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c hatIf, readOnly,
6340: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 safe);....
6350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
6360: 65 74 75 72 6e 20 63 75 72 72 65 6e 74 43 6f 6e eturn currentCon
6370: 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 fig;..
6380: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
6390: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
63a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
63b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
63f0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
6400: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 MockRegistryKey
6410: 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 currentUser;..
6420: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
6430: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 c MockRegistryKe
6440: 79 20 43 75 72 72 65 6e 74 55 73 65 72 0d 0a 20 y CurrentUser..
6450: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 ge
6470: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t..
6480: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
6490: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 CheckD
64a0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 isposed();....
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64c0: 20 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 if (currentUse
64d0: 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 r == null)..
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64f0: 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20 currentUser
6500: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 = new MockRegist
6510: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ryKey(..
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6530: 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 Registry.Cur
6540: 72 65 6e 74 55 73 65 72 2c 20 77 68 61 74 49 66 rentUser, whatIf
6550: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 , readOnly, safe
6560: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
6570: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
6580: 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 currentUser;..
6590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
65a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
65b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
65c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
65e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
65f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6600: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
6610: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 private MockRe
6620: 67 69 73 74 72 79 4b 65 79 20 64 79 6e 44 61 74 gistryKey dynDat
6630: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 a;..
6640: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 public MockRegis
6650: 74 72 79 4b 65 79 20 44 79 6e 44 61 74 61 0d 0a tryKey DynData..
6660: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
6670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 g
6680: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 et..
6690: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
66a0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b Check
66b0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 Disposed();....
66c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
66d0: 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20 3d if (dynData =
66e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6700: 20 64 79 6e 44 61 74 61 20 3d 20 6e 65 77 20 4d dynData = new M
6710: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d ockRegistryKey(.
6720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 Reg
6740: 69 73 74 72 79 2e 44 79 6e 44 61 74 61 2c 20 77 istry.DynData, w
6750: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c hatIf, readOnly,
6760: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 safe);....
6770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
6780: 65 74 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d 0a eturn dynData;..
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
67a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
67b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
67c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6800: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
6810: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 private MockR
6820: 65 67 69 73 74 72 79 4b 65 79 20 6c 6f 63 61 6c egistryKey local
6830: 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 Machine;..
6840: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 public Moc
6850: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4c 6f 63 kRegistryKey Loc
6860: 61 6c 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20 20 alMachine..
6870: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
6880: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 get..
6890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
68a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
68b0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f CheckDispo
68c0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 sed();....
68d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
68e0: 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d (localMachine =
68f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6910: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20 localMachine =
6920: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 new MockRegistry
6930: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 Key(..
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6950: 20 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c Registry.Local
6960: 4d 61 63 68 69 6e 65 2c 20 77 68 61 74 49 66 2c Machine, whatIf,
6970: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 readOnly, safe)
6980: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
6990: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
69a0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 localMachine;..
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
69c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
69d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
69e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6a20: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
6a30: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 private MockRe
6a40: 67 69 73 74 72 79 4b 65 79 20 70 65 72 66 6f 72 gistryKey perfor
6a50: 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 manceData;..
6a60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d public M
6a70: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 50 ockRegistryKey P
6a80: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 0d 0a erformanceData..
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 g
6ab0: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 et..
6ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
6ad0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b Check
6ae0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 Disposed();....
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b00: 20 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e if (performan
6b10: 63 65 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d ceData == null).
6b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6b30: 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d perform
6b40: 61 6e 63 65 44 61 74 61 20 3d 20 6e 65 77 20 4d anceData = new M
6b50: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d ockRegistryKey(.
6b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 Reg
6b80: 69 73 74 72 79 2e 50 65 72 66 6f 72 6d 61 6e 63 istry.Performanc
6b90: 65 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72 eData, whatIf, r
6ba0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d eadOnly, safe);.
6bb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
6bc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 65 return pe
6bd0: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a rformanceData;..
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6bf0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
6c00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
6c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6c50: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
6c60: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 private MockR
6c70: 65 67 69 73 74 72 79 4b 65 79 20 75 73 65 72 73 egistryKey users
6c80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
6c90: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 ublic MockRegist
6ca0: 72 79 4b 65 79 20 55 73 65 72 73 0d 0a 20 20 20 ryKey Users..
6cb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d get.
6cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6ce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
6cf0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 CheckDis
6d00: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 posed();....
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6d20: 69 66 20 28 75 73 65 72 73 20 3d 3d 20 6e 75 6c if (users == nul
6d30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 user
6d50: 73 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 s = new MockRegi
6d60: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 stryKey(..
6d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6d80: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 55 Registry.U
6d90: 73 65 72 73 2c 20 77 68 61 74 49 66 2c 20 72 65 sers, whatIf, re
6da0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a adOnly, safe);..
6db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
6dc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 75 73 65 return use
6dd0: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rs;..
6de0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
6df0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
6e00: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
6e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
6e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6e60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
6e70: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 22 #region Public "
6e80: 52 65 67 69 73 74 72 79 22 20 4d 65 74 68 6f 64 Registry" Method
6e90: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 s.. p
6ea0: 75 62 6c 69 63 20 6f 62 6a 65 63 74 20 47 65 74 ublic object Get
6eb0: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 Value(..
6ec0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b string k
6ed0: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 eyName,..
6ee0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
6ef0: 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 valueName,..
6f00: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje
6f10: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d ct defaultValue.
6f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6f30: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )..
6f40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
6f50: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 CheckDisposed
6f60: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ();....
6f70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 return Re
6f80: 67 69 73 74 72 79 2e 47 65 74 56 61 6c 75 65 28 gistry.GetValue(
6f90: 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 keyName, valueNa
6fa0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 me, defaultValue
6fb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
6fc0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
6fd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7010: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
7020: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 public void
7030: 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 SetValue(..
7040: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
7050: 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 g keyName,..
7060: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
7070: 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 ng valueName,..
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f o
7090: 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 bject value..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
70d0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d heckDisposed();.
70e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
70f0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 CheckReadOnly()
7100: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
7110: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 if (!whatIf
7120: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
7130: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e Registry.
7140: 53 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 SetValue(keyName
7150: 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c , valueName, val
7160: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ue);..
7170: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
7180: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
71b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
71c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
71d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 public voi
71e0: 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 d SetValue(..
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
7200: 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 ing keyName,..
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
7220: 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d ring valueName,.
7230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7240: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a object value,..
7250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7260: 52 65 67 69 73 74 72 79 56 61 6c 75 65 4b 69 6e RegistryValueKin
7270: 64 20 76 61 6c 75 65 4b 69 6e 64 0d 0a 20 20 20 d valueKind..
7280: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
7290: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
72b0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d heckDisposed();.
72c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
72d0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 CheckReadOnly()
72e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
72f0: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 if (!whatIf
7300: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
7310: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e Registry.
7320: 53 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 SetValue(keyName
7330: 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c , valueName, val
7340: 75 65 2c 20 76 61 6c 75 65 4b 69 6e 64 29 3b 0d ue, valueKind);.
7350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
7360: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 #end
7370: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
7380: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
73c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
73d0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e #region
73e0: 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 Private Methods
73f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 .. pr
7400: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b ivate void Check
7410: 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 ReadOnly()..
7420: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
7430: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
7450: 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61 64 / NOTE: In "read
7460: 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20 -only" mode, we
7470: 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 disallow all wri
7480: 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 te access...
7490: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
74b0: 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a if (!readOnly)..
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
74d0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 return;....
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
74f0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 hrow new Invalid
7500: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 OperationExcepti
7510: 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 on();..
7520: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
7530: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
7540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
7550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7570: 2f 2f 2f 2f 2f 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 0d ///////////////.
7590: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... #
75a0: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 region IDisposab
75b0: 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d le "Pattern" Mem
75c0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 bers..
75d0: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 private bool d
75e0: 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 isposed;..
75f0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f private vo
7600: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 id CheckDisposed
7610: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a () /* throw */..
7620: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
7640: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 f (!disposed)..
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7660: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 return;....
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 th
7680: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 row new ObjectDi
7690: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 sposedException(
76a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
76b0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f 63 typeof(Moc
76c0: 6b 52 65 67 69 73 74 72 79 29 2e 4e 61 6d 65 29 kRegistry).Name)
76d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
76e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
76f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7730: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
7740: 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 private /* pr
7750: 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 otected virtual
7760: 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 */ void Dispose(
7770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7780: 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 bool disposing
7790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
77a0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )..
77b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
77c0: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 if (!dispose
77d0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d)..
77e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
77f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 if (d
7800: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 isposing)..
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
7820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7830: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
7840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7870: 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f // dispo
7880: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 se managed resou
7890: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 rces here.....
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
78b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
78f0: 20 20 20 20 20 20 69 66 20 28 63 6c 61 73 73 65 if (classe
7900: 73 52 6f 6f 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a sRoot != null)..
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
7930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7940: 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f classesRo
7950: 6f 74 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 ot.Close();..
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7970: 20 20 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 classes
7980: 52 6f 6f 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 Root = null;..
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
79a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
79c0: 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 43 6f if (currentCo
79d0: 6e 66 69 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 nfig != null)..
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
79f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a10: 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e currentCon
7a20: 66 69 67 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 fig.Close();..
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a40: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e curren
7a50: 74 43 6f 6e 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d tConfig = null;.
7a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7a70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a90: 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e if (curren
7aa0: 74 55 73 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a tUser != null)..
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7ac0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7ae0: 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 currentUs
7af0: 65 72 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 er.Close();..
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b10: 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 current
7b20: 55 73 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 User = null;..
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b60: 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20 21 if (dynData !
7b70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7bb0: 64 79 6e 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b dynData.Close();
7bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 79 dy
7be0: 6e 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 nData = null;..
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c20: 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61 63 if (localMac
7c30: 68 69 6e 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 hine != null)..
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c70: 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 localMachi
7c80: 6e 65 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 ne.Close();..
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7ca0: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 localMa
7cb0: 63 68 69 6e 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 chine = null;..
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7cd0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7cf0: 20 20 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61 if (performa
7d00: 6e 63 65 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 nceData != null)
7d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7d20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d40: 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d perform
7d50: 61 6e 63 65 44 61 74 61 2e 43 6c 6f 73 65 28 29 anceData.Close()
7d60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
7d80: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d erformanceData =
7d90: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 null;..
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7db0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
7dd0: 28 75 73 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d (users != null).
7de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7df0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7e10: 20 20 20 20 20 20 20 20 75 73 65 72 73 2e 43 6c users.Cl
7e20: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 ose();..
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7e40: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 75 6c 6c users = null
7e50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
7e60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7e80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
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 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
7ed0: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 // releas
7ee0: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f e unmanaged reso
7ef0: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 urces here.....
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
7f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f50: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
7f60: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 // NOTE
7f70: 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 : This object is
7f80: 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a now disposed...
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7fa0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 disp
7fc0: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 osed = true;..
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
7fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 #end
8000: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
8010: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
8060: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e #region
8070: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d IDisposable Mem
8080: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 bers..
8090: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 public void Di
80a0: 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 spose()..
80b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
80c0: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 Dispose(
80d0: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 true);..
80e0: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 GC.Suppr
80f0: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 essFinalize(this
8100: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
8110: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 }.. #
8120: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 endregion....
8130: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
8140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
8180: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 #reg
8190: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a ion Destructor..
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 ~Moc
81b0: 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20 kRegistry()..
81c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 Disp
81e0: 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 ose(false);..
81f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
8200: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 #endregi
8210: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 on.. }..
8220: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f #endregio
8230: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f n.... ///
8240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8280: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
8290: 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 #region MockRegi
82a0: 73 74 72 79 4b 65 79 20 43 6c 61 73 73 0d 0a 20 stryKey Class..
82b0: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 internal
82c0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 sealed class Moc
82d0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 3a 20 49 kRegistryKey : I
82e0: 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 Disposable..
82f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
8300: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 #region Priva
8310: 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d te Constructors.
8320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
8330: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 vate MockRegistr
8340: 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 yKey()..
8350: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
8360: 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d 20 whatIf =
8370: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 true;..
8380: 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 readOnly
8390: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 = true;..
83a0: 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d 20 safe =
83b0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 true;..
83c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
83d0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
83f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
8430: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... #
8440: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f region Public Co
8450: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 nstructors..
8460: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d public M
8470: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d ockRegistryKey(.
8480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8490: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 RegistryKey key
84a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
84b0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )..
84c0: 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 : this()..
84d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 th
84f0: 69 73 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 is.key = key;..
8500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
8510: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
8520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
8560: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
8570: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 ublic MockRegist
8580: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ryKey(..
8590: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 Registry
85a0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 Key key,..
85b0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
85c0: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 subKeyName..
85d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
85f0: 3a 20 74 68 69 73 28 6b 65 79 29 0d 0a 20 20 20 : this(key)..
8600: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
8610: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 this
8620: 2e 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 .subKeyName = su
8630: 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 bKeyName;..
8640: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
8650: 20 20 20 20 20 20 20 20 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 2f 2f ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
86a0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
86b0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 c MockRegistryKe
86c0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
86d0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 RegistryKey
86e0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 key,..
86f0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 string sub
8700: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 KeyName,..
8710: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 bool w
8720: 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 hatIf..
8730: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
8740: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 : this
8750: 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 (key, subKeyName
8760: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
8770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8780: 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 this.whatIf =
8790: 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 whatIf;..
87a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
87b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
87c0: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 /////////....
8800: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
8810: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 MockRegistryKey(
8820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8830: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 RegistryKey ke
8840: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
8850: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 string subKe
8860: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 yName,..
8870: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 bool wha
8880: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf,..
8890: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f bool readO
88a0: 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nly..
88b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 )..
88c0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b : this(k
88d0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 ey, subKeyName,
88e0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 whatIf)..
88f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
8900: 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 this.rea
8910: 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 dOnly = readOnly
8920: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
8930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
8940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8980: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
8990: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 public MockRe
89a0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 gistryKey(..
89b0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 Regi
89c0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 stryKey key,..
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
89e0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c ring subKeyName,
89f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8a00: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a bool whatIf,..
8a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8a20: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a bool readOnly,..
8a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8a40: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 bool safe..
8a50: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 )..
8a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 :
8a70: 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 this(key, subKey
8a80: 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 Name, whatIf, re
8a90: 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 adOnly)..
8aa0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
8ab0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61 66 this.saf
8ac0: 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 e = safe;..
8ad0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
8ae0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
8b30: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
8b40: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 c MockRegistryKe
8b50: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
8b60: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 RegistryKey
8b70: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 key,..
8b80: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
8b90: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 f..
8ba0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 )..
8bb0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 : this(key
8bc0: 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29 0d , null, whatIf).
8bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8bf0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a // do nothing...
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
8c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8c60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
8c70: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 public MockRegis
8c80: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 tryKey(..
8c90: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 Registr
8ca0: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 yKey key,..
8cb0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
8cc0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 whatIf,..
8cd0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 bool re
8ce0: 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 adOnly..
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 29 0d 0a tIf, readOnly)..
8d30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
8d50: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 / do nothing...
8d60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
8d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d ///////////////.
8dc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
8dd0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 ublic MockRegist
8de0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ryKey(..
8df0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 Registry
8e00: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 Key key,..
8e10: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 bool w
8e20: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 hatIf,..
8e30: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 bool rea
8e40: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 dOnly,..
8e50: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 bool saf
8e60: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
8e70: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 )..
8e80: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 : this(key
8e90: 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 , null, whatIf,
8ea0: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 0d readOnly, safe).
8eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8ed0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a // do nothing...
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
8ef0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 #endr
8f00: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
8f10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
8f20: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 ////////....
8f60: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 #region
8f70: 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a Public Methods..
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
8f90: 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d ic void Close().
8fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8fc0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
8fd0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 // NOTE: No
8fe0: 64 69 73 70 6f 73 65 64 20 63 68 65 63 6b 20 68 disposed check h
8ff0: 65 72 65 20 62 65 63 61 75 73 65 20 63 61 6c 6c ere because call
9000: 69 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64 0d ing this method.
9010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9020: 20 2f 2f 20 20 20 20 20 20 20 73 68 6f 75 6c 64 // should
9030: 20 62 65 20 6a 75 73 74 20 6c 69 6b 65 20 63 61 be just like ca
9040: 6c 6c 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d 0a lling Dispose...
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9060: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
9070: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 Dispose(true
9080: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
9090: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
90a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
90b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
90e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
90f0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 public MockR
9100: 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 egistryKey Creat
9110: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 eSubKey(..
9120: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
9130: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 subKeyName..
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
9150: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
9170: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d heckDisposed();.
9180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9190: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 CheckReadOnly()
91a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
91b0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 if (key ==
91c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
91d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
91e0: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 n null;....
91f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77 if (w
9200: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 hatIf)..
9210: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
9230: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
9240: 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 // HACK:
9250: 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 Attempt to open
9260: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73 75 the specified su
9270: 62 2d 6b 65 79 2e 20 20 49 66 20 74 68 69 73 0d b-key. If this.
9280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9290: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 61 // fa
92a0: 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d ils, we will sim
92b0: 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 77 ply return the w
92c0: 72 61 70 70 65 64 20 72 6f 6f 74 20 6b 65 79 0d rapped root key.
92d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
92e0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 // it
92f0: 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 self since no wr
9300: 69 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 ites are allowed
9310: 20 69 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 in 'what-if'..
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9330: 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 // mode
9340: 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 anyhow...
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
9360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9370: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 RegistryKe
9380: 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f y subKey = key.O
9390: 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 penSubKey(subKey
93a0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 Name);....
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
93c0: 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 turn (subKey !=
93d0: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 null) ?..
93e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93f0: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 new MockRegistr
9400: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 yKey(..
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9420: 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 77 subKey, w
9430: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c hatIf, readOnly,
9440: 20 73 61 66 65 29 20 3a 0d 0a 20 20 20 20 20 20 safe) :..
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9460: 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 new MockRegist
9470: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ryKey(..
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9490: 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 key, sub
94a0: 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c KeyName, whatIf,
94b0: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 readOnly, safe)
94c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
94d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
94e0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 else..
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
9500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9510: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f return new Mo
9520: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a ckRegistryKey(..
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9540: 20 20 20 20 20 20 20 20 6b 65 79 2e 43 72 65 61 key.Crea
9550: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e teSubKey(subKeyN
9560: 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 72 65 ame), whatIf, re
9570: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a adOnly, safe);..
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9590: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
95a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
95b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
95c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
95d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
95e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
95f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
9600: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 public void D
9610: 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 eleteSubKey(..
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
9630: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c ring subKeyName,
9640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9650: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 bool throwOnMi
9660: 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 ssing..
9670: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
9680: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
9690: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 CheckDi
96a0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 sposed();..
96b0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b Check
96c0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 ReadOnly();....
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
96e0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d f (key == null).
96f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9700: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a return;....
9710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9720: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 if (!whatIf)..
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9740: 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b key.DeleteSubK
9750: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 ey(subKeyName, t
9760: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d hrowOnMissing);.
9770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
9780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
9790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
97d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
97e0: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c public void Del
97f0: 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a eteSubKeyTree(..
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9810: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d string subKeyNam
9820: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
9830: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 )..
9840: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
9850: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 CheckDispos
9860: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 ed();..
9870: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 CheckRead
9880: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 Only();....
9890: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b if (k
98a0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ey == null)..
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
98c0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 return;....
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
98e0: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 !whatIf)..
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 ke
9900: 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 y.DeleteSubKeyTr
9910: 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d ee(subKeyName);.
9920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
9930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
9940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9980: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
9990: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c public void Del
99a0: 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 eteValue(..
99b0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
99c0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 g name,..
99d0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 bool th
99e0: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 rowOnMissing..
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d ).
9a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a20: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b CheckDisposed();
9a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9a40: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 CheckReadOnly(
9a50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
9a60: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d if (key ==
9a70: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
9a90: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 rn;....
9aa0: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 if (!what
9ab0: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If)..
9ac0: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c key.Del
9ad0: 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74 eteValue(name, t
9ae0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d hrowOnMissing);.
9af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
9b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
9b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9b50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
9b60: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d public string[]
9b70: 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 GetSubKeyNames(
9b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
9b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9ba0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 CheckDisposed(
9bb0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
9bc0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d if (key ==
9bd0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
9bf0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 rn null;....
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
9c10: 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 rn key.GetSubKey
9c20: 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 Names();..
9c30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
9c40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 //////////....
9c90: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
9ca0: 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 object GetValue
9cb0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
9cc0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d string name,.
9cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9ce0: 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 object defaultV
9cf0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alue..
9d00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
9d10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
9d20: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 CheckDis
9d30: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 posed();....
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
9d50: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 key == null)..
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9d70: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a return null;..
9d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9d90: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 return key.Get
9da0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61 Value(name, defa
9db0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 ultValue);..
9dc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
9dd0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
9de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
9e30: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b ic MockRegistryK
9e40: 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a ey OpenSubKey(..
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9e60: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d string subKeyNam
9e70: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
9e80: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 )..
9e90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
9ea0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 CheckDispos
9eb0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ed();....
9ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
9ed0: 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 OpenSubKey(subKe
9ee0: 79 4e 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d 0a yName, false);..
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
9f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
9f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9f50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
9f60: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 public MockRegis
9f70: 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 tryKey OpenSubKe
9f80: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
9f90: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 string subKe
9fa0: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 yName,..
9fb0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 bool wri
9fc0: 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 table..
9fd0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
9fe0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
9ff0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 CheckDi
a000: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 sposed();....
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
a020: 28 77 72 69 74 61 62 6c 65 29 0d 0a 20 20 20 20 (writable)..
a030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a040: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b CheckReadOnly();
a050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
a060: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e if (key == n
a070: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
a080: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
a090: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 null;....
a0a0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 Regist
a0b0: 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b ryKey subKey = k
a0c0: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a ey.OpenSubKey(..
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a0e0: 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 subKeyName,
a0f0: 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a whatIf ? false :
a100: 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 writable);....
a110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
a120: 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d eturn (subKey !=
a130: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 null) ?..
a140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 ne
a150: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 w MockRegistryKe
a160: 79 28 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 y(subKey, whatIf
a170: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 , readOnly, safe
a180: 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 ) : null;..
a190: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
a1a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
a1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
a1f0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
a200: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 c void SetValue(
a210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
a220: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a string name,..
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a240: 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 object value..
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d ).
a260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
a270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a280: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b CheckDisposed();
a290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
a2a0: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 CheckReadOnly(
a2b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
a2c0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d if (key ==
a2d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
a2f0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 rn;....
a300: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 if (!what
a310: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If)..
a320: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 key.Set
a330: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 Value(name, valu
a340: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e);..
a350: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
a360: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 #endregion....
a370: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
a380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
a3c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 . #re
a3d0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 gion Public Prop
a3e0: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 erties..
a3f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e public strin
a400: 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 g Name..
a410: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
a420: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 get..
a430: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a450: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 CheckDisposed
a460: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ();....
a470: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b if (k
a480: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ey == null)..
a490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a4a0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c return null
a4b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
a4c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
a4d0: 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 !String.IsNullOr
a4e0: 45 6d 70 74 79 28 73 75 62 4b 65 79 4e 61 6d 65 Empty(subKeyName
a4f0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ) ?..
a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 Str
a510: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c ing.Format("{0}\
a520: 5c 7b 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c \{1}", key.Name,
a530: 20 73 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a subKeyName) :..
a540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a550: 20 20 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d 65 key.Name
a560: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
a570: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
a580: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
a590: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
a5e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65 private Re
a5f0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d 0a gistryKey key;..
a600: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
a610: 69 63 20 52 65 67 69 73 74 72 79 4b 65 79 20 4b ic RegistryKey K
a620: 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ey..
a630: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
a640: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 get { CheckDi
a650: 73 70 6f 73 65 64 28 29 3b 20 43 68 65 63 6b 53 sposed(); CheckS
a660: 61 66 65 28 29 3b 20 72 65 74 75 72 6e 20 6b 65 afe(); return ke
a670: 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 y; }..
a680: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
a690: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
a6e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
a6f0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 3b ring subKeyName;
a700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
a710: 62 6c 69 63 20 73 74 72 69 6e 67 20 53 75 62 4b blic string SubK
a720: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 eyName..
a730: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
a740: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 get { Che
a750: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 ckDisposed(); re
a760: 74 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 3b turn subKeyName;
a770: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
a780: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
a790: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a7d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
a7e0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c private bool
a7f0: 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 whatIf;..
a800: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f public boo
a810: 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 l WhatIf..
a820: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
a830: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 get { C
a840: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 heckDisposed();
a850: 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d return whatIf; }
a860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
a870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
a880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a8c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
a8d0: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 private bool r
a8e0: 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 eadOnly;..
a8f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f public boo
a900: 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 l ReadOnly..
a910: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
a920: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b get {
a930: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 CheckDisposed()
a940: 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c ; return readOnl
a950: 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 y; }..
a960: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
a970: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
a9c0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f public boo
a9d0: 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 l safe;..
a9e0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c public bool
a9f0: 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 Safe..
aa00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
aa10: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 get { Chec
aa20: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 kDisposed(); ret
aa30: 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 urn safe; }..
aa40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
aa50: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 #endregi
aa60: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 on....
aa70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
aab0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
aac0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 #region Pri
aad0: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 vate Methods..
aae0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
aaf0: 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 e void CheckRead
ab00: 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 Only()..
ab10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
ab20: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
ab30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f // NO
ab40: 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c TE: In "read-onl
ab50: 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 y" mode, we disa
ab60: 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 llow all write a
ab70: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 ccess...
ab80: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
aba0: 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 !readOnly)..
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
abc0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 return;....
abd0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 throw
abe0: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 new InvalidOper
abf0: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 ationException()
ac00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
ac10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ac40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ac50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ac60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
ac70: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 private void
ac80: 43 68 65 63 6b 53 61 66 65 28 29 0d 0a 20 20 20 CheckSafe()..
ac90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
acc0: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61 66 // NOTE: In "saf
acd0: 65 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 e" mode, we disa
ace0: 6c 6c 6f 77 20 61 6c 6c 20 64 69 72 65 63 74 20 llow all direct
acf0: 61 63 63 65 73 73 20 74 6f 20 74 68 65 0d 0a 20 access to the..
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
ad10: 2f 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 / containe
ad20: 64 20 72 65 67 69 73 74 72 79 20 6b 65 79 2e 0d d registry key..
ad30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ad40: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
ad50: 20 20 20 20 20 69 66 20 28 21 73 61 66 65 29 0d if (!safe).
ad60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ad70: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a return;....
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ad90: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 throw new Invali
ada0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 dOperationExcept
adb0: 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 ion();..
adc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
add0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
ade0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
adf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ae30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
ae40: 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f #region System.O
ae50: 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d bject Overrides.
ae60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
ae70: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 lic override str
ae80: 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a ing ToString()..
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
aeb0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d heckDisposed();.
aec0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
aed0: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 4e return this.N
aee0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ame;..
aef0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
af00: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 #endregion....
af10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
af20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
af30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
af60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 .. #r
af70: 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20 43 egion Implicit C
af80: 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72 61 74 onversion Operat
af90: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ors..
afa0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
afb0: 20 2f 2f 20 42 55 47 42 55 47 3a 20 52 65 6d 6f // BUGBUG: Remo
afc0: 76 65 20 6d 65 3f 20 20 54 68 69 73 20 73 68 6f ve me? This sho
afd0: 75 6c 64 20 62 65 20 73 61 66 65 20 62 65 63 61 uld be safe beca
afe0: 75 73 65 20 69 6e 20 27 77 68 61 74 2d 69 66 27 use in 'what-if'
aff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
b000: 20 20 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6c mode al
b010: 6c 20 6b 65 79 73 20 61 72 65 20 6f 70 65 6e 65 l keys are opene
b020: 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 d read-only...
b030: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
b040: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
b050: 20 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69 74 static implicit
b060: 20 6f 70 65 72 61 74 6f 72 20 52 65 67 69 73 74 operator Regist
b070: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ryKey(..
b080: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 MockRegi
b090: 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 stryKey key..
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
b0d0: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 eturn (key != nu
b0e0: 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79 20 3a 20 ll) ? key.Key :
b0f0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 null;..
b100: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
b110: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
b120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
b130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
b170: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... #
b180: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 region IDisposab
b190: 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d le "Pattern" Mem
b1a0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 bers..
b1b0: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 private bool d
b1c0: 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 isposed;..
b1d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f private vo
b1e0: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 id CheckDisposed
b1f0: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a () /* throw */..
b200: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
b210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
b220: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 f (!disposed)..
b230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b240: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 return;....
b250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 th
b260: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 row new ObjectDi
b270: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 sposedException(
b280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
b290: 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f 63 typeof(Moc
b2a0: 6b 52 65 67 69 73 74 72 79 4b 65 79 29 2e 4e 61 kRegistryKey).Na
b2b0: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 me);..
b2c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
b2d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b310: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
b320: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a private /*
b330: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 protected virtu
b340: 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f al */ void Dispo
b350: 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se(..
b360: 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 bool dispos
b370: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ing..
b380: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 )..
b390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
b3a0: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70 if (!disp
b3b0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 osed)..
b3c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
b3e0: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 (disposing)..
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b400: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f ///
b420: 2f 2f 2f 2f 2f 2f 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 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
b450: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 // di
b460: 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 spose managed re
b470: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d sources here....
b480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
b490: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 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 0d 0a 0d /////////////...
b4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
b4d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 if (key
b4e0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 != null)..
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b520: 20 20 6b 65 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a key.Close();..
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b540: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 key
b550: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 = null;..
b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b570: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
b580: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
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 0d 0a 20 20 20 20 20 20 20 ///////..
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
b5e0: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 release unmanage
b5f0: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 d resources here
b600: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .....
b610: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
b640: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
b650: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
b660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
b670: 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f 62 6a / NOTE: This obj
b680: 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73 70 6f ect is now dispo
b690: 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 sed...
b6a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b6c0: 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 disposed = tru
b6d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
b6e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
b6f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
b700: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
b710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
b720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
b760: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... #
b770: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 region IDisposab
b780: 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 le Members..
b790: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 public v
b7a0: 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 oid Dispose()..
b7b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 Di
b7d0: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 spose(true);..
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 43 GC
b7f0: 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a .SuppressFinaliz
b800: 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 e(this);..
b810: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
b820: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
b830: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
b840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b880: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
b890: 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 #region Destru
b8a0: 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 ctor..
b8b0: 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b ~MockRegistryK
b8c0: 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ey()..
b8d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
b8e0: 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c Dispose(fal
b8f0: 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 se);..
b900: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
b910: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 #endregion..
b920: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
b930: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 #endregion....
b940: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
b950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d /////////////...
b990: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e . #region
b9a0: 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 20 RegistryHelper
b9b0: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 Class.. p
b9c0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63 6c rivate static cl
b9d0: 61 73 73 20 52 65 67 69 73 74 72 79 48 65 6c 70 ass RegistryHelp
b9e0: 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 er.. {..
b9f0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 #regi
ba00: 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 on Public Static
ba10: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 Properties..
ba20: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
ba30: 20 73 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b static int subK
ba40: 65 79 73 43 72 65 61 74 65 64 3b 0d 0a 20 20 20 eysCreated;..
ba50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
ba60: 73 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65 static int SubKe
ba70: 79 73 43 72 65 61 74 65 64 0d 0a 20 20 20 20 20 ysCreated..
ba80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
ba90: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
baa0: 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73 43 72 return subKeysCr
bab0: 65 61 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 eated; }..
bac0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
bad0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
bae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
baf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
bb20: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
bb30: 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 75 62 e static int sub
bb40: 4b 65 79 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 KeysDeleted;..
bb50: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
bb60: 20 73 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b static int SubK
bb70: 65 79 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 eysDeleted..
bb80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
bb90: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b get {
bba0: 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73 44 return subKeysD
bbb0: 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 eleted; }..
bbc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
bbd0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
bc20: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
bc30: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 te static int ke
bc40: 79 56 61 6c 75 65 73 53 65 74 3b 0d 0a 20 20 20 yValuesSet;..
bc50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
bc60: 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61 static int KeyVa
bc70: 6c 75 65 73 53 65 74 0d 0a 20 20 20 20 20 20 20 luesSet..
bc80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
bc90: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
bca0: 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 53 65 turn keyValuesSe
bcb0: 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 t; }..
bcc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
bcd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
bce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bd10: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
bd20: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
bd30: 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 atic int keyValu
bd40: 65 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 esDeleted;..
bd50: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 public s
bd60: 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c tatic int KeyVal
bd70: 75 65 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 uesDeleted..
bd80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
bd90: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b get {
bda0: 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 return keyValue
bdb0: 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 sDeleted; }..
bdc0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
bdd0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 #endregi
bde0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 on....
bdf0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
be30: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
be40: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 #region Pub
be50: 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f lic Static Metho
be60: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ds..
be70: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 [MethodImpl(Meth
be80: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f odImplOptions.No
be90: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 Inlining)]..
bea0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 public s
beb0: 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 tatic MockRegist
bec0: 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 ryKey OpenSubKey
bed0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
bee0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
bef0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 ey rootKey,..
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
bf10: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d ing subKeyName,.
bf20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
bf30: 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 2c 0d bool writable,.
bf40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
bf50: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 bool whatIf,..
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
bf70: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 ool verbose..
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
bfb0: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 f (rootKey == nu
bfc0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
bfd0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
bfe0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 null;....
bff0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 if (ver
c000: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 bose)..
c010: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
c020: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 Ops.DebugAndTrac
c030: 65 28 77 72 69 74 61 62 6c 65 20 3f 0d 0a 20 20 e(writable ?..
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c050: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 TracePrior
c060: 69 74 79 2e 48 69 67 68 65 73 74 20 3a 20 54 72 ity.Highest : Tr
c070: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 acePriority.High
c080: 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er,..
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 deb
c0a0: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 ugCallback, trac
c0b0: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
c0c0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c0e0: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 "rootKey = {0
c0f0: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 }, subKeyName =
c100: 7b 31 7d 2c 20 77 72 69 74 61 62 6c 65 20 3d 20 {1}, writable =
c110: 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 {2}",..
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
c130: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 orDisplay(rootKe
c140: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 y), ForDisplay(s
c150: 75 62 4b 65 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 ubKeyName),..
c160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c170: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 ForDisplay(
c180: 77 72 69 74 61 62 6c 65 29 29 2c 20 74 72 61 63 writable)), trac
c190: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
c1b0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
c1c0: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 // HACK: Alwa
c1d0: 79 73 20 66 6f 72 62 69 64 20 77 72 69 74 61 62 ys forbid writab
c1e0: 6c 65 20 61 63 63 65 73 73 20 77 68 65 6e 20 6f le access when o
c1f0: 70 65 72 61 74 69 6e 67 20 69 6e 0d 0a 20 20 20 perating in..
c200: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
c210: 20 20 20 20 20 20 27 77 68 61 74 2d 69 66 27 20 'what-if'
c220: 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 mode...
c230: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
c240: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 MockR
c250: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d egistryKey key =
c260: 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 rootKey.OpenSub
c270: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 Key(..
c280: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 subKey
c290: 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f 20 66 Name, whatIf ? f
c2a0: 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c 65 29 alse : writable)
c2b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
c2c0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 return (key
c2d0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 != null) ?..
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c2f0: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 new MockRegistr
c300: 79 4b 65 79 28 6b 65 79 2c 20 77 68 61 74 49 66 yKey(key, whatIf
c310: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 20 , false, false)
c320: 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 : null;..
c330: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
c340: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
c350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
c360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
c370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
c380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
c390: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 [Method
c3a0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f Impl(MethodImplO
c3b0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e ptions.NoInlinin
c3c0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 g)]..
c3d0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d public static M
c3e0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 ockRegistryKey C
c3f0: 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 reateSubKey(..
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f Mo
c410: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
c420: 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 otKey,..
c430: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 string s
c440: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 ubKeyName,..
c450: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
c460: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
c470: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 bool v
c480: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 erbose..
c490: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
c4a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
c4b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f if (ro
c4c0: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a otKey == null)..
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c4e0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b return null;
c4f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
c500: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 if (verbose)
c510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
c520: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 TraceOps.D
c530: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 ebugAndTrace(Tra
c540: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 cePriority.Highe
c550: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 st,..
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 deb
c570: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 ugCallback, trac
c580: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
c590: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c5b0: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 "rootKey = {0
c5c0: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 }, subKeyName =
c5d0: 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 {1}",..
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
c5f0: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 orDisplay(rootKe
c600: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 y), ForDisplay(s
c610: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 ubKeyName)),..
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c630: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
c640: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
c650: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 try..
c660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
c670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
c680: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
c690: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
c6a0: 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 6f 70 65 HACK: Always ope
c6b0: 6e 20 61 20 6b 65 79 2c 20 72 61 74 68 65 72 20 n a key, rather
c6c0: 74 68 61 6e 20 63 72 65 61 74 69 6e 67 20 6f 6e than creating on
c6d0: 65 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 e when..
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
c6f0: 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 69 operating i
c700: 6e 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 n 'what-if' mode
c710: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
c720: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
c740: 66 20 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20 f (whatIf)..
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c760: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
c770: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c790: 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 // HACK:
c7a0: 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 Attempt to open
c7b0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73 75 the specified su
c7c0: 62 2d 6b 65 79 2e 20 20 49 66 0d 0a 20 20 20 20 b-key. If..
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c7e0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 // thi
c7f0: 73 20 66 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c s fails, we will
c800: 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 20 74 simply return t
c810: 68 65 20 72 6f 6f 74 0d 0a 20 20 20 20 20 20 20 he root..
c820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c830: 20 2f 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 // key it
c840: 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 self since no wr
c850: 69 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 ites are allowed
c860: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 in..
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
c880: 20 20 20 20 20 20 27 77 68 61 74 2d 69 66 27 20 'what-if'
c890: 6d 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 mode anyhow...
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c8b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c8d0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 MockRegistryKe
c8e0: 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e y key = rootKey.
c8f0: 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 OpenSubKey(subKe
c900: 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 yName);....
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c920: 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 return (key !
c930: 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 = null) ?..
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c950: 20 20 20 20 20 20 20 6b 65 79 20 3a 20 6e 65 77 key : new
c960: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 MockRegistryKey
c970: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c990: 20 20 20 72 6f 6f 74 4b 65 79 2c 20 73 75 62 4b rootKey, subK
c9a0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 eyName, whatIf,
c9b0: 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a false, false);..
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c9d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
c9e0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d else.
c9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ca00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca20: 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 return new MockR
ca30: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 egistryKey(..
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca50: 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 rootKey
ca60: 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 .CreateSubKey(su
ca70: 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 bKeyName), whatI
ca80: 66 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 f, false,..
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
caa0: 20 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a false);..
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cac0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
cad0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
cae0: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c finall
caf0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y..
cb00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
cb10: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 subKey
cb20: 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 sCreated++;..
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
cb50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
cb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cba0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
cbb0: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 [MethodImpl(Meth
cbc0: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f odImplOptions.No
cbd0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 Inlining)]..
cbe0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 public s
cbf0: 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 tatic void Delet
cc00: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 eSubKey(..
cc10: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 MockRe
cc20: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 gistryKey rootKe
cc30: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
cc40: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 string subKe
cc50: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 yName,..
cc60: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 bool thr
cc70: 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 owOnMissing,..
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f bo
cc90: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 ol whatIf,..
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
ccb0: 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 verbose..
ccc0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 )..
ccd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
ccf0: 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 rootKey == null)
cd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
cd10: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d return;...
cd20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
cd30: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 if (verbose)..
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cd50: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 TraceOps.Debu
cd60: 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 gAndTrace(TraceP
cd70: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c riority.Highest,
cd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
cd90: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 debugC
cda0: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 allback, traceCa
cdb0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 llback, String.F
cdc0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cde0: 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 "rootKey = {0},
cdf0: 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d subKeyName = {1}
ce00: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
ce20: 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c isplay(rootKey),
ce30: 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b ForDisplay(subK
ce40: 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 eyName)),..
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ce60: 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 traceCategory
ce70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
ce80: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 if (!whatI
ce90: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f)..
cea0: 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e rootKey.
ceb0: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 DeleteSubKey(sub
cec0: 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e KeyName, throwOn
ced0: 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 Missing);....
cee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 sub
cef0: 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a KeysDeleted++;..
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
cf10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cf60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
cf70: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 [MethodImpl(Meth
cf80: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f odImplOptions.No
cf90: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 Inlining)]..
cfa0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 public s
cfb0: 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 tatic void Delet
cfc0: 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 eSubKeyTree(..
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f Mo
cfe0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
cff0: 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 otKey,..
d000: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 string s
d010: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 ubKeyName,..
d020: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
d030: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
d040: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 bool v
d050: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 erbose..
d060: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
d070: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
d080: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f if (ro
d090: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a otKey == null)..
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d0b0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 return;....
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
d0d0: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 f (verbose)..
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d0f0: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
d100: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 ndTrace(TracePri
d110: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a ority.Highest,..
d120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d130: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c debugCal
d140: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c lback, traceCall
d150: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
d160: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 "r
d180: 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 ootKey = {0}, su
d190: 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c bKeyName = {1}",
d1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d1b0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 ForDis
d1c0: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 play(rootKey), F
d1d0: 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 orDisplay(subKey
d1e0: 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 Name)),..
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d200: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
d210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
d220: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 if (!whatIf)
d230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d240: 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 rootKey.De
d250: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 leteSubKeyTree(s
d260: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 ubKeyName);....
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
d280: 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b ubKeysDeleted++;
d290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
d2a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d2f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
d300: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 [MethodImpl(Me
d310: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e thodImplOptions.
d320: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 NoInlining)]..
d330: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
d340: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d static string[]
d350: 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 GetSubKeyNames(
d360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d370: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 MockRegistryKe
d380: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 y key,..
d390: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 bool wha
d3a0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf,..
d3b0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f bool verbo
d3c0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se..
d3d0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 )..
d3e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
d3f0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d if (key ==
d400: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
d410: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
d420: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 rn null;....
d430: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
d440: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 verbose)..
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
d460: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
d470: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 race(TracePriori
d480: 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 ty.High,..
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d4a0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c debugCallback,
d4b0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 traceCallback,
d4c0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d4e0: 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b "key = {
d4f0: 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0}", ForDisplay(
d500: 6b 65 79 29 29 2c 20 74 72 61 63 65 43 61 74 65 key)), traceCate
d510: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 gory);....
d520: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
d530: 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 key.GetSubKeyNa
d540: 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 mes();..
d550: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
d560: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
d5b0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 [MethodI
d5c0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 mpl(MethodImplOp
d5d0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 tions.NoInlining
d5e0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )]..
d5f0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62 public static ob
d600: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a ject GetValue(..
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d620: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
d630: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 key,..
d640: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d string nam
d650: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
d660: 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 object defau
d670: 6c 74 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 ltValue,..
d680: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 bool w
d690: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 hatIf,..
d6a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 bool ver
d6b0: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 bose..
d6c0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
d6d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
d6e0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 if (key
d6f0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
d710: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 turn null;....
d720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
d730: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 (verbose)..
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d750: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
d760: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f dTrace(TracePrio
d770: 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20 rity.High,..
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d790: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
d7a0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
d7b0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
d7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d7d0: 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d "key =
d7e0: 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d {0}, name = {1}
d7f0: 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 20 3d , defaultValue =
d800: 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 {2}",..
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d820: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c ForDisplay(key),
d830: 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 ForDisplay(name
d840: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
d850: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
d860: 69 73 70 6c 61 79 28 64 65 66 61 75 6c 74 56 61 isplay(defaultVa
d870: 6c 75 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 lue)), traceCate
d880: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 gory);....
d890: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
d8a0: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61 key.GetValue(na
d8b0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 me, defaultValue
d8c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
d8d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
d8e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
d8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d920: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
d930: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 [MethodImpl(
d940: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e MethodImplOption
d950: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a s.NoInlining)]..
d960: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
d970: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 ic static void S
d980: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 etValue(..
d990: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 MockRe
d9a0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a gistryKey key,..
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d9c0: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 string name,..
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob
d9e0: 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 ject value,..
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
da00: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 l whatIf,..
da10: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
da20: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 verbose..
da30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 )..
da40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
da50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b if (k
da60: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ey == null)..
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
da80: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 return;....
da90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
daa0: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 verbose)..
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
dac0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
dad0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 race(TracePriori
dae0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 ty.Highest,..
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
db00: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 debugCallba
db10: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 ck, traceCallbac
db20: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 k, String.Format
db30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
db40: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 "key
db50: 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 = {0}, name = {1
db60: 7d 2c 20 76 61 6c 75 65 20 3d 20 7b 32 7d 22 2c }, value = {2}",
db70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
db80: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 ForDis
db90: 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 play(key), ForDi
dba0: 73 70 6c 61 79 28 6e 61 6d 65 29 2c 20 46 6f 72 splay(name), For
dbb0: 44 69 73 70 6c 61 79 28 76 61 6c 75 65 29 29 2c Display(value)),
dbc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
dbd0: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
dbe0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
dc00: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 (!whatIf)..
dc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b k
dc20: 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 ey.SetValue(name
dc30: 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 , value);....
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 key
dc50: 56 61 6c 75 65 73 53 65 74 2b 2b 3b 0d 0a 20 20 ValuesSet++;..
dc60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
dc70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
dc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
dc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
dca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
dcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
dcc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d .. [M
dcd0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 ethodImpl(Method
dce0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e ImplOptions.NoIn
dcf0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 lining)]..
dd00: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 public sta
dd10: 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 tic void DeleteV
dd20: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 alue(..
dd30: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 MockRegis
dd40: 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 tryKey key,..
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
dd60: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 ing name,..
dd70: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
dd80: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d throwOnMissing,.
dd90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
dda0: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 bool whatIf,..
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
ddc0: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 ool verbose..
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
de00: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d f (key == null).
de10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
de20: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a return;....
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
de40: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 if (verbose)..
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
de60: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 TraceOps.Debug
de70: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 AndTrace(TracePr
de80: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d iority.Highest,.
de90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
dea0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 debugCa
deb0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c llback, traceCal
dec0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f lback, String.Fo
ded0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
def0: 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 key = {0}, name
df00: 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c = {1}", ForDispl
df10: 61 79 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20 20 ay(key),..
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
df30: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d ForDisplay(nam
df40: 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f e)), traceCatego
df50: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ry);....
df60: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 if (!wha
df70: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf)..
df80: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 key.De
df90: 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20 leteValue(name,
dfa0: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b throwOnMissing);
dfb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
dfc0: 20 20 20 20 6b 65 79 56 61 6c 75 65 73 44 65 6c keyValuesDel
dfd0: 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 eted++;..
dfe0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
dff0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a #endregion..
e000: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
e010: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
e020: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
e030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e070: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
e080: 69 6f 6e 20 53 74 72 69 6e 67 4c 69 73 74 20 43 ion StringList C
e090: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 lass.. pr
e0a0: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 ivate sealed cla
e0b0: 73 73 20 53 74 72 69 6e 67 4c 69 73 74 20 3a 20 ss StringList :
e0c0: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 List<string>..
e0d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
e0e0: 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 public Stri
e0f0: 6e 67 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 ngList()..
e100: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 : base
e110: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ()..
e120: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
e130: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 // do nothing
e140: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ... }
e150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
e160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e1a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
e1b0: 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 public String
e1c0: 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 List(IEnumerable
e1d0: 3c 73 74 72 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 <string> collect
e1e0: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ion)..
e1f0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c : base(col
e200: 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 lection)..
e210: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
e220: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e // do n
e230: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 othing...
e240: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
e250: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 }.. #endr
e260: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
e270: 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e2b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
e2c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69 #region Stri
e2d0: 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 43 6c 61 ngDictionary Cla
e2e0: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 ss.. priv
e2f0: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 ate sealed class
e300: 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 StringDictionar
e310: 79 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 y : Dictionary<s
e320: 74 72 69 6e 67 2c 20 73 74 72 69 6e 67 3e 0d 0a tring, string>..
e330: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
e340: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 public St
e350: 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 28 29 ringDictionary()
e360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
e370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e380: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d // do nothing..
e390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
e3a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
e3b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
e3c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e410: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
e420: 69 6f 6e 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 ion VersionList
e430: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 Class.. p
e440: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c rivate sealed cl
e450: 61 73 73 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 ass VersionList
e460: 3a 20 4c 69 73 74 3c 56 65 72 73 69 6f 6e 3e 0d : List<Version>.
e470: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
e480: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 public V
e490: 65 72 73 69 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 ersionList()..
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 :
e4b0: 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 base()..
e4c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
e4d0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 // do not
e4e0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 hing...
e4f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
e500: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
e510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e540: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
e550: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 public Ve
e560: 72 73 69 6f 6e 4c 69 73 74 28 49 45 6e 75 6d 65 rsionList(IEnume
e570: 72 61 62 6c 65 3c 56 65 72 73 69 6f 6e 3e 20 63 rable<Version> c
e580: 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 ollection)..
e590: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 : ba
e5a0: 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a se(collection)..
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
e5d0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 / do nothing...
e5e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
e5f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
e600: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 #endregion....
e610: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
e660: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f .. #regio
e670: 6e 20 56 65 72 73 69 6f 6e 4d 61 70 20 43 6c 61 n VersionMap Cla
e680: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 ss.. priv
e690: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 ate sealed class
e6a0: 20 56 65 72 73 69 6f 6e 4d 61 70 20 3a 20 44 69 VersionMap : Di
e6b0: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c ctionary<string,
e6c0: 20 56 65 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 VersionList>..
e6d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
e6e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 public Ver
e6f0: 73 69 6f 6e 4d 61 70 28 29 0d 0a 20 20 20 20 20 sionMap()..
e700: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
e710: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 // do
e720: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 nothing...
e730: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
e740: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 }.. #end
e750: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
e760: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
e7b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 61 63 #region Pac
e7c0: 6b 61 67 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 kage Class..
e7d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 internal sea
e7e0: 6c 65 64 20 63 6c 61 73 73 20 50 61 63 6b 61 67 led class Packag
e7f0: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 e.. {..
e800: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f #regio
e810: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 n Public Constru
e820: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 ctors..
e830: 20 20 20 70 75 62 6c 69 63 20 50 61 63 6b 61 67 public Packag
e840: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e()..
e850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
e860: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e // do nothin
e870: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g...
e880: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 }.. #
e890: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 endregion....
e8a0: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 #reg
e900: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 ion Public Prope
e910: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 rties..
e920: 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d private Assem
e930: 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 blyName assembly
e940: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 Name;..
e950: 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 public Assemb
e960: 6c 79 4e 61 6d 65 20 41 73 73 65 6d 62 6c 79 4e lyName AssemblyN
e970: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame..
e980: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
e990: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
e9a0: 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20 7d assemblyName; }
e9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
e9c0: 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 set { assembly
e9d0: 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d Name = value; }.
e9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
e9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
ea00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ea10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ea30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ea40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
ea50: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 67 6c private bool gl
ea60: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 obalAssemblyCach
ea70: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
ea80: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 47 6c 6f 62 public bool Glob
ea90: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 0d alAssemblyCache.
eaa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eac0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 67 6c 6f get { return glo
ead0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 balAssemblyCache
eae0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
eaf0: 20 20 20 20 20 73 65 74 20 7b 20 67 6c 6f 62 61 set { globa
eb00: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d lAssemblyCache =
eb10: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
eb20: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
eb30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
eb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
eb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
eb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
eb80: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
eb90: 74 65 20 47 75 69 64 20 70 61 63 6b 61 67 65 49 te Guid packageI
eba0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d;..
ebb0: 70 75 62 6c 69 63 20 47 75 69 64 20 50 61 63 6b public Guid Pack
ebc0: 61 67 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 ageId..
ebd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
ebe0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
ebf0: 72 6e 20 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d rn packageId; }.
ec00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ec10: 20 73 65 74 20 7b 20 70 61 63 6b 61 67 65 49 64 set { packageId
ec20: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
ec30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
ec40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
ec50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ec70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
ec90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
eca0: 76 61 74 65 20 47 75 69 64 20 73 65 72 76 69 63 vate Guid servic
ecb0: 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 eId;..
ecc0: 20 20 70 75 62 6c 69 63 20 47 75 69 64 20 53 65 public Guid Se
ecd0: 72 76 69 63 65 49 64 0d 0a 20 20 20 20 20 20 20 rviceId..
ece0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
ecf0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
ed00: 74 75 72 6e 20 73 65 72 76 69 63 65 49 64 3b 20 turn serviceId;
ed10: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
ed20: 20 20 20 73 65 74 20 7b 20 73 65 72 76 69 63 65 set { service
ed30: 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 Id = value; }..
ed40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
ed60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ed80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ed90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
eda0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
edb0: 72 69 76 61 74 65 20 47 75 69 64 20 64 61 74 61 rivate Guid data
edc0: 53 6f 75 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 SourceId;..
edd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 public Gu
ede0: 69 64 20 44 61 74 61 53 6f 75 72 63 65 49 64 0d id DataSourceId.
edf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ee10: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 get { return dat
ee20: 61 53 6f 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 aSourceId; }..
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
ee40: 74 20 7b 20 64 61 74 61 53 6f 75 72 63 65 49 64 t { dataSourceId
ee50: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
ee60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
ee70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
ee80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
eec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
eed0: 76 61 74 65 20 47 75 69 64 20 64 61 74 61 50 72 vate Guid dataPr
eee0: 6f 76 69 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 oviderId;..
eef0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 public Gu
ef00: 69 64 20 44 61 74 61 50 72 6f 76 69 64 65 72 49 id DataProviderI
ef10: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b d.. {
ef20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
ef30: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 get { return d
ef40: 61 74 61 50 72 6f 76 69 64 65 72 49 64 3b 20 7d ataProviderId; }
ef50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
ef60: 20 20 73 65 74 20 7b 20 64 61 74 61 50 72 6f 76 set { dataProv
ef70: 69 64 65 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 iderId = value;
ef80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
ef90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
efe0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
eff0: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20 private Guid
f000: 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 adoNetTechnology
f010: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 Id;..
f020: 20 70 75 62 6c 69 63 20 47 75 69 64 20 41 64 6f public Guid Ado
f030: 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d NetTechnologyId.
f040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
f050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f060: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61 64 6f get { return ado
f070: 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b NetTechnologyId;
f080: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
f090: 20 20 20 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 set { adoNet
f0a0: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 TechnologyId = v
f0b0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
f0c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
f0d0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a #endregion..
f0e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
f0f0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
f100: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
f110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
f160: 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f ion Configuratio
f170: 6e 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 n Class..
f180: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 private sealed
f190: 63 6c 61 73 73 20 43 6f 6e 66 69 67 75 72 61 74 class Configurat
f1a0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a ion.. {..
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 #reg
f1c0: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 ion Private Cons
f1d0: 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 tants..
f1e0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 private const
f1f0: 20 63 68 61 72 20 53 77 69 74 63 68 20 3d 20 27 char Switch = '
f200: 2d 27 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 -';..
f210: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 private const c
f220: 68 61 72 20 41 6c 74 53 77 69 74 63 68 20 3d 20 har AltSwitch =
f230: 27 2f 27 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 '/';....
f240: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
f290: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
f2a0: 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 tatic readonly c
f2b0: 68 61 72 5b 5d 20 53 77 69 74 63 68 43 68 61 72 har[] SwitchChar
f2c0: 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 s = {..
f2d0: 20 20 20 20 20 20 20 53 77 69 74 63 68 2c 20 41 Switch, A
f2e0: 6c 74 53 77 69 74 63 68 0d 0a 20 20 20 20 20 20 ltSwitch..
f2f0: 20 20 20 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20 };..
f300: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
f310: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
f320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f360: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
f370: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 #region Priva
f380: 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d te Constructors.
f390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
f3a0: 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61 74 69 vate Configurati
f3b0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on(..
f3c0: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 Assembly as
f3d0: 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 sembly,..
f3e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
f3f0: 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 logFileName,..
f400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
f410: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d ring directory,.
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f430: 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 string coreFile
f440: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 Name,..
f450: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 string li
f460: 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 nqFileName,..
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
f480: 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 ing designerFile
f490: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 Name,..
f4a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 string re
f4b0: 67 69 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a gistryVersion,..
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f4d0: 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 string configVer
f4e0: 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 sion,..
f4f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 73 string vs
f500: 56 65 72 73 69 6f 6e 53 75 66 66 69 78 2c 0d 0a VersionSuffix,..
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f520: 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d string debugForm
f530: 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at,..
f540: 20 20 20 20 20 73 74 72 69 6e 67 20 74 72 61 63 string trac
f550: 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
f560: 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c Instal
f570: 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c lFlags installFl
f580: 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ags,..
f590: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 TracePrior
f5a0: 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 ity debugPriorit
f5b0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
f5c0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 TracePriorit
f5d0: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c y tracePriority,
f5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
f5f0: 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d bool perUser,.
f600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f610: 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a bool install,..
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f630: 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 bool wow64,..
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
f650: 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 l noRuntimeVersi
f660: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on,..
f670: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b bool noDesk
f680: 74 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 top,..
f690: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d bool noCom
f6a0: 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 pact,..
f6b0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 bool noNe
f6c0: 74 46 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 tFx20,..
f6d0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e bool noN
f6e0: 65 74 46 78 33 35 2c 0d 0a 20 20 20 20 20 20 20 etFx35,..
f6f0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f bool no
f700: 4e 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 NetFx40,..
f710: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e bool n
f720: 6f 4e 65 74 46 78 34 35 2c 0d 0a 20 20 20 20 20 oNetFx45,..
f730: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
f740: 6e 6f 4e 65 74 46 78 34 35 31 2c 0d 0a 20 20 20 noNetFx451,..
f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
f760: 6c 20 6e 6f 56 73 32 30 30 35 2c 0d 0a 20 20 20 l noVs2005,..
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
f780: 6c 20 6e 6f 56 73 32 30 30 38 2c 0d 0a 20 20 20 l noVs2008,..
f790: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
f7a0: 6c 20 6e 6f 56 73 32 30 31 30 2c 0d 0a 20 20 20 l noVs2010,..
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
f7c0: 6c 20 6e 6f 56 73 32 30 31 32 2c 0d 0a 20 20 20 l noVs2012,..
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
f7e0: 6c 20 6e 6f 56 73 32 30 31 33 2c 0d 0a 20 20 20 l noVs2013,..
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
f800: 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a 20 20 20 20 l noTrace,..
f810: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
f820: 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a 20 20 20 noConsole,..
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
f840: 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20 20 20 20 20 l noLog,..
f850: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 bool t
f860: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a hrowOnMissing,..
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f880: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 bool whatIf,..
f890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f bo
f8a0: 6f 6c 20 64 65 62 75 67 2c 0d 0a 20 20 20 20 20 ol debug,..
f8b0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
f8c0: 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 verbose,..
f8d0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 bool c
f8e0: 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 onfirm..
f8f0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
f900: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
f910: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 61 this.a
f920: 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65 6d 62 ssembly = assemb
f930: 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ly;..
f940: 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46 69 6c this.logFil
f950: 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c 65 4e eName = logFileN
f960: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ame;..
f970: 20 20 20 20 20 20 74 68 69 73 2e 64 69 72 65 63 this.direc
f980: 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f 72 79 tory = directory
f990: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
f9a0: 20 20 20 74 68 69 73 2e 63 6f 72 65 46 69 6c 65 this.coreFile
f9b0: 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c 65 4e Name = coreFileN
f9c0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ame;..
f9d0: 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e 71 46 this.linqF
f9e0: 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71 46 69 ileName = linqFi
f9f0: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 leName;..
fa00: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 this.de
fa10: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d signerFileName =
fa20: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d designerFileNam
fa30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
fa40: 20 20 20 20 74 68 69 73 2e 72 65 67 69 73 74 72 this.registr
fa50: 79 56 65 72 73 69 6f 6e 20 3d 20 72 65 67 69 73 yVersion = regis
fa60: 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 tryVersion;..
fa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 thi
fa80: 73 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 s.configVersion
fa90: 3d 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b = configVersion;
faa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
fab0: 20 20 74 68 69 73 2e 76 73 56 65 72 73 69 6f 6e this.vsVersion
fac0: 53 75 66 66 69 78 20 3d 20 76 73 56 65 72 73 69 Suffix = vsVersi
fad0: 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 onSuffix;..
fae0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
faf0: 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 64 65 debugFormat = de
fb00: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 bugFormat;..
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 this
fb20: 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 .traceFormat = t
fb30: 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 raceFormat;..
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 thi
fb50: 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d s.installFlags =
fb60: 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a installFlags;..
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fb80: 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f 72 69 this.debugPriori
fb90: 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f 72 69 ty = debugPriori
fba0: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ty;..
fbb0: 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 50 this.traceP
fbc0: 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50 riority = traceP
fbd0: 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 riority;..
fbe0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70 this.p
fbf0: 65 72 55 73 65 72 20 3d 20 70 65 72 55 73 65 72 erUser = perUser
fc00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
fc10: 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20 this.install
fc20: 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 = install;..
fc30: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 this
fc40: 2e 77 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d .wow64 = wow64;.
fc50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
fc60: 20 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 this.noRuntimeV
fc70: 65 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 ersion = noRunti
fc80: 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 meVersion;..
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 this
fca0: 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 .noDesktop = noD
fcb0: 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 esktop;..
fcc0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f this.no
fcd0: 43 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 Compact = noComp
fce0: 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 act;..
fcf0: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 this.noNet
fd00: 46 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30 Fx20 = noNetFx20
fd10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
fd20: 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 33 this.noNetFx3
fd30: 35 20 3d 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 5 = noNetFx35;..
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fd50: 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d this.noNetFx40 =
fd60: 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 noNetFx40;..
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 thi
fd80: 73 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f s.noNetFx45 = no
fd90: 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 NetFx45;..
fda0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e this.n
fdb0: 6f 4e 65 74 46 78 34 35 31 20 3d 20 6e 6f 4e 65 oNetFx451 = noNe
fdc0: 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 tFx451;..
fdd0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f this.no
fde0: 56 73 32 30 30 35 20 3d 20 6e 6f 56 73 32 30 30 Vs2005 = noVs200
fdf0: 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5;..
fe00: 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 this.noVs200
fe10: 38 20 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 8 = noVs2008;..
fe20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
fe30: 68 69 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20 6e his.noVs2010 = n
fe40: 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 oVs2010;..
fe50: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e this.n
fe60: 6f 56 73 32 30 31 32 20 3d 20 6e 6f 56 73 32 30 oVs2012 = noVs20
fe70: 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 12;..
fe80: 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 this.noVs20
fe90: 31 33 20 3d 20 6e 6f 56 73 32 30 31 33 3b 0d 0a 13 = noVs2013;..
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
feb0: 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e this.noTrace = n
fec0: 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 oTrace;..
fed0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f this.no
fee0: 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73 Console = noCons
fef0: 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ole;..
ff00: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67 this.noLog
ff10: 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 = noLog;..
ff20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
ff30: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d throwOnMissing =
ff40: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b throwOnMissing;
ff50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
ff60: 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 this.whatIf =
ff70: 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 whatIf;..
ff80: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 this.de
ff90: 62 75 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20 bug = debug;..
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 th
ffb0: 69 73 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 is.verbose = ver
ffc0: 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 bose;..
ffd0: 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 this.conf
ffe0: 69 72 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a irm = confirm;..
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
10000 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 #endr
10010 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
10020 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
10030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10060 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
10070 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 #region
10080 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 4d Private Static M
10090 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 ethods..
100a0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
100b0 69 63 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 ic void GetDefau
100c0 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 ltFileNames(..
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
100e0 66 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f f string directo
100f0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ry,..
10100 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 ref string
10110 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 coreFileName,..
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
10130 65 66 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 ef string linqFi
10140 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 leName,..
10150 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 ref str
10160 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 ing designerFile
10170 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name..
10180 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
10190 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
101a0 20 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 if (this
101b0 41 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c Assembly == null
101c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
101d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a return;..
101e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
101f0 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 directory = Pa
10200 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e th.GetDirectoryN
10210 61 6d 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79 ame(thisAssembly
10220 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 .Location);....
10230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
10240 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c f (String.IsNull
10250 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 OrEmpty(director
10260 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y))..
10270 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b return;
10280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
10290 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 coreFileName
102a0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 = Path.Combine(
102b0 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 directory,..
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
102d0 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 Installer.CoreFi
102e0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 leName);....
102f0 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 linq
10300 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e FileName = Path.
10310 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 Combine(director
10320 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
10330 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 Installe
10340 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b r.LinqFileName);
10350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
10360 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 designerFile
10370 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 Name = Path.Comb
10380 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a ine(directory,..
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
103a0 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 Installer.De
103b0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b signerFileName);
103c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
103d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
103e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
103f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10420 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
10430 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
10440 20 62 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f bool CheckOptio
10450 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n(..
10460 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 61 ref string a
10470 72 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rg..
10480 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 )..
10490 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
104a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 string res
104b0 75 6c 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 ult = arg;....
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
104d0 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c (!String.IsNull
104e0 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 OrEmpty(result))
104f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
10500 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
10510 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10530 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 // NOTE: Remove
10540 20 61 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 all leading swi
10550 74 63 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 tch chars...
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10570 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
10580 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d result =
10590 20 72 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 result.TrimStar
105a0 74 28 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d t(SwitchChars);.
105b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
105c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
105e0 2f 20 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 / NOTE: How many
105f0 20 63 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f chars were remo
10600 76 65 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 ved?..
10610 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10630 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 int count = ar
10640 67 2e 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c g.Length - resul
10650 74 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 t.Length;....
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10670 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
10680 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 // NOTE
10690 3a 20 57 61 73 20 74 68 65 72 65 20 61 74 20 6c : Was there at l
106a0 65 61 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 east one?..
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
106c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
106d0 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 if (count
106e0 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 > 0)..
106f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10710 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10730 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 // NOTE: Ok, r
10740 65 70 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69 eplace their ori
10750 67 69 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 ginal..
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
10770 2f 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 / argument
10780 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
10790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
107b0 20 20 20 20 20 20 20 61 72 67 20 3d 20 72 65 73 arg = res
107c0 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ult;....
107d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
107e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
107f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e // N
10800 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69 OTE: Yes, this i
10810 73 20 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 s a switch...
10820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10830 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10850 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 return true;..
10860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10870 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
10880 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
10890 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
108a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
108b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
108c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
108d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
108e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
108f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
10910 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
10920 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 e static bool Ma
10930 74 63 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 tchOption(..
10940 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
10950 6e 67 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 ng arg,..
10960 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
10970 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 option..
10980 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
10990 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
109a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61 if ((a
109b0 72 67 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 rg == null) || (
109c0 6f 70 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 option == null))
109d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
109e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
109f0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 se;....
10a00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 return St
10a10 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 ring.Compare(arg
10a20 2c 20 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d , 0, option, 0,.
10a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
10a40 20 20 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c arg.Length,
10a50 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f StringCompariso
10a60 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 n.OrdinalIgnoreC
10a70 61 73 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 ase) == 0;..
10a80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
10a90 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
10aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 priv
10af0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f ate static bool?
10b00 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a ParseBoolean(..
10b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10b20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 string text..
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
10b40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
10b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
10b60 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c f (!String.IsNul
10b70 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d lOrEmpty(text)).
10b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
10b90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
10ba0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c bool val
10bb0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ue;....
10bc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 if (b
10bd0 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78 ool.TryParse(tex
10be0 74 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a t, out value))..
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10c00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 return v
10c10 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alue;..
10c20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
10c30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
10c40 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 rn null;..
10c50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
10c60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
10c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
10cb0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
10cc0 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 e static object
10cd0 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 ParseEnum(..
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 Type
10cf0 20 65 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 enumType,..
10d00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
10d10 6e 67 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 ng text,..
10d20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e bool n
10d30 6f 43 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 oCase..
10d40 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
10d50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
10d60 20 20 20 20 20 20 20 20 20 69 66 20 28 28 65 6e if ((en
10d70 75 6d 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 umType == null)
10d80 7c 7c 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 || !enumType.IsE
10d90 6e 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 num)..
10da0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
10db0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 null;....
10dc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 if (!S
10dd0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d tring.IsNullOrEm
10de0 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 pty(text))..
10df0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10e10 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 try..
10e20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
10e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10e40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e return En
10e50 75 6d 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70 um.Parse(enumTyp
10e60 65 2c 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 e, text, noCase)
10e70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
10e80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
10e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 ca
10ea0 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 tch..
10eb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10ed0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e // do nothin
10ee0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g...
10ef0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
10f00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10f20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 return null;..
10f30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
10f40 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 #endreg
10f50 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ion....
10f60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
10f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10fa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
10fb0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 #region Pu
10fc0 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 blic Static Meth
10fd0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ods..
10fe0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 43 public static C
10ff0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65 onfiguration Cre
11000 61 74 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 ateDefault()..
11010 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
11030 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 ing directory =
11040 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 null;..
11050 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f string co
11060 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c reFileName = nul
11070 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l;..
11080 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 string linqF
11090 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d ileName = null;.
110a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
110b0 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 string designer
110c0 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b FileName = null;
110d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
110e0 20 20 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 GetDefaultFi
110f0 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 leNames(..
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
11110 66 20 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 f directory, ref
11120 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 coreFileName, r
11130 65 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c ef linqFileName,
11140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11150 20 20 20 20 20 20 72 65 66 20 64 65 73 69 67 6e ref design
11160 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a erFileName);....
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11180 72 65 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 return new Confi
11190 67 75 72 61 74 69 6f 6e 28 74 68 69 73 41 73 73 guration(thisAss
111a0 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 embly, null, dir
111b0 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 ectory,..
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 cor
111d0 65 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 eFileName, linqF
111e0 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 ileName, designe
111f0 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c rFileName, null,
11200 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 null,..
11210 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c null
11220 2c 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 , TraceOps.Debug
11230 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 Format, TraceOps
11240 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 .TraceFormat,..
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11260 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e InstallFlags.
11270 44 65 66 61 75 6c 74 2c 20 54 72 61 63 65 50 72 Default, TracePr
11280 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 0d iority.Default,.
11290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
112a0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 TracePriori
112b0 74 79 2e 44 65 66 61 75 6c 74 2c 20 66 61 6c 73 ty.Default, fals
112c0 65 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 e, true, false,
112d0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 false, false,..
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
112f0 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c false, false,
11300 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 false, false, f
11310 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c alse, false, fal
11320 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 se, false,..
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11340 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 false, false, fa
11350 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 lse, false, fals
11360 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 e, false, true,
11370 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 true,..
11380 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 false
11390 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b , false, false);
113a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
113b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
113c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
113d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
113e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
113f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
11400 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
11410 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 [MethodImpl(Me
11420 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e thodImplOptions.
11430 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 NoInlining)]..
11440 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
11450 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f static bool Fro
11460 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 mArgs(..
11470 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d string[]
11480 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 args,..
11490 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 bool str
114a0 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ict,..
114b0 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66 69 67 ref Config
114c0 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 uration configur
114d0 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 ation,..
114e0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 ref stri
114f0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 ng error..
11500 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 )..
11510 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
11520 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d try.
11530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11540 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
11550 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73 if (args
11560 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11580 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d return true;.
11590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
115a0 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 if (confi
115b0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c guration == null
115c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
115d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
115e0 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69 guration = Confi
115f0 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74 65 44 guration.CreateD
11600 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20 efault();....
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11620 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 int length = ar
11630 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 gs.Length;....
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11650 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 for (int index
11660 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 = 0; index < le
11670 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a ngth; index++)..
11680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11690 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
116b0 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72 67 73 tring arg = args
116c0 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 [index];....
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
116e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11700 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6e // NOTE: Skip an
11710 79 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 y argument that
11720 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f 72 20 61 is null (?) or a
11730 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 n empty..
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11750 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 // string
11760 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
11770 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
11780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11790 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e if (Strin
117a0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 g.IsNullOrEmpty(
117b0 61 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 arg))..
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
117d0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a continue;....
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
117f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11810 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 // NOTE: We
11820 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 6d 6f 64 are going to mod
11830 69 66 79 20 74 68 65 20 6f 72 69 67 69 6e 61 6c ify the original
11840 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20 argument..
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11860 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79 20 72 // by r
11870 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c 65 61 64 emoving any lead
11880 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 ing option chara
11890 63 74 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 cters;..
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
118b0 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65 66 6f // therefo
118c0 72 65 2c 20 77 65 20 75 73 65 20 61 20 6e 65 77 re, we use a new
118d0 20 73 74 72 69 6e 67 20 74 6f 20 68 6f 6c 64 20 string to hold
118e0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 the..
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
11900 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64 20 61 modified a
11910 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 rgument...
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11930 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
11950 72 69 6e 67 20 6e 65 77 41 72 67 20 3d 20 61 72 ring newArg = ar
11960 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 g;....
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
11980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11990 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 // NOT
119a0 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f E: All the suppo
119b0 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e rted command lin
119c0 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a e options must..
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
119e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
119f0 20 62 65 67 69 6e 20 77 69 74 68 20 61 6e 20 6f begin with an o
11a00 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72 20 ption character
11a10 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73 0d 0a 20 (e.g. a minus..
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11a30 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
11a40 6f 72 20 66 6f 72 77 61 72 64 20 73 6c 61 73 68 or forward slash
11a50 29 3b 20 61 74 74 65 6d 70 74 20 74 6f 20 76 61 ); attempt to va
11a60 6c 69 64 61 74 65 20 74 68 61 74 0d 0a 20 20 20 lidate that..
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11a80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 6f // no
11a90 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 20 69 w. If we fail i
11aa0 6e 20 73 74 72 69 63 74 20 6d 6f 64 65 2c 20 77 n strict mode, w
11ab0 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a 20 20 20 e are done;..
11ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11ad0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 // ot
11ae0 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20 73 6b herwise, just sk
11af0 69 70 20 74 68 69 73 20 61 72 67 75 6d 65 6e 74 ip this argument
11b00 20 61 6e 64 20 61 64 76 61 6e 63 65 0d 0a 20 20 and advance..
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11b20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 // t
11b30 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e 65 2e 0d o the next one..
11b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11b50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11b70 20 20 20 20 20 69 66 20 28 21 43 68 65 63 6b 4f if (!CheckO
11b80 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41 72 67 ption(ref newArg
11b90 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11bc0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
11bd0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 = TraceOps.Debu
11be0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 gAndTrace(..
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11c00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
11c10 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 ePriority.Lowest
11c20 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c , debugCallback,
11c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11c50 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c traceCallback,
11c60 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
11c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11c90 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f "Unsupported co
11ca0 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d mmand line argum
11cb0 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 ent: {0}",..
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
11ce0 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 isplay(arg)), tr
11cf0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
11d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11d10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
11d20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 (strict)..
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11d40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
11d50 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 false;....
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 63 6f 6e 74 69 6e 75 65 3b continue;
11d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11d90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
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 2f 2f 0d 0a 20 20 20 20 20 //..
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11dd0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 // NOTE: All
11de0 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63 6f the supported co
11df0 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f mmand line optio
11e00 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 ns must..
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11e20 20 2f 2f 20 20 20 20 20 20 20 68 61 76 65 20 61 // have a
11e30 20 76 61 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 value; therefor
11e40 65 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 61 64 e, attempt to ad
11e50 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 vance..
11e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
11e70 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20 6e 6f / to it no
11e80 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 2c 20 w. If we fail,
11e90 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 we are done...
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11eb0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11ed0 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 index++;....
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11ef0 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 if (index
11f00 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 >= length)..
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11f20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
11f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11f40 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 error = Trace
11f50 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 Ops.DebugAndTrac
11f60 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11f80 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 TracePriorit
11f90 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 y.Lowest, debugC
11fa0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 allback,..
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11fc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
11fd0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
11fe0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12000 20 20 20 20 20 20 20 20 20 22 4d 69 73 73 69 6e "Missin
12010 67 20 76 61 6c 75 65 20 66 6f 72 20 6f 70 74 69 g value for opti
12020 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 on: {0}",..
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12040 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 ForDi
12050 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 splay(arg)), tra
12060 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a ceCategory);....
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12080 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
12090 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 strict)..
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
120b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
120c0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 false;....
120d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
120e0 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 break;..
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12100 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12120 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
12140 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 / NOTE: Grab the
12150 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 6f textual value o
12160 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6c f this command l
12170 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ine..
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
12190 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20 option...
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
121b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
121d0 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 20 3d string text =
121e0 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d args[index];...
121f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12200 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12220 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 // NOTE: Fi
12230 67 75 72 65 20 6f 75 74 20 77 68 69 63 68 20 63 gure out which c
12240 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 ommand line opti
12250 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20 20 20 20 on this is..
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12270 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 62 61 // (ba
12280 73 65 64 20 6f 6e 20 61 20 70 61 72 74 69 61 6c sed on a partial
12290 20 6e 61 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 name match) and
122a0 20 74 68 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 then try..
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
122c0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 // to i
122d0 6e 74 65 72 70 72 65 74 20 74 68 65 20 74 65 78 nterpret the tex
122e0 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20 74 68 tual value as th
122f0 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20 20 20 e correct..
12300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12310 20 20 20 2f 2f 20 20 20 20 20 20 20 74 79 70 65 // type
12320 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
12330 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12350 20 20 20 20 20 20 20 69 66 20 28 4d 61 74 63 68 if (Match
12360 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 Option(newArg, "
12370 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 29 29 configVersion"))
12380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
12390 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
123b0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 configu
123c0 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56 65 72 ration.configVer
123d0 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 sion = text;..
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
123f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12410 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f else if (MatchO
12420 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 ption(newArg, "c
12430 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20 onfirm"))..
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12450 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12470 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 bool? value =
12480 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 ParseBoolean(tex
12490 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 t);....
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
124b0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 if (value ==
124c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
124e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12500 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 error = Tr
12510 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
12520 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 race(..
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12540 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
12550 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c Priority.Lowest,
12560 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d debugCallback,.
12570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12590 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
125a0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
125b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
125d0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 "Invalid
125e0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c {0} boolean val
125f0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 ue: {1}",..
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
12620 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 orDisplay(arg),
12630 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 ForDisplay(text)
12640 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12660 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
12670 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
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 69 66 20 28 73 if (s
126a0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 trict)..
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
126c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
126d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 rn false;....
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 63 6f 6e con
12700 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 tinue;..
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12720 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12740 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 configurati
12750 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 62 6f on.confirm = (bo
12760 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 ol)value;..
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12780 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c el
127a0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 se if (MatchOpti
127b0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 72 65 on(newArg, "core
127c0 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 FileName"))..
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
127e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12800 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
12810 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d n.coreFileName =
12820 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 text;..
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
12850 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 else
12860 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 if (MatchOption(
12870 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 22 29 newArg, "debug")
12880 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
12890 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 bool?
128c0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f value = ParseBoo
128d0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 lean(text);....
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 if (v
12900 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 alue == null)..
12910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12920 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
12950 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 ror = TraceOps.D
12960 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 ebugAndTrace(..
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12990 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 TracePriority
129a0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 .Lowest, debugCa
129b0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 llback,..
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
129e0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 ceCallback, Stri
129f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12a20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f "Invalid {0} boo
12a30 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 lean value: {1}"
12a40 2c 0d 0a 20 20 20 20 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 20
12a60 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 ForDispla
12a70 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c y(arg), ForDispl
12a80 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 ay(text)),..
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 20 20 20 20 20 20 20 20 20
12ab0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
12ac0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12ae0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a if (strict)..
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12b10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
12b20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12b40 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a continue;..
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12b60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
12b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
12b90 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 figuration.debug
12ba0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d = (bool)value;.
12bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12be0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 else if (Mat
12bf0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c chOption(newArg,
12c00 20 22 64 65 62 75 67 46 6f 72 6d 61 74 22 29 29 "debugFormat"))
12c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
12c20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12c40 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 configu
12c50 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d ration.debugForm
12c60 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 at = text;..
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12c80 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
12c90 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 63 .DebugFormat = c
12ca0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 onfiguration.deb
12cb0 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 ugFormat;..
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12cd0 20 20 20 7d 0d 0a 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 65 6c el
12cf0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 se if (MatchOpti
12d00 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 on(newArg, "debu
12d10 67 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 gPriority"))..
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12d30 20 20 20 20 20 20 7b 0d 0a 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 6f 62 6a 65 63 74 20 76 61 6c 75 object valu
12d60 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a e = ParseEnum(..
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12d90 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f typeof(TracePrio
12da0 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 rity), text, tru
12db0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12dd0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 if (value ==
12de0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12e00 20 20 20 7b 0d 0a 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 20
12e20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 error = Tr
12e30 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
12e40 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 race(..
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12e60 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
12e70 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c Priority.Lowest,
12e80 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d debugCallback,.
12e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12eb0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
12ec0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
12ed0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12ef0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 "Invalid
12f00 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 {0} value: {1}"
12f10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
12f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12f30 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 ForDispla
12f40 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c y(arg), ForDispl
12f50 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 ay(text)),..
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12f80 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
12f90 0a 0d 0a 20 20 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 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a if (strict)..
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12fe0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
12ff0 3b 0d 0a 0d 0a 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 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a continue;..
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13030 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
13040 0a 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 20 63 6f 6e con
13060 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 figuration.debug
13070 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63 Priority = (Trac
13080 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b ePriority)value;
13090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
130b0 61 63 65 4f 70 73 2e 44 65 62 75 67 50 72 69 6f aceOps.DebugPrio
130c0 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 rity = configura
130d0 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 tion.debugPriori
130e0 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ty;..
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13110 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 else if
13120 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 (MatchOption(new
13130 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72 46 69 Arg, "designerFi
13140 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 leName"))..
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13160 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13180 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e configuration.
13190 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 designerFileName
131a0 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 = text;..
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
131c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 els
131e0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f e if (MatchOptio
131f0 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72 65 63 n(newArg, "direc
13200 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20 20 20 tory"))..
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13240 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 configuration.di
13250 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74 3b 0d rectory = text;.
13260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
13280 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
132a0 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49 41 4c / NOTE: *SPECIAL
132b0 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68 20 74 * Must refresh t
132c0 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d 0a 20 he file names..
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
132e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
132f0 20 20 20 20 68 65 72 65 20 62 65 63 61 75 73 65 here because
13300 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 the underlying
13310 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory..
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13330 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
13340 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 has changed...
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13360 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13380 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
13390 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 coreFileName =
133a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f configuration.co
133b0 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 reFileName;....
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 if (!
133e0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 String.IsNullOrE
133f0 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d mpty(coreFileNam
13400 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e))..
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13420 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d coreFileNam
13430 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 e = Path.GetFile
13440 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e 61 6d Name(coreFileNam
13450 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13470 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 if (String.Is
13480 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 NullOrEmpty(core
13490 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 FileName))..
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
134b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 core
134c0 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 FileName = Insta
134d0 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d ller.CoreFileNam
134e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e;....
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13500 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e configuration.
13510 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 coreFileName = P
13520 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 ath.Combine(..
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
13550 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 nfiguration.dire
13560 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65 4e ctory, coreFileN
13570 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ame);....
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13590 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 string linq
135a0 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 FileName = confi
135b0 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c guration.linqFil
135c0 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 eName;....
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
135e0 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e if (!Strin
135f0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 g.IsNullOrEmpty(
13600 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a linqFileName))..
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13630 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 linqFileName = P
13640 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 ath.GetFileName(
13650 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a linqFileName);..
13660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
13680 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f (String.IsNullO
13690 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e rEmpty(linqFileN
136a0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ame))..
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
136c0 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e linqFileN
136d0 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e ame = Installer.
136e0 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d LinqFileName;...
136f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
13710 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 figuration.linqF
13720 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 ileName = Path.C
13730 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 ombine(..
13740 20 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 63 6f 6e 66 69 67 75 configu
13760 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 ration.directory
13770 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b , linqFileName);
13780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
137a0 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 string designerF
137b0 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 ileName = config
137c0 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 uration.designer
137d0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 FileName;....
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 69 66 20 28 21 53 74 if (!St
13800 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 ring.IsNullOrEmp
13810 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e ty(designerFileN
13820 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ame))..
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 64 65 73 69 67 6e 65 72 46 designerF
13850 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 ileName = Path.G
13860 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73 69 67 etFileName(desig
13870 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d nerFileName);...
13880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
138a0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 (String.IsNullOr
138b0 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 Empty(designerFi
138c0 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 leName))..
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
138e0 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e design
138f0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 erFileName = Ins
13900 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 taller.DesignerF
13910 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 ileName;....
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13930 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 configur
13940 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 ation.designerFi
13950 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f leName = Path.Co
13960 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 mbine(..
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13980 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 configur
13990 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c ation.directory,
139a0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d designerFileNam
139b0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e);..
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
139e0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 else if
139f0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 (MatchOption(new
13a00 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29 29 Arg, "install"))
13a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
13a20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f 20 76 bool? v
13a50 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c alue = ParseBool
13a60 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 ean(text);....
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 if (va
13a90 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 lue == null)..
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ab0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
13ae0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 or = TraceOps.De
13af0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 bugAndTrace(..
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e TracePriority.
13b30 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c Lowest, debugCal
13b40 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 lback,..
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
13b70 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
13b80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
13bb0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c Invalid {0} bool
13bc0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c ean value: {1}",
13bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
13be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13bf0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
13c00 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 (arg), ForDispla
13c10 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 y(text)),..
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
13c40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
13c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13c70 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 if (strict)..
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ca0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
13cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13cd0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 continue;..
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13cf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13d10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 conf
13d20 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c iguration.instal
13d30 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b l = (bool)value;
13d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
13d50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13d70 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 else if (Ma
13d80 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 tchOption(newArg
13d90 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22 , "installFlags"
13da0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
13db0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
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 6f 62 6a 65 63 objec
13de0 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 t value = ParseE
13df0 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 num(..
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e10 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 73 typeof(Ins
13e20 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78 74 tallFlags), text
13e30 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 , true);....
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e50 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 if (valu
13e60 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 e == null)..
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ea0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
13eb0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 = TraceOps.Debu
13ec0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 gAndTrace(..
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ef0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f TracePriority.Lo
13f00 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 west, debugCallb
13f10 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ack,..
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f30 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
13f40 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
13f50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e "In
13f80 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66 6c valid install fl
13f90 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22 2c ags value: {0}",
13fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13fc0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
13fd0 28 74 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 (text)), traceCa
13fe0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 tegory);....
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14000 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
14010 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 strict)..
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
14040 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 urn false;....
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 20 20 20 20 20 20 63 6f co
14070 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 ntinue;..
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14090 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
140b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
140c0 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 ion.installFlags
140d0 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 = (InstallFlags
140e0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 )value;..
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14100 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
14110 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 else
14120 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e if (MatchOption
14130 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71 46 69 (newArg, "linqFi
14140 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 leName"))..
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14160 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14180 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e configuration.
14190 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74 linqFileName = t
141a0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ext;..
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
141c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
141d0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 else if
141e0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 (MatchOption(ne
141f0 77 41 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 wArg, "logFileNa
14200 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 me"))..
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
14220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
14240 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 nfiguration.logF
14250 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d ileName = text;.
14260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14270 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14290 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 else if (Mat
142a0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c chOption(newArg,
142b0 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a "noCompact"))..
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
142d0 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c bool? val
14300 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 ue = ParseBoolea
14310 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 n(text);....
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 69 66 20 28 76 61 6c 75 if (valu
14340 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 e == null)..
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14360 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14380 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
14390 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 = TraceOps.Debu
143a0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 gAndTrace(..
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
143d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f TracePriority.Lo
143e0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 west, debugCallb
143f0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ack,..
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14410 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
14420 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
14430 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e "In
14460 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 valid {0} boolea
14470 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a n value: {1}",..
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
144a0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 ForDisplay(a
144b0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 rg), ForDisplay(
144c0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 text)),..
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
144f0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a ceCategory);....
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 20 20 20 20
14520 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 if (strict)..
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14550 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
14560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14580 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 continue;..
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
145a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
145c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 config
145d0 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 uration.noCompac
145e0 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b t = (bool)value;
145f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
14600 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14620 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 else if (Ma
14630 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 tchOption(newArg
14640 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d , "noConsole")).
14650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14660 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f 20 76 61 bool? va
14690 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 lue = ParseBoole
146a0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 an(text);....
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 69 66 20 28 76 61 6c if (val
146d0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ue == null)..
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
146f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14710 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
14720 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 r = TraceOps.Deb
14730 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 ugAndTrace(..
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14760 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c TracePriority.L
14770 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c owest, debugCall
14780 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 back,..
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
147a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
147b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 Callback, String
147c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 "I
147f0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 nvalid {0} boole
14800 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d an value: {1}",.
14810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14830 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 ForDisplay(
14840 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 arg), ForDisplay
14850 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 (text)),..
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
14880 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
14890 0a 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 20 20 20
148b0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 if (strict)..
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
148e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
148f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14910 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 continue;..
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14930 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14950 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
14960 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f guration.noConso
14970 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 le = (bool)value
14980 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
14990 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
149b0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d else if (M
149c0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 atchOption(newAr
149d0 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29 g, "noDesktop"))
149e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
149f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f 20 76 bool? v
14a20 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c alue = ParseBool
14a30 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 ean(text);....
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14a50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 if (va
14a60 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 lue == null)..
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14a80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
14ab0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 or = TraceOps.De
14ac0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 bugAndTrace(..
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14af0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e TracePriority.
14b00 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c Lowest, debugCal
14b10 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 lback,..
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14b30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
14b40 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
14b50 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
14b80 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c Invalid {0} bool
14b90 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c ean value: {1}",
14ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14bc0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
14bd0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 (arg), ForDispla
14be0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 y(text)),..
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
14c10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
14c20 0d 0a 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 20 20 20 20 20 20
14c40 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 if (strict)..
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14c70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
14c80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
14c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ca0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 continue;..
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14cc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 conf
14cf0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b iguration.noDesk
14d00 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 top = (bool)valu
14d10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
14d20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14d40 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 else if (
14d50 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 MatchOption(newA
14d60 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 rg, "noLog"))..
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14d80 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 bool? valu
14db0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e e = ParseBoolean
14dc0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 (text);....
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 69 66 20 28 76 61 6c 75 65 if (value
14df0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14e10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14e30 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
14e40 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 = TraceOps.Debug
14e50 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 AndTrace(..
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
14e80 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 racePriority.Low
14e90 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 est, debugCallba
14ea0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ck,..
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ec0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
14ed0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 llback, String.F
14ee0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14f00 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 "Inv
14f10 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e alid {0} boolean
14f20 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 value: {1}",..
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14f50 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 ForDisplay(ar
14f60 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 g), ForDisplay(t
14f70 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ext)),..
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14f90 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
14fa0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
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 20 20 20 20 20 20 20 20 69 i
14fd0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 f (strict)..
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15000 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d return false;...
15010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15030 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 continue;..
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15050 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15070 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 configu
15080 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 ration.noLog = (
15090 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 bool)value;..
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
150b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
150d0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 else if (MatchOp
150e0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f tion(newArg, "no
150f0 4e 65 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20 NetFx20"))..
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15110 20 20 20 20 7b 0d 0a 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 20
15130 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d bool? value =
15140 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 ParseBoolean(te
15150 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 xt);....
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15170 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d if (value ==
15180 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
151a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
151c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 error = T
151d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
151e0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 Trace(..
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15200 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
15210 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 ePriority.Lowest
15220 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c , debugCallback,
15230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15250 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 traceCallb
15260 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d ack, String.Form
15270 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15290 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 "Invali
152a0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 d {0} boolean va
152b0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 lue: {1}",..
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
152e0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c ForDisplay(arg),
152f0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 ForDisplay(text
15300 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )),..
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15320 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
15330 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 tegory);....
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 20 20 20 20 69 66 20 28 if (
15360 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 strict)..
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
15390 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 urn false;....
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
153c0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 ntinue;..
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
153e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15400 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
15410 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 ion.noNetFx20 =
15420 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 (bool)value;..
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15440 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15460 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f else if (MatchO
15470 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e ption(newArg, "n
15480 6f 4e 65 74 46 78 33 35 22 29 29 0d 0a 20 20 20 oNetFx35"))..
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
154a0 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 bool? value
154d0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 = ParseBoolean(t
154e0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ext);....
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15500 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d if (value =
15510 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15530 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15550 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
15560 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
15570 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 dTrace(..
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
155a0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 cePriority.Lowes
155b0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b t, debugCallback
155c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
155e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
155f0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
15600 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15620 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c "Inval
15630 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 id {0} boolean v
15640 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 alue: {1}",..
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15670 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 ForDisplay(arg)
15680 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 , ForDisplay(tex
15690 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 t)),..
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
156b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
156c0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
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 20 20 20 20 69 66 20 if
156f0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 (strict)..
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
15720 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 turn false;....
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
15750 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 ontinue;..
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15770 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15790 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 configura
157a0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d tion.noNetFx35 =
157b0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 (bool)value;..
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
157d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
157f0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 else if (Match
15800 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 Option(newArg, "
15810 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 noNetFx40"))..
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15830 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 bool? value
15860 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 = ParseBoolean(
15870 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 text);....
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15890 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 if (value
158a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
158c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
158e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
158f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
15900 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 ndTrace(..
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
15930 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 acePriority.Lowe
15940 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 st, debugCallbac
15950 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 k,..
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15970 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c traceCal
15980 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f lback, String.Fo
15990 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
159b0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 "Inva
159c0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 lid {0} boolean
159d0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 value: {1}",..
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15a00 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 ForDisplay(arg
15a10 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 ), ForDisplay(te
15a20 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 xt)),..
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15a40 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
15a50 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 Category);....
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 69 66 if
15a80 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 (strict)..
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
15ab0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a eturn false;....
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15ae0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 continue;..
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 7d 0d 0a 0d 0a 20 20 20 20 }....
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15b20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 configur
15b30 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 ation.noNetFx40
15b40 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a = (bool)value;..
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15b60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15b80 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 else if (Matc
15b90 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 hOption(newArg,
15ba0 22 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20 "noNetFx45"))..
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15bc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15be0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 bool? valu
15bf0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e e = ParseBoolean
15c00 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 (text);....
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15c20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 if (value
15c30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15c50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15c70 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
15c80 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 = TraceOps.Debug
15c90 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 AndTrace(..
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
15cc0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 racePriority.Low
15cd0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 est, debugCallba
15ce0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ck,..
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15d00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
15d10 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 llback, String.F
15d20 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15d40 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 "Inv
15d50 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e alid {0} boolean
15d60 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 value: {1}",..
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 20 20 20 20 20 20 20 20
15d90 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 ForDisplay(ar
15da0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 g), ForDisplay(t
15db0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ext)),..
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
15de0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
15df0 20 20 20 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 69 i
15e10 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 f (strict)..
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15e40 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d return false;...
15e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15e70 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 continue;..
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 7d 0d 0a 0d 0a 20 20 20 }....
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15eb0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 configu
15ec0 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 ration.noNetFx45
15ed0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d = (bool)value;.
15ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
15ef0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15f10 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 else if (Mat
15f20 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c chOption(newArg,
15f30 20 22 6e 6f 4e 65 74 46 78 34 35 31 22 29 29 0d "noNetFx451")).
15f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
15f50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
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 62 6f 6f 6c 3f 20 76 61 bool? va
15f80 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 lue = ParseBoole
15f90 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 an(text);....
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15fb0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c if (val
15fc0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ue == null)..
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15fe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16000 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
16010 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 r = TraceOps.Deb
16020 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 ugAndTrace(..
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16050 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c TracePriority.L
16060 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c owest, debugCall
16070 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 back,..
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16090 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
160a0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 Callback, String
160b0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 "I
160e0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 nvalid {0} boole
160f0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d an value: {1}",.
16100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16120 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 ForDisplay(
16130 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 arg), ForDisplay
16140 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 (text)),..
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
16170 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
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 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 if (strict)..
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
161d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
161e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16200 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 continue;..
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 7d 0d 0a 0d 0a 20 }....
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16240 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
16250 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 guration.noNetFx
16260 34 35 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 451 = (bool)valu
16270 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
16280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
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 65 6c 73 65 20 69 66 20 28 else if (
162b0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 MatchOption(newA
162c0 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 rg, "noRuntimeVe
162d0 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 rsion"))..
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
162f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16310 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 bool? value = P
16320 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 arseBoolean(text
16330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16350 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e if (value == n
16360 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16380 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
163a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 error = Tra
163b0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 ceOps.DebugAndTr
163c0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ace(..
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
163e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 TraceP
163f0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 riority.Lowest,
16400 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a debugCallback,..
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16430 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 traceCallbac
16440 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 k, String.Format
16450 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16470 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 "Invalid
16480 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 {0} boolean valu
16490 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 e: {1}",..
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f Fo
164c0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 rDisplay(arg), F
164d0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 orDisplay(text))
164e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16500 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 traceCate
16510 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 gory);....
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16530 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 if (st
16540 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 rict)..
16550 20 20 20 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 72 65 74 75 72 retur
16570 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 n false;....
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16590 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 cont
165a0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 inue;..
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
165c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
165e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
165f0 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 n.noRuntimeVersi
16600 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 on = (bool)value
16610 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
16620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16640 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d else if (M
16650 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 atchOption(newAr
16660 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a g, "noTrace"))..
16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16680 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
166a0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c bool? val
166b0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 ue = ParseBoolea
166c0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 n(text);....
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
166e0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 if (valu
166f0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 e == null)..
16700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16710 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16730 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
16740 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 = TraceOps.Debu
16750 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 gAndTrace(..
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16780 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f TracePriority.Lo
16790 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 west, debugCallb
167a0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ack,..
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
167c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
167d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
167e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e "In
16810 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 valid {0} boolea
16820 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a n value: {1}",..
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16850 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 ForDisplay(a
16860 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 rg), ForDisplay(
16870 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 text)),..
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16890 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
168a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a ceCategory);....
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
168d0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 if (strict)..
168e0 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
16910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16930 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 continue;..
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16950 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16970 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 config
16980 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 uration.noTrace
16990 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a = (bool)value;..
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
169b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
169d0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 else if (Matc
169e0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 hOption(newArg,
169f0 22 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20 20 "noVs2005"))..
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16a10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16a30 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 bool? value
16a40 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 = ParseBoolean(
16a50 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 text);....
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16a70 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 if (value
16a80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
16a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16aa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ac0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
16ad0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
16ae0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 ndTrace(..
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
16b10 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 acePriority.Lowe
16b20 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 st, debugCallbac
16b30 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 k,..
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b50 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c traceCal
16b60 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f lback, String.Fo
16b70 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b90 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 "Inva
16ba0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 lid {0} boolean
16bb0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 value: {1}",..
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16be0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 ForDisplay(arg
16bf0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 ), ForDisplay(te
16c00 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 xt)),..
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16c20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
16c30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 Category);....
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
16c60 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 (strict)..
16c70 20 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 72 r
16c90 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a eturn false;....
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16cc0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 continue;..
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ce0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16d00 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 configur
16d10 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d ation.noVs2005 =
16d20 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 (bool)value;..
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16d40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16d60 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 else if (Match
16d70 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 Option(newArg, "
16d80 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20 noVs2008"))..
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16da0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16dc0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 bool? value
16dd0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 = ParseBoolean(t
16de0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ext);....
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16e00 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d if (value =
16e10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16e30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16e50 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
16e60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
16e70 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 dTrace(..
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
16ea0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 cePriority.Lowes
16eb0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b t, debugCallback
16ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
16ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ee0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
16ef0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
16f00 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c "Inval
16f30 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 id {0} boolean v
16f40 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 alue: {1}",..
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f70 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 ForDisplay(arg)
16f80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 , ForDisplay(tex
16f90 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 t)),..
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16fb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
16fc0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
16ff0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 (strict)..
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 72 65 re
17020 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 turn false;....
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
17050 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 ontinue;..
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17090 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 configura
170a0 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 tion.noVs2008 =
170b0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 (bool)value;..
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
170d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
170f0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f else if (MatchO
17100 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e ption(newArg, "n
17110 6f 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20 20 oVs2010"))..
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17130 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17150 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d bool? value =
17160 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 ParseBoolean(te
17170 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 xt);....
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17190 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d if (value ==
171a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
171c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
171e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 error = T
171f0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
17200 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 Trace(..
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17220 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
17230 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 ePriority.Lowest
17240 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c , debugCallback,
17250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17270 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 traceCallb
17280 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d ack, String.Form
17290 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
172b0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 "Invali
172c0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 d {0} boolean va
172d0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 lue: {1}",..
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17300 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c ForDisplay(arg),
17310 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 ForDisplay(text
17320 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )),..
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17340 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
17350 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 tegory);....
17360 20 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 69 66 20 28 if (
17380 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 strict)..
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
173b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 urn false;....
173c0 20 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 63 6f co
173e0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 ntinue;..
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17400 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17420 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
17430 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 ion.noVs2010 = (
17440 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 bool)value;..
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17460 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17480 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 else if (MatchOp
17490 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f tion(newArg, "no
174a0 56 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20 20 Vs2012"))..
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
174c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
174e0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 bool? value =
174f0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 ParseBoolean(tex
17500 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 t);....
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17520 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 if (value ==
17530 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17550 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17570 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 error = Tr
17580 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
17590 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 race(..
175a0 20 20 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 54 72 61 63 65 Trace
175c0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c Priority.Lowest,
175d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d debugCallback,.
175e0 0a 20 20 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 20
17600 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
17610 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
17620 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
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 22 49 6e 76 61 6c 69 64 "Invalid
17650 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c {0} boolean val
17660 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 ue: {1}",..
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
17690 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 orDisplay(arg),
176a0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 ForDisplay(text)
176b0 29 2c 0d 0a 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 20
176d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
176e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17700 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 if (s
17710 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 trict)..
17720 20 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 20 20 20 72 65 74 75 retu
17740 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 rn false;....
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17760 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
17770 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 tinue;..
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17790 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
177b0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 configurati
177c0 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28 62 on.noVs2012 = (b
177d0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 ool)value;..
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
177f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
17810 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 lse if (MatchOpt
17820 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 ion(newArg, "noV
17830 73 32 30 31 33 22 29 29 0d 0a 20 20 20 20 20 20 s2013"))..
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17850 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17870 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 bool? value = P
17880 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 arseBoolean(text
17890 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
178b0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e if (value == n
178c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
178e0 20 20 7b 0d 0a 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 65 72 72 6f 72 20 3d 20 54 72 61 error = Tra
17910 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 ceOps.DebugAndTr
17920 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ace(..
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 54 72 61 63 65 50 TraceP
17950 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 riority.Lowest,
17960 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a debugCallback,..
17970 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63 traceCallbac
179a0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 k, String.Format
179b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
179d0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 "Invalid
179e0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 {0} boolean valu
179f0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 e: {1}",..
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f Fo
17a20 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 rDisplay(arg), F
17a30 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 orDisplay(text))
17a40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17a60 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 traceCate
17a70 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 gory);....
17a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17a90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 if (st
17aa0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 rict)..
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17ac0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
17ad0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 n false;....
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17af0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 cont
17b00 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 inue;..
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17b20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17b40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
17b50 6e 2e 6e 6f 56 73 32 30 31 33 20 3d 20 28 62 6f n.noVs2013 = (bo
17b60 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 ol)value;..
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17b80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c el
17ba0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 se if (MatchOpti
17bb0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70 65 72 55 on(newArg, "perU
17bc0 73 65 72 22 29 29 0d 0a 20 20 20 20 20 20 20 20 ser"))..
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
17c00 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 ool? value = Par
17c10 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b seBoolean(text);
17c20 0d 0a 0d 0a 20 20 20 20 20 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c if (value == nul
17c50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c90 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 error = Trace
17ca0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 Ops.DebugAndTrac
17cb0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17cd0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 TracePri
17ce0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 ority.Lowest, de
17cf0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 bugCallback,..
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17d20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c traceCallback,
17d30 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
17d40 0a 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 20 20 20 20 20
17d60 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 "Invalid {0
17d70 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a } boolean value:
17d80 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 {1}",..
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17da0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
17db0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 isplay(arg), For
17dc0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d Display(text)),.
17dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17df0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f traceCatego
17e00 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ry);....
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 if (stri
17e30 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ct)..
17e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
17e60 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 false;....
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e contin
17e90 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue;..
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17eb0 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e configuration.
17ee0 70 65 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29 perUser = (bool)
17ef0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 value;..
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17f10 7d 0d 0a 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 65 6c 73 65 20 else
17f30 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 if (MatchOption(
17f40 6e 65 77 41 72 67 2c 20 22 72 65 67 69 73 74 72 newArg, "registr
17f50 79 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 yVersion"))..
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17f70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17f90 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
17fa0 6e 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f n.registryVersio
17fb0 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 n = text;..
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17fd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c el
17ff0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 se if (MatchOpti
18000 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69 on(newArg, "stri
18010 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ct"))..
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
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 20 20 20 20 62 6f bo
18050 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 ol? value = Pars
18060 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d eBoolean(text);.
18070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
18090 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c f (value == null
180a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
180c0 0d 0a 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 20 20 20 20 20 20
180e0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f error = TraceO
180f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 ps.DebugAndTrace
18100 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18120 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f TracePrio
18130 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 rity.Lowest, deb
18140 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 ugCallback,..
18150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18170 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 traceCallback,
18180 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
181b0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d "Invalid {0}
181c0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 boolean value:
181d0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 {1}",..
181e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
181f0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 ForDi
18200 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 splay(arg), ForD
18210 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a isplay(text)),..
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18240 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
18250 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18270 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 if (stric
18280 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t)..
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
182a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
182b0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 alse;....
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
182d0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 continu
182e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18300 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18320 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18340 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 // NOTE: Allow
18350 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line
18360 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 arguments to..
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18380 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
18390 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 override the
183a0 20 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 "strictness" se
183b0 74 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 tting..
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
183d0 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 // prov
183e0 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c ided by our call
183f0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er...
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18410 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18430 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 strict = (bool)
18440 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 value;..
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18460 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
18470 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 else
18480 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 if (MatchOption(
18490 6e 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e newArg, "throwOn
184a0 4d 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 Missing"))..
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
184c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
184e0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d bool? value =
184f0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 ParseBoolean(te
18500 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 xt);....
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18520 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d if (value ==
18530 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18550 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18570 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 error = T
18580 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
18590 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 Trace(..
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
185b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
185c0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 ePriority.Lowest
185d0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c , debugCallback,
185e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18600 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 traceCallb
18610 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d ack, String.Form
18620 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18640 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 "Invali
18650 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 d {0} boolean va
18660 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 lue: {1}",..
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18690 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c ForDisplay(arg),
186a0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 ForDisplay(text
186b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )),..
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
186d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
186e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 tegory);....
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 69 66 20 28 if (
18710 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 strict)..
18720 20 20 20 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 72 65 74 ret
18740 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 urn false;....
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 20 20 20 20 63 6f co
18770 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 ntinue;..
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18790 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
187b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
187c0 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 ion.throwOnMissi
187d0 6e 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 ng = (bool)value
187e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
187f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18810 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d else if (M
18820 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 atchOption(newAr
18830 67 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22 g, "traceFormat"
18840 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
18850 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18870 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
18880 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f guration.traceFo
18890 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 rmat = text;..
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
188b0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f TraceO
188c0 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d ps.TraceFormat =
188d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 configuration.t
188e0 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 raceFormat;..
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18900 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18920 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 else if (MatchOp
18930 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 tion(newArg, "tr
18940 61 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a acePriority"))..
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18960 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18980 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 object va
18990 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 lue = ParseEnum(
189a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
189c0 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 typeof(TracePr
189d0 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 iority), text, t
189e0 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 rue);....
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18a00 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d if (value =
18a10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18a30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18a50 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
18a60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
18a70 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 dTrace(..
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
18aa0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 cePriority.Lowes
18ab0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b t, debugCallback
18ac0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18ae0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
18af0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
18b00 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18b20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c "Inval
18b30 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 id {0} value: {1
18b40 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }",..
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18b60 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
18b70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 lay(arg), ForDis
18b80 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 play(text)),..
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18bb0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
18bc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18be0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 if (strict)
18bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18c10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
18c20 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 se;....
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18c40 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b continue;
18c50 0d 0a 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 7d 0d }.
18c70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
18c90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 onfiguration.tra
18ca0 63 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 cePriority = (Tr
18cb0 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 acePriority)valu
18cc0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18ce0 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 TraceOps.TracePr
18cf0 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 iority = configu
18d00 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f ration.tracePrio
18d10 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 rity;..
18d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
18d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
18d40 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 else i
18d50 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e f (MatchOption(n
18d60 65 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22 ewArg, "verbose"
18d70 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
18d80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
18d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18da0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f bool?
18db0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f value = ParseBo
18dc0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a olean(text);....
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18de0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
18df0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a value == null)..
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
18e40 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e rror = TraceOps.
18e50 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a DebugAndTrace(..
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e80 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 TracePriorit
18e90 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 y.Lowest, debugC
18ea0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 allback,..
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
18ed0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 aceCallback, Str
18ee0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f10 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f "Invalid {0} bo
18f20 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d olean value: {1}
18f30 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f50 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
18f60 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 ay(arg), ForDisp
18f70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 lay(text)),..
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18fa0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
18fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18fd0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d if (strict).
18fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19000 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
19010 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e;....
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19030 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d continue;.
19040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
19060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
19080 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 nfiguration.verb
19090 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 ose = (bool)valu
190a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
190b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
190d0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 else if (
190e0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 MatchOption(newA
190f0 72 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75 rg, "vsVersionSu
19100 66 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20 ffix"))..
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19140 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 configuration.vs
19150 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 VersionSuffix =
19160 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 text;..
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
19180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
19190 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 else i
191a0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e f (MatchOption(n
191b0 65 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 ewArg, "whatIf")
191c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
191d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
191f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 bool?
19200 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f value = ParseBoo
19210 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 lean(text);....
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19230 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 if (v
19240 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 alue == null)..
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19260 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
19290 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 ror = TraceOps.D
192a0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 ebugAndTrace(..
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 20 20 20 20
192d0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 TracePriority
192e0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 .Lowest, debugCa
192f0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 llback,..
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
19320 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 ceCallback, Stri
19330 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19360 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f "Invalid {0} boo
19370 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 lean value: {1}"
19380 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
193a0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 ForDispla
193b0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c y(arg), ForDispl
193c0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 ay(text)),..
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
193f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
19400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19420 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a if (strict)..
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 20 20 20 20 20 20 20 20 20
19450 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
19460 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19480 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a continue;..
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
194a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
194b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
194d0 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 figuration.whatI
194e0 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b f = (bool)value;
194f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
19500 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19520 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 else if (Ma
19530 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 tchOption(newArg
19540 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 , "wow64"))..
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19580 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 bool? value
19590 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 = ParseBoolean(t
195a0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ext);....
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
195c0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d if (value =
195d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
195f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19610 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
19620 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
19630 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 dTrace(..
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
19660 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 cePriority.Lowes
19670 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b t, debugCallback
19680 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
196a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
196b0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
196c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
196e0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c "Inval
196f0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 id {0} boolean v
19700 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 alue: {1}",..
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19730 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 ForDisplay(arg)
19740 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 , ForDisplay(tex
19750 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 t)),..
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19770 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
19780 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
197b0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 (strict)..
197c0 20 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 72 65 re
197e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 turn false;....
197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
19810 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 ontinue;..
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19830 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19850 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 configura
19860 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f tion.wow64 = (bo
19870 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 ol)value;..
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19890 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c el
198b0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se..
198c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
198e0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
198f0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 = TraceOps.Debu
19900 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 gAndTrace(..
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19920 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
19930 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 ePriority.Lowest
19940 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c , debugCallback,
19950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19970 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c traceCallback,
19980 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
19990 0a 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 20 20 20 20 20 20
199b0 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f "Unsupported co
199c0 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f mmand line optio
199d0 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 n: {0}",..
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 46 6f 72 44 69 73 ForDis
19a00 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 play(arg)), trac
19a10 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19a30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 if (s
19a40 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 trict)..
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19a60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
19a70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alse;..
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
19a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
19aa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
19ac0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 eturn true;..
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19af0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e catch (Exception
19b00 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e)..
19b10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
19b20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
19b30 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 eOps.DebugAndTra
19b40 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 ce(TracePriority
19b50 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 .Highest,..
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19b70 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b debugCallback
19b80 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c , traceCallback,
19b90 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 e, traceCategor
19ba0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
19bb0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
19bc0 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f = "Failed to mo
19bd0 64 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 dify configurati
19be0 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 on.";..
19bf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
19c00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
19c10 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
19c20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
19c30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
19c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
19c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
19c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
19c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
19c80 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 [Meth
19c90 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 odImpl(MethodImp
19ca0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e lOptions.NoInlin
19cb0 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 ing)]..
19cc0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 public static
19cd0 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a bool Process(..
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19cf0 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a string[] args,..
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19d10 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f Configuration co
19d20 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 nfiguration,..
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f bo
19d40 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 ol strict,..
19d50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 ref
19d60 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 string error..
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d ).
19d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19da0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 try..
19db0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
19dd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d configuration ==
19de0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
19df0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19e10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 error = "
19e20 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 Invalid configur
19e30 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 ation.";..
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19e50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
19e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
19e70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 As
19e90 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 sembly assembly
19ea0 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e = configuration.
19eb0 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 assembly;....
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19ed0 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d if (assembly ==
19ee0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19f10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 error = "
19f20 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 Invalid assembly
19f30 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .";..
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
19f50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19f70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
19f80 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f if (!co
19f90 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 nfiguration.noTr
19fa0 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ace)..
19fb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19fd0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 if (!config
19fe0 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 uration.noLog &&
19ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 St
1a010 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 ring.IsNullOrEmp
1a020 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ty(configuration
1a030 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a .logFileName))..
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a050 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a070 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a090 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 // NOTE:
1a0a0 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 Use the default
1a0b0 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a log file name...
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 conf
1a100 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c iguration.logFil
1a110 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 eName = GetLogFi
1a120 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 leName(..
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a140 20 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22 "trace"
1a150 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
1a160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
1a170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1a180 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
1a190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a1c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
1a1e0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e !configuration.n
1a1f0 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 oConsole)..
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a210 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a230 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a250 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 // NOTE: In ve
1a260 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 rbose mode, debu
1a270 67 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d g output (that m
1a280 65 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 eets..
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a2a0 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 // the c
1a2b0 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 onfigured priori
1a2c0 74 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c ty criteria) wil
1a2d0 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 l be..
1a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a2f0 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c // displ
1a300 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 ayed to the cons
1a310 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 ole; otherwise,
1a320 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 trace..
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a340 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 // outp
1a350 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 ut (that meets t
1a360 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 he configured pr
1a370 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 iority..
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a390 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 // cri
1a3a0 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 teria) will be d
1a3b0 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 isplayed to the
1a3c0 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 console...
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a3e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a400 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 if (config
1a410 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a uration.debug)..
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
1a460 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a480 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 // NOTE: Add
1a490 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 the console trac
1a4a0 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 e listener to th
1a4b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a4d0 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 // list
1a4e0 20 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e of trace listen
1a4f0 65 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 ers maintained b
1a500 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y..
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a520 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 // the
1a530 54 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 TraceOps class (
1a540 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 i.e. only messag
1a550 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 es..
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a570 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 // tha
1a580 74 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 t meet the debug
1a590 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 priority will b
1a5a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a5c0 20 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e // seen
1a5d0 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 on the console)
1a5e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a600 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a620 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e TraceOps.
1a630 53 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e SetupDebugListen
1a640 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 ers();..
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a660 20 20 20 20 7d 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 20
1a680 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 else..
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a6a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a6c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e // N
1a6f0 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e OTE: Add the con
1a700 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 sole trace liste
1a710 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 ner to the..
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
1a740 20 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 list of bui
1a750 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 lt-in trace list
1a760 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 eners (i.e...
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a780 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
1a790 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 only messa
1a7a0 67 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 ges that meet th
1a7b0 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 e trace..
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a7d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
1a7e0 20 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 priority will
1a7f0 62 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 be seen on the c
1a800 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 onsole)...
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a820 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
1a850 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 ace.Listeners.Ad
1a860 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 d(new ConsoleTra
1a870 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a ceListener());..
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a8b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a8d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
1a8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a920 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 if (!conf
1a930 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 iguration.noLog
1a940 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 &&..
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a960 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 !String.IsNullOr
1a970 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 Empty(configurat
1a980 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 ion.logFileName)
1a990 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
1a9a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a9c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e Trace.
1a9d0 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 Listeners.Add(ne
1a9e0 77 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63 w TextWriterTrac
1a9f0 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 eListener(..
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 conf
1aa20 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c iguration.logFil
1aa30 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 eName));....
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 2f 2f 0d 0a 20 20 20 20 //..
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aa70 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a // NOTE:
1aa80 20 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 Technically, we
1aa90 20 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 created the log
1aaa0 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 file...
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aac0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aae0 20 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64 filesCreated
1aaf0 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ++;..
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ab20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d //.
1ab40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1ab50 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 // NOTE: Du
1ab60 6d 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 mp the configura
1ab70 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 tion now in case
1ab80 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 we need to..
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aba0 20 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c // troubl
1abb0 65 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 eshoot any issue
1abc0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s...
1abd0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
1abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1abf0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f if (configuratio
1ac00 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 n.debugPriority
1ac10 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 <= TracePriority
1ac20 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 .Medium)..
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ac40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e configuration.
1ac50 44 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 Dump(debugCallba
1ac60 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ck);....
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
1ac80 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 configuration.tr
1ac90 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 acePriority <= T
1aca0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 racePriority.Med
1acb0 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ium)..
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
1acd0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 nfiguration.Dump
1ace0 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b (traceCallback);
1acf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1ad00 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ad20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 // NOTE: Show wh
1ad30 65 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 ere we are runni
1ad40 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 ng from and how
1ad50 77 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 we were..
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
1ad70 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a invoked...
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ad90 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
1adb0 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 ng location = as
1adc0 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b sembly.Location;
1add0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1ade0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
1adf0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 .DebugAndTrace(T
1ae00 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 racePriority.Med
1ae10 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 iumLow,..
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae30 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 debugCallback,
1ae40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 traceCallback, S
1ae50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 tring.Format(..
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae70 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 "Running
1ae80 65 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b executable is: {
1ae90 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0}", ForDisplay(
1aea0 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 location)),..
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aec0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f traceCatego
1aed0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ry);....
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
1aef0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 eOps.DebugAndTra
1af00 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 ce(TracePriority
1af10 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 .MediumLow,..
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1af30 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 debugCallba
1af40 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 ck, traceCallbac
1af50 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 k, String.Format
1af60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
1af70 20 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 "Orig
1af80 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e inal command lin
1af90 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 e is: {0}",..
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1afb0 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 Environment
1afc0 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 .CommandLine), t
1afd0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
1afe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1aff0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 TraceOps.D
1b000 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 ebugAndTrace(Tra
1b010 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 cePriority.Mediu
1b020 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 mLow,..
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
1b040 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 ebugCallback, tr
1b050 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 aceCallback, Str
1b060 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b080 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 "Running pr
1b090 6f 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 ocess is {0}.",
1b0a0 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 Is64BitProcess()
1b0b0 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ?..
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b0d0 22 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 "64-bit" : "32-b
1b0e0 69 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 it"), traceCateg
1b0f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
1b110 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e (!configuration.
1b120 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 whatIf)..
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b150 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
1b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b170 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 // NOTE: If
1b180 74 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20 the debugger is
1b190 61 74 74 61 63 68 65 64 20 61 6e 64 20 57 68 61 attached and Wha
1b1a0 74 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20 t-If mode..
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b1c0 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b // is [
1b1d0 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 now] disabled, i
1b1e0 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d ssue a warning..
1b1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1b200 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b220 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65 if (Debugge
1b230 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20 r.IsAttached)..
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b250 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
1b260 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 Ops.DebugAndTrac
1b270 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e e(TracePriority.
1b280 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 MediumHigh,..
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 deb
1b2b0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 ugCallback, trac
1b2c0 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 eCallback,..
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 "For
1b2f0 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c ced to disable \
1b300 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 "what-if\" mode
1b310 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20 with " +..
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b330 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67 "debug
1b340 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20 ger attached.",
1b350 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
1b360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1b370 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
1b380 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 else
1b390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1b3a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b3c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
1b3d0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 ndTrace(TracePri
1b3e0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 ority.MediumHigh
1b3f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
1b410 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 ebugCallback, tr
1b420 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 aceCallback,..
1b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b440 20 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63 "No ac
1b450 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c tual changes wil
1b460 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69 l be made to thi
1b470 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 s " +..
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b490 20 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75 "system becau
1b4a0 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d se \"what-if\" m
1b4b0 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 ode is enabled."
1b4c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1b4e0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b500 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d //.
1b520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1b530 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 // NOTE: If
1b540 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin
1b550 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d e has not been m
1b560 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 anually..
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
1b580 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 confirmed
1b590 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78 (i.e. via the ex
1b5a0 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c plicit command l
1b5b0 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ine..
1b5c0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
1b5d0 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 option), then
1b5e0 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20 stop processing
1b5f0 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 now. We enforce
1b600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1b610 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 // t
1b620 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74 his rule so that
1b630 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 simply double-c
1b640 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 licking the..
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b660 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 // execut
1b670 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 able will not re
1b680 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e sult in any chan
1b690 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 ges being..
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
1b6b0 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20 / made to
1b6c0 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 the system...
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b6e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
1b6f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f if (!co
1b700 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 nfiguration.conf
1b710 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 irm)..
1b720 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b740 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61 error = "Ca
1b750 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 nnot continue, t
1b760 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f he \"confirm\" o
1b770 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 ption is " +..
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b790 20 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20 65 "not e
1b7a0 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 nabled.";....
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b7c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
1b7d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
1b7e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b800 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 return true;..
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
1b820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1b830 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 catch (Excepti
1b840 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 on e)..
1b850 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
1b870 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
1b880 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 race(TracePriori
1b890 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 ty.Highest,..
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b8b0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 debugCallba
1b8c0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 ck, traceCallbac
1b8d0 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 k, e, traceCateg
1b8e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
1b900 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 or = "Failed to
1b910 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72 process configur
1b920 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 ation.";..
1b930 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
1b950 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 eturn false;..
1b960 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
1b970 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
1b980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1b990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1b9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1b9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
1b9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d .. [M
1b9d0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 ethodImpl(Method
1b9e0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e ImplOptions.NoIn
1b9f0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 lining)]..
1ba00 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 public sta
1ba10 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75 tic bool CheckRu
1ba20 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 ntimeVersion(..
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
1ba40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e onfiguration con
1ba50 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 figuration,..
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
1ba70 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 l strict,..
1ba80 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 ref s
1ba90 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 tring error..
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1bad0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ry..
1bae0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
1baf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 if (c
1bb00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 onfiguration ==
1bb10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
1bb20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 error = "I
1bb50 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 nvalid configura
1bb60 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 tion.";..
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bba0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d //.
1bbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1bbd0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 // NOTE: Wh
1bbe0 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 at version of th
1bbf0 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68 e runtime was th
1bc00 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29 e core (primary)
1bc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1bc20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 // a
1bc30 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 ssembly compiled
1bc40 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22 against (e.g. "
1bc50 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a v2.0.50727" or..
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bc70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34 // "v4
1bc80 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20 .0.30319")...
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bca0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
1bcb0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
1bcc0 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 coreImageRuntime
1bcd0 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61 Version = GetIma
1bce0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e geRuntimeVersion
1bcf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
1bd00 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
1bd10 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c guration.coreFil
1bd20 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 eName);....
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
1bd40 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
1bd50 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 // NOTE:
1bd60 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74 We allow the act
1bd70 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d ual image runtim
1bd80 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 e checking to be
1bd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1bda0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 // b
1bdb0 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20 ypassed via the
1bdc0 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 "-noRuntimeVersi
1bdd0 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 on" command line
1bde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1bdf0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f // o
1be00 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d ption. The comm
1be10 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 and line option
1be20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d is intended for.
1be30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1be40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 // ex
1be50 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a pert use only...
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1be70 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
1be80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
1be90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f configuration.no
1bea0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d RuntimeVersion).
1beb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1bec0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bee0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
1bef0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f dTrace(TracePrio
1bf00 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 rity.Medium,..
1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bf20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 debugC
1bf30 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 allback, traceCa
1bf40 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 llback, String.F
1bf50 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bf70 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 "Assembly is
1bf80 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 compiled for th
1bf90 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b e .NET Framework
1bfa0 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20 {0}; " +..
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bfc0 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c "however,
1bfd0 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65 installation re
1bfe0 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64 strictions based
1bff0 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 on this " +..
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c010 20 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20 "fact
1c020 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c have been disabl
1c030 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 ed via the comma
1c040 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 nd line.",..
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c060 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 coreImag
1c070 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 eRuntimeVersion)
1c080 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 , traceCategory)
1c090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
1c0b0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 urn true;..
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
1c0d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1c0e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c100 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 // TODO: Restric
1c110 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 t the configurat
1c120 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69 ion based on whi
1c130 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 ch image..
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
1c150 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76 runtime v
1c160 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d ersions (which m
1c170 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 ore-or-less corr
1c180 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 espond..
1c190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
1c1a0 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 to .NET Fra
1c1b0 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 mework versions)
1c1c0 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62 are supported b
1c1d0 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 y the..
1c1e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
1c1f0 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 versions of
1c200 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68 Visual Studio th
1c210 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 at are installed
1c220 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1c230 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
1c250 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c f (String.IsNull
1c260 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67 OrEmpty(coreImag
1c270 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 eRuntimeVersion)
1c280 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
1c290 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c2b0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c error = "inval
1c2c0 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 id core file ima
1c2d0 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 ge runtime versi
1c2e0 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 on";..
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
1c300 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c320 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
1c330 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 else if
1c340 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d (String.Equals(.
1c350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 cor
1c370 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 eImageRuntimeVer
1c380 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65 sion, CLRv2Image
1c390 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d RuntimeVersion,.
1c3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 Str
1c3c0 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 ingComparison.Or
1c3d0 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 dinal))..
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c400 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c420 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 // NOTE: For
1c430 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75 the CLR v2.0 ru
1c440 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 ntime, make sure
1c450 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 we disable..
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c470 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e // an
1c480 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 y attempt to use
1c490 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 it for things t
1c4a0 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 hat require..
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c4c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e // an
1c4d0 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c assembly compil
1c4e0 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 ed for the CLR v
1c4f0 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 4.0. It is..
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c510 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e // un
1c520 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20 certain if this
1c530 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72 is actually a pr
1c540 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 oblem in..
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c560 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74 // pract
1c570 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76 ice as the CLR v
1c580 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 4.0 can load and
1c590 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 use an..
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c5b0 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 // assemb
1c5c0 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 ly compiled with
1c5d0 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 the CLR v2.0; h
1c5e0 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 owever,..
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c600 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20 // since
1c610 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 this project off
1c620 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 ers both configu
1c630 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 rations,..
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c650 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75 // we cu
1c660 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 rrently disallow
1c670 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d this mismatch..
1c680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c690 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c6b0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 configurati
1c6c0 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 on.noNetFx40 = t
1c6d0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 rue;..
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
1c6f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 nfiguration.noNe
1c700 74 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20 tFx45 = true;..
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c720 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 configura
1c730 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20 tion.noNetFx451
1c740 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 = true;..
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c760 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e configuration.n
1c770 6f 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d oVs2010 = true;.
1c780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c790 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 configu
1c7a0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 ration.noVs2012
1c7b0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 = true;..
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c7d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e configuration.n
1c7e0 6f 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b 0d oVs2013 = true;.
1c7f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1c800 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
1c810 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 Ops.DebugAndTrac
1c820 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e e(TracePriority.
1c830 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 Medium,..
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c850 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 debugCallba
1c860 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 ck, traceCallbac
1c870 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 k, String.Format
1c880 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
1c8a0 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 Assembly is comp
1c8b0 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 iled for the .NE
1c8c0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c T Framework {0},
1c8d0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 " +..
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c8f0 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 "support for t
1c900 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 he .NET Framewor
1c910 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 k {1} is now dis
1c920 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 abled.",..
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c940 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67 65 CLRv2Image
1c950 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 RuntimeVersion,
1c960 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d CLRv4ImageRuntim
1c970 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 eVersion),..
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c990 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1c9a0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 egory);..
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c9d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 else if (Str
1c9e0 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 ing.Equals(..
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ca00 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 coreIma
1ca10 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e geRuntimeVersion
1ca20 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 , CLRv4ImageRunt
1ca30 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 imeVersion,..
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ca50 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 StringC
1ca60 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 omparison.Ordina
1ca70 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l))..
1ca80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1caa0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cac0 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 // NOTE: For the
1cad0 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69 6d CLR v4.0 runtim
1cae0 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 e, make sure we
1caf0 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 disable..
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cb10 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74 // any at
1cb20 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20 tempt to use it
1cb30 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20 for things that
1cb40 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20 require..
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cb60 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73 // an ass
1cb70 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 embly compiled f
1cb80 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e or the CLR v2.0.
1cb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1cba0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cbc0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
1cbd0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 ion.noNetFx20 =
1cbe0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 true;..
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
1cc00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e onfiguration.noN
1cc10 65 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d 0a etFx35 = true;..
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cc30 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 configur
1cc40 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d ation.noVs2005 =
1cc50 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 true;..
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cc70 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f configuration.no
1cc80 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a Vs2008 = true;..
1cc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1cca0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f TraceO
1ccb0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 ps.DebugAndTrace
1ccc0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d (TracePriority.M
1ccd0 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 edium,..
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ccf0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
1cd00 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
1cd10 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
1cd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 "A
1cd40 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 ssembly is compi
1cd50 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 led for the .NET
1cd60 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 Framework {0},
1cd70 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " +..
1cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cd90 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68 "support for th
1cda0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b e .NET Framework
1cdb0 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 {1} is now disa
1cdc0 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 bled.",..
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cde0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 ForDisplay(
1cdf0 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d CLRv4ImageRuntim
1ce00 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 eVersion),..
1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ce20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
1ce30 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e ay(CLRv2ImageRun
1ce40 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a timeVersion)),..
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1ce70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 eCategory);..
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ce90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
1cea0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 else..
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cec0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
1cee0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d or = String.Form
1cef0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cf10 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f "unsupported co
1cf20 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 re file image ru
1cf30 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22 20 ntime version "
1cf40 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 +..
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
1cf60 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d {0}, must be {1}
1cf70 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 or {2}",..
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cf90 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 ForDispla
1cfa0 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 y(coreImageRunti
1cfb0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 meVersion),..
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cfd0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
1cfe0 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 lay(CLRv2ImageRu
1cff0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a ntimeVersion),..
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 20 20 20 20 46 6f 72 44 ForD
1d020 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 isplay(CLRv4Imag
1d030 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 eRuntimeVersion)
1d040 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
1d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
1d060 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d080 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
1d090 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
1d0a0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 true;..
1d0b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
1d0c0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 catch
1d0d0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a (Exception e)..
1d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d0f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
1d100 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e TraceOps.
1d110 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 DebugAndTrace(Tr
1d120 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 acePriority.High
1d130 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 est,..
1d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
1d150 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 bugCallback, tra
1d160 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 ceCallback, e, t
1d170 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
1d180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d190 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 error = "F
1d1a0 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20 69 ailed to check i
1d1b0 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 mage runtime ver
1d1c0 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 sion.";..
1d1d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
1d1f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
1d200 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
1d210 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 #endregi
1d220 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 on....
1d230 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
1d240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d270 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
1d280 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 #region Pub
1d290 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 lic Methods..
1d2a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
1d2b0 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a bool HasFlags(..
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d2d0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 InstallFlags has
1d2e0 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 Flags,..
1d2f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c bool all
1d300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d310 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )..
1d320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
1d330 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 if (all)..
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d350 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 return ((insta
1d360 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 llFlags & hasFla
1d370 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 gs) == hasFlags)
1d380 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
1d390 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 else..
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
1d3b0 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 urn ((installFla
1d3c0 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 21 gs & hasFlags) !
1d3d0 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e = InstallFlags.N
1d3e0 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 one);..
1d3f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
1d400 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
1d410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d440 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
1d450 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f public bo
1d460 6f 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 ol IsLinqSupport
1d470 65 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ed()..
1d480 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
1d490 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
1d4a0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 // NOTE
1d4b0 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 : Return non-zer
1d4c0 6f 20 69 66 20 74 68 65 20 4c 49 4e 51 20 61 73 o if the LINQ as
1d4d0 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 sembly should be
1d4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d4f0 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 63 65 // proce
1d500 73 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 20 ssed during the
1d510 69 6e 73 74 61 6c 6c 2e 20 20 49 66 20 74 68 65 install. If the
1d520 20 74 61 72 67 65 74 20 69 73 0d 0a 20 20 20 20 target is..
1d530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
1d540 20 20 20 20 20 56 69 73 75 61 6c 20 53 74 75 64 Visual Stud
1d550 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20 73 68 io 2005, this sh
1d560 6f 75 6c 64 20 72 65 74 75 72 6e 20 7a 65 72 6f ould return zero
1d570 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1d580 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
1d590 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 21 6e return !n
1d5a0 6f 4e 65 74 46 78 33 35 20 7c 7c 20 21 6e 6f 4e oNetFx35 || !noN
1d5b0 65 74 46 78 34 30 20 7c 7c 20 21 6e 6f 4e 65 74 etFx40 || !noNet
1d5c0 46 78 34 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 Fx45 || !noNetFx
1d5d0 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 451;..
1d5e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
1d5f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
1d600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d630 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
1d640 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 public voi
1d650 64 20 44 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 d Dump(..
1d660 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 TraceCa
1d670 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c llback traceCall
1d680 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 back..
1d690 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
1d6a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1d6b0 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63 if (trac
1d6c0 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c eCallback != nul
1d6d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
1d6e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
1d6f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1d700 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1d710 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1d720 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d740 20 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 "Assembly",
1d750 46 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d ForDisplay(assem
1d760 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 bly)),..
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d780 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
1d790 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1d7a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
1d7b0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d back(String.Form
1d7c0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 at(NameAndValueF
1d7d0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 ormat,..
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d7f0 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 "LogFileName", F
1d800 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c orDisplay(logFil
1d810 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 eName)),..
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d830 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1d840 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1d850 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1d860 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1d870 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1d880 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d8a0 20 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 "Directory", F
1d8b0 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 orDisplay(direct
1d8c0 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ory)),..
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d8e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
1d8f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1d900 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
1d910 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d back(String.Form
1d920 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 at(NameAndValueF
1d930 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 ormat,..
1d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d950 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 "CoreFileName",
1d960 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 ForDisplay(coreF
1d970 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 ileName)),..
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d990 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1d9a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1d9b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1d9c0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1d9d0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1d9e0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1da00 20 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d "LinqFileNam
1da10 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c e", ForDisplay(l
1da20 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a inqFileName)),..
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1da40 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1da50 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1da70 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 raceCallback(Str
1da80 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 ing.Format(NameA
1da90 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a ndValueFormat,..
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dab0 20 20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 "Designe
1dac0 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 rFileName", ForD
1dad0 69 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 isplay(designerF
1dae0 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 ileName)),..
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1db00 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1db10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1db20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1db30 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1db40 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1db50 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1db70 20 20 20 20 22 52 65 67 69 73 74 72 79 56 65 72 "RegistryVer
1db80 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 sion", ForDispla
1db90 79 28 72 65 67 69 73 74 72 79 56 65 72 73 69 6f y(registryVersio
1dba0 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 n)),..
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1dbc0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
1dbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1dbe0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
1dbf0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 ck(String.Format
1dc00 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 (NameAndValueFor
1dc10 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 mat,..
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 "C
1dc30 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 2c 20 46 onfigVersion", F
1dc40 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 orDisplay(config
1dc50 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 Version)),..
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dc70 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1dc80 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1dc90 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1dca0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1dcb0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1dcc0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dce0 20 20 20 20 22 56 73 56 65 72 73 69 6f 6e 53 75 "VsVersionSu
1dcf0 66 66 69 78 22 2c 20 46 6f 72 44 69 73 70 6c 61 ffix", ForDispla
1dd00 79 28 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 y(vsVersionSuffi
1dd10 78 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 x)),..
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1dd30 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
1dd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1dd50 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
1dd60 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 ck(String.Format
1dd70 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 (NameAndValueFor
1dd80 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 mat,..
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 "D
1dda0 65 62 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72 ebugFormat", For
1ddb0 44 69 73 70 6c 61 79 28 64 65 62 75 67 46 6f 72 Display(debugFor
1ddc0 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 mat)),..
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dde0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
1ddf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1de00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
1de10 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d back(String.Form
1de20 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 at(NameAndValueF
1de30 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 ormat,..
1de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1de50 22 54 72 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 "TraceFormat", F
1de60 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65 46 orDisplay(traceF
1de70 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 ormat)),..
1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1de90 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1dea0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1deb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1dec0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1ded0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1dee0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1df00 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 "InstallFlags"
1df10 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 , ForDisplay(ins
1df20 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 tallFlags)),..
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1df40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1df50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1df70 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1df80 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1df90 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dfb0 20 20 20 20 20 20 22 44 65 62 75 67 50 72 69 6f "DebugPrio
1dfc0 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 rity", ForDispla
1dfd0 79 28 64 65 62 75 67 50 72 69 6f 72 69 74 79 29 y(debugPriority)
1dfe0 29 2c 0d 0a 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 74 72 61 63 trac
1e000 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e020 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1e030 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1e040 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1e050 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1e060 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61 "Tra
1e070 63 65 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 cePriority", For
1e080 44 69 73 70 6c 61 79 28 74 72 61 63 65 50 72 69 Display(tracePri
1e090 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 ority)),..
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e0b0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1e0c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1e0d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1e0e0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1e0f0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1e100 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e120 20 20 22 50 65 72 55 73 65 72 22 2c 20 46 6f 72 "PerUser", For
1e130 44 69 73 70 6c 61 79 28 70 65 72 55 73 65 72 29 Display(perUser)
1e140 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1e150 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1e160 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e180 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1e190 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1e1a0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1e1b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 "Ins
1e1d0 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 tall", ForDispla
1e1e0 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 y(install)),..
1e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e200 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1e210 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1e230 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1e240 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1e250 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e270 20 20 20 20 20 20 22 57 6f 77 36 34 22 2c 20 46 "Wow64", F
1e280 6f 72 44 69 73 70 6c 61 79 28 77 6f 77 36 34 29 orDisplay(wow64)
1e290 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1e2b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e2d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1e2e0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1e2f0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1e300 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1e310 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 52 "NoR
1e320 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20 untimeVersion",
1e330 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e ForDisplay(noRun
1e340 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a timeVersion)),..
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e360 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1e370 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1e390 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 raceCallback(Str
1e3a0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 ing.Format(NameA
1e3b0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a ndValueFormat,..
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e3d0 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b 74 "NoDeskt
1e3e0 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 op", ForDisplay(
1e3f0 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20 noDesktop)),..
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e410 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1e420 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1e440 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1e450 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1e460 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e480 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74 "NoCompact
1e490 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f ", ForDisplay(no
1e4a0 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20 20 Compact)),..
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e4c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1e4d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1e4e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1e4f0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1e500 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1e510 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e530 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c "NoNetFx20",
1e540 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 ForDisplay(noNe
1e550 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20 20 tFx20)),..
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e570 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1e580 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1e590 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1e5a0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1e5b0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1e5c0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e5e0 20 20 22 4e 6f 4e 65 74 46 78 33 35 22 2c 20 46 "NoNetFx35", F
1e5f0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 orDisplay(noNetF
1e600 78 33 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 x35)),..
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e620 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
1e630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1e640 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
1e650 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d back(String.Form
1e660 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 at(NameAndValueF
1e670 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 ormat,..
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e690 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 "NoNetFx40", For
1e6a0 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 Display(noNetFx4
1e6b0 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 0)),..
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1e6d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
1e6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1e6f0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
1e700 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 ck(String.Format
1e710 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 (NameAndValueFor
1e720 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 mat,..
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e "N
1e740 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f 72 44 69 oNetFx45", ForDi
1e750 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 29 splay(noNetFx45)
1e760 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1e770 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1e780 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e7a0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1e7b0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1e7c0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1e7d0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e "NoN
1e7f0 65 74 46 78 34 35 31 22 2c 20 46 6f 72 44 69 73 etFx451", ForDis
1e800 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 31 29 play(noNetFx451)
1e810 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1e820 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1e830 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e850 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1e860 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1e870 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1e880 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1e890 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 "NoV
1e8a0 73 32 30 30 35 22 2c 20 46 6f 72 44 69 73 70 6c s2005", ForDispl
1e8b0 61 79 28 6e 6f 56 73 32 30 30 35 29 29 2c 0d 0a ay(noVs2005)),..
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e8d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1e8e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1e900 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 raceCallback(Str
1e910 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 ing.Format(NameA
1e920 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a ndValueFormat,..
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e940 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 "NoVs200
1e950 38 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 8", ForDisplay(n
1e960 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20 20 20 20 oVs2008)),..
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e980 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1e990 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1e9a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1e9b0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1e9c0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1e9d0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e9f0 20 20 20 20 22 4e 6f 56 73 32 30 31 30 22 2c 20 "NoVs2010",
1ea00 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 ForDisplay(noVs2
1ea10 30 31 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 010)),..
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ea30 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
1ea40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1ea50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
1ea60 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d back(String.Form
1ea70 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 at(NameAndValueF
1ea80 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 ormat,..
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eaa0 22 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f 72 44 "NoVs2012", ForD
1eab0 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 32 29 isplay(noVs2012)
1eac0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1eae0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eb00 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1eb10 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1eb20 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1eb30 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 "NoV
1eb50 73 32 30 31 33 22 2c 20 46 6f 72 44 69 73 70 6c s2013", ForDispl
1eb60 61 79 28 6e 6f 56 73 32 30 31 33 29 29 2c 0d 0a ay(noVs2013)),..
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eb80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1eb90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1ebb0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 raceCallback(Str
1ebc0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 ing.Format(NameA
1ebd0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a ndValueFormat,..
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ebf0 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63 65 "NoTrace
1ec00 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f ", ForDisplay(no
1ec10 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20 20 Trace)),..
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ec30 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1ec40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1ec50 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1ec60 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1ec70 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1ec80 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eca0 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46 "NoConsole", F
1ecb0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73 orDisplay(noCons
1ecc0 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ole)),..
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ece0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
1ecf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1ed00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
1ed10 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d back(String.Form
1ed20 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 at(NameAndValueF
1ed30 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 ormat,..
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ed50 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70 "NoLog", ForDisp
1ed60 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20 lay(noLog)),..
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ed80 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1ed90 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1edb0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1edc0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1edd0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1edf0 20 20 20 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69 "ThrowOnMi
1ee00 73 73 69 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c ssing", ForDispl
1ee10 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e ay(throwOnMissin
1ee20 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 g)),..
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1ee40 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
1ee50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1ee60 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
1ee70 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 ck(String.Format
1ee80 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 (NameAndValueFor
1ee90 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 mat,..
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57 "W
1eeb0 68 61 74 49 66 22 2c 20 46 6f 72 44 69 73 70 6c hatIf", ForDispl
1eec0 61 79 28 77 68 61 74 49 66 29 29 2c 0d 0a 20 20 ay(whatIf)),..
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eee0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1eef0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1ef10 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1ef20 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1ef30 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ef50 20 20 20 20 20 20 22 44 65 62 75 67 22 2c 20 46 "Debug", F
1ef60 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 29 orDisplay(debug)
1ef70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1ef90 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1efb0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1efc0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1efd0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1efe0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 22 56 65 72 "Ver
1f000 62 6f 73 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 bose", ForDispla
1f010 79 28 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 y(verbose)),..
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f030 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1f040 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1f060 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1f070 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1f080 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f0a0 20 20 20 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c "Confirm",
1f0b0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 ForDisplay(conf
1f0c0 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 irm)),..
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f0e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
1f0f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1f100 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f ////////////////
1f130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f140 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
1f150 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 if (as
1f160 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d sembly != null).
1f170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1f180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f1a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 traceCallback(St
1f1b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 ring.Format(Name
1f1c0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d AndValueFormat,.
1f1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 "As
1f1f0 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20 semblyTitle",..
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f210 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 ForDi
1f220 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c splay(GetAssembl
1f230 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 yTitle(assembly)
1f240 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )),..
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f260 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
1f270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1f280 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1f290 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 eCallback(String
1f2a0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 .Format(NameAndV
1f2b0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 alueFormat,..
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f2d0 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 "Assemb
1f2e0 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 lyConfiguration"
1f2f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
1f310 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 orDisplay(GetAss
1f320 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 emblyConfigurati
1f330 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d on(assembly))),.
1f340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1f360 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 ceCategory);..
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f380 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
1f390 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
1f3a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
1f3b0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
1f3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
1f3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1f420 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 #region Public P
1f430 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 roperties..
1f440 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41 private A
1f450 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 ssembly assembly
1f460 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
1f470 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41 ublic Assembly A
1f480 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 ssembly..
1f490 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1f4a0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
1f4b0 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d turn assembly; }
1f4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1f4d0 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 set { assembly
1f4e0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
1f4f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
1f500 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
1f510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
1f550 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
1f560 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 vate string logF
1f570 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 ileName;..
1f580 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 public str
1f590 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d ing LogFileName.
1f5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f5c0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 get { return log
1f5d0 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 FileName; }..
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
1f5f0 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d { logFileName =
1f600 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
1f610 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
1f620 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
1f630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1f670 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
1f680 74 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 te string direct
1f690 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ory;..
1f6a0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 public string
1f6b0 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 Directory..
1f6c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
1f6d0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
1f6e0 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79 return directory
1f6f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
1f700 20 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63 set { direc
1f710 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d tory = value; }.
1f720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
1f730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
1f740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f780 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
1f790 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 private string
1f7a0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 coreFileName;..
1f7b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
1f7c0 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c c string CoreFil
1f7d0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName..
1f7e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
1f7f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
1f800 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b rn coreFileName;
1f810 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
1f820 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 set { coreFi
1f830 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 leName = value;
1f840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
1f850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1f860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f8a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
1f8b0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e private strin
1f8c0 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d g linqFileName;.
1f8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
1f8e0 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 lic string LinqF
1f8f0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 ileName..
1f900 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1f910 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
1f920 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d turn linqFileNam
1f930 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 e; }..
1f940 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 set { linq
1f950 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 FileName = value
1f960 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
1f970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
1f980 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
1f990 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
1f9d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 private str
1f9e0 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 ing designerFile
1f9f0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 Name;..
1fa00 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 public string
1fa10 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d DesignerFileNam
1fa20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b e.. {
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 64 get { return d
1fa50 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b esignerFileName;
1fa60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
1fa70 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e set { design
1fa80 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c erFileName = val
1fa90 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
1faa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
1fab0 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f ////////////////
1faf0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
1fb00 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
1fb10 74 72 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 tring registryVe
1fb20 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 rsion;..
1fb30 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e public strin
1fb40 67 20 52 65 67 69 73 74 72 79 56 65 72 73 69 6f g RegistryVersio
1fb50 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b n.. {
1fb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1fb70 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 get { return r
1fb80 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 20 egistryVersion;
1fb90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
1fba0 20 20 20 73 65 74 20 7b 20 72 65 67 69 73 74 72 set { registr
1fbb0 79 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 yVersion = value
1fbc0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
1fbd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
1fbe0 20 20 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 2f 2f 2f 2f 2f ////////////////
1fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fc20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
1fc30 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 private str
1fc40 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f ing configVersio
1fc50 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n;..
1fc60 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f public string Co
1fc70 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20 20 nfigVersion..
1fc80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
1fca0 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 56 { return configV
1fcb0 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 ersion; }..
1fcc0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
1fcd0 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d configVersion =
1fce0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
1fcf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
1fd00 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
1fd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1fd50 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
1fd60 74 65 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 te string vsVers
1fd70 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 ionSuffix;..
1fd80 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 public s
1fd90 74 72 69 6e 67 20 56 73 56 65 72 73 69 6f 6e 53 tring VsVersionS
1fda0 75 66 66 69 78 0d 0a 20 20 20 20 20 20 20 20 20 uffix..
1fdb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
1fdc0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
1fdd0 72 6e 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 rn vsVersionSuff
1fde0 69 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ix; }..
1fdf0 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 73 56 set { vsV
1fe00 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 ersionSuffix = v
1fe10 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
1fe20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
1fe30 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
1fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
1fe80 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
1fe90 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 string debugFor
1fea0 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 mat;..
1feb0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 public string
1fec0 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 DebugFormat..
1fed0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
1fef0 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f { return debugFo
1ff00 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 rmat; }..
1ff10 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 set { d
1ff20 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c ebugFormat = val
1ff30 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
1ff40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
1ff50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
1ff60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ff90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
1ffa0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
1ffb0 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 tring traceForma
1ffc0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t;..
1ffd0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 public string Tr
1ffe0 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 aceFormat..
1fff0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
20000 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
20010 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d return traceForm
20020 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 at; }..
20030 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 set { tra
20040 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 ceFormat = value
20050 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
20060 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
20070 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
200a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
200b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
200c0 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 private Ins
200d0 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c tallFlags instal
200e0 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 lFlags;..
200f0 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 public Inst
20100 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c allFlags Install
20110 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 Flags..
20120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
20130 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
20140 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b rn installFlags;
20150 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
20160 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c set { instal
20170 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 lFlags = value;
20180 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
20190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
201a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
201b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
201c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
201d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
201e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
201f0 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 private Trace
20200 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 Priority debugPr
20210 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 iority;..
20220 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 public Trac
20230 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50 ePriority DebugP
20240 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 riority..
20250 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
20260 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
20270 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 turn debugPriori
20280 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ty; }..
20290 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 set { deb
202a0 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c ugPriority = val
202b0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
202c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
202d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
202e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
202f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20310 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
20320 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 private T
20330 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 racePriority tra
20340 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 cePriority;..
20350 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
20360 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 TracePriority Tr
20370 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 acePriority..
20380 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
20390 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
203a0 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 { return tracePr
203b0 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 iority; }..
203c0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
203d0 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d tracePriority =
203e0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
203f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
20400 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
20410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
20450 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
20460 74 65 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 3b te bool perUser;
20470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
20480 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55 73 65 blic bool PerUse
20490 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b r.. {
204a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
204b0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 get { return p
204c0 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20 20 20 erUser; }..
204d0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
204e0 20 70 65 72 55 73 65 72 20 3d 20 76 61 6c 75 65 perUser = value
204f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
20500 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
20510 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
20520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
20560 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f private boo
20570 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 l install;..
20580 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 public b
20590 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20 20 ool Install..
205a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
205b0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
205c0 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c { return install
205d0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
205e0 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 set { insta
205f0 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 ll = value; }..
20600 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
20610 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
20620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d ///////////////.
20660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
20670 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77 36 rivate bool wow6
20680 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4;..
20690 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77 36 public bool Wow6
206a0 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 4.. {
206b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
206c0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 get { return w
206d0 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20 20 ow64; }..
206e0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 set { w
206f0 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d 0d ow64 = value; }.
20700 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
20710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20740 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
20770 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f private bool no
20780 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d RuntimeVersion;.
20790 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
207a0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74 69 lic bool NoRunti
207b0 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 meVersion..
207c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
207d0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
207e0 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d 65 return noRuntime
207f0 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 Version; }..
20800 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
20810 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 { noRuntimeVersi
20820 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 on = value; }..
20830 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
20840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
20850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
20890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
208a0 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44 65 rivate bool noDe
208b0 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 sktop;..
208c0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 public bool
208d0 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20 20 NoDesktop..
208e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
208f0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
20900 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f 70 return noDesktop
20910 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
20920 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65 73 set { noDes
20930 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d ktop = value; }.
20940 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
20950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
20960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
209a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
209b0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f private bool no
209c0 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 Compact;..
209d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f public boo
209e0 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20 20 l NoCompact..
209f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
20a00 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
20a10 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70 61 { return noCompa
20a20 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ct; }..
20a30 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 set { noC
20a40 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b 20 ompact = value;
20a50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
20a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
20a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20ab0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
20ac0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 private bool
20ad0 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 noNetFx20;..
20ae0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 public b
20af0 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a 20 ool NoNetFx20..
20b00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 ge
20b20 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 t { return noNet
20b30 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 Fx20; }..
20b40 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e set { n
20b50 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75 65 oNetFx20 = value
20b60 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
20b70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
20b80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
20b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20bc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
20bd0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f private boo
20be0 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20 l noNetFx35;..
20bf0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
20c00 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33 35 0d bool NoNetFx35.
20c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20c30 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e get { return noN
20c40 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20 20 20 etFx35; }..
20c50 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
20c60 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76 61 6c noNetFx35 = val
20c70 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
20c80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
20c90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
20ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20cd0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
20ce0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 private b
20cf0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a ool noNetFx40;..
20d00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
20d10 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 ic bool NoNetFx4
20d20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0.. {
20d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
20d40 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e get { return n
20d50 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20 oNetFx40; }..
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
20d70 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76 { noNetFx40 = v
20d80 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
20d90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
20da0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
20db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
20df0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
20e00 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 3b bool noNetFx45;
20e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
20e20 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 blic bool NoNetF
20e30 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x45..
20e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
20e50 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
20e60 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d 0a 20 noNetFx45; }..
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
20e80 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 20 3d et { noNetFx45 =
20e90 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
20ea0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
20eb0 20 20 20 20 20 20 20 20 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 2f ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
20f00 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
20f10 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 te bool noNetFx4
20f20 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 51;..
20f30 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e public bool NoN
20f40 65 74 46 78 34 35 31 0d 0a 20 20 20 20 20 20 20 etFx451..
20f50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
20f60 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
20f70 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 31 3b turn noNetFx451;
20f80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
20f90 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 set { noNetF
20fa0 78 34 35 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d x451 = value; }.
20fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
20fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
20fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
21020 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f private bool no
21030 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 Vs2005;..
21040 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c public bool
21050 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20 20 NoVs2005..
21060 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
21070 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
21080 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b return noVs2005;
21090 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
210a0 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 set { noVs20
210b0 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 05 = value; }..
210c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
210d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
210e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
210f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
21120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
21130 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 rivate bool noVs
21140 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 2008;..
21150 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e public bool N
21160 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20 oVs2008..
21170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
21180 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
21190 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d turn noVs2008; }
211a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
211b0 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38 set { noVs2008
211c0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
211d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
211e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
211f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
21230 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
21240 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 vate bool noVs20
21250 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 10;..
21260 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 public bool NoV
21270 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20 s2010..
21280 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
21290 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
212a0 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a rn noVs2010; }..
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
212c0 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d set { noVs2010 =
212d0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
212e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
212f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
21300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
21340 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
21350 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 te bool noVs2012
21360 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
21370 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 ublic bool NoVs2
21380 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 012..
21390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
213a0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
213b0 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20 noVs2012; }..
213c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
213d0 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20 76 t { noVs2012 = v
213e0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
213f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
21400 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
21410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21440 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
21450 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
21460 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 3b 0d bool noVs2013;.
21470 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
21480 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 lic bool NoVs201
21490 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 3.. {
214a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
214b0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e get { return n
214c0 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20 20 20 oVs2013; }..
214d0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
214e0 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20 76 61 6c { noVs2013 = val
214f0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
21500 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
21510 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
21520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21550 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
21560 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 private b
21570 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 ool noTrace;..
21580 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
21590 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 bool NoTrace..
215a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
215b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 ge
215c0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 t { return noTra
215d0 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ce; }..
215e0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 set { noT
215f0 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d race = value; }.
21600 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
21610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
21620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21660 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
21670 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f private bool no
21680 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 Console;..
21690 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f public boo
216a0 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 l NoConsole..
216b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
216c0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
216d0 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f { return noConso
216e0 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 le; }..
216f0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 set { noC
21700 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 onsole = value;
21710 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
21720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
21730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
21780 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 private bool
21790 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 noLog;..
217a0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 public bool
217b0 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 NoLog..
217c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
217d0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
217e0 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 rn noLog; }..
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
21800 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 { noLog = value
21810 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
21820 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
21830 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
21840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21870 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
21880 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f private boo
21890 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 l throwOnMissing
218a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
218b0 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77 ublic bool Throw
218c0 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 OnMissing..
218d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
218e0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
218f0 72 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69 return throwOnMi
21900 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 ssing; }..
21910 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 set {
21920 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d throwOnMissing =
21930 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
21940 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
21950 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
21960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
219a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
219b0 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d te bool whatIf;.
219c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
219d0 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d lic bool WhatIf.
219e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21a00 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68 61 get { return wha
21a10 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 tIf; }..
21a20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 68 set { wh
21a30 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d atIf = value; }.
21a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
21a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
21a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21aa0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
21ab0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 65 private bool de
21ac0 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 bug;..
21ad0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65 public bool De
21ae0 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 bug..
21af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
21b00 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
21b10 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20 debug; }..
21b20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
21b30 20 64 65 62 75 67 20 3d 20 76 61 6c 75 65 3b 20 debug = value;
21b40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
21b50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
21b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21ba0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
21bb0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 private bool
21bc0 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 verbose;..
21bd0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f public boo
21be0 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 l Verbose..
21bf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
21c00 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
21c10 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 return verbose;
21c20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
21c30 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65 set { verbose
21c40 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
21c50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
21c60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
21c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
21cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
21cc0 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 vate bool confir
21cd0 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 m;..
21ce0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 public bool Conf
21cf0 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 irm..
21d00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
21d10 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
21d20 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 confirm; }..
21d30 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
21d40 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c { confirm = val
21d50 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
21d60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
21d70 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 #endregion..
21d80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
21d90 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 #endregion....
21da0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
21db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
21df0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f .. #regio
21e00 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 n FrameworkList
21e10 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 Class.. p
21e20 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c rivate sealed cl
21e30 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 ass FrameworkLis
21e40 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 t.. {..
21e50 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f #regio
21e60 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 n Public Constru
21e70 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 ctors..
21e80 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77 public Framew
21e90 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 orkList()..
21ea0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
21eb0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 // do
21ec0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 nothing...
21ed0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
21ee0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
21ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21f40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
21f50 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 #region Public
21f60 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 Methods..
21f70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f private Mo
21f80 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
21f90 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 otKey;..
21fa0 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 public MockR
21fb0 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b egistryKey RootK
21fc0 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ey..
21fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
21fe0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 get { return
21ff0 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 rootKey; }..
22000 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
22010 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 { rootKey = valu
22020 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 e; }..
22030 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
22040 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
22050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22080 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
22090 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74 private St
220a0 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d ringList names;.
220b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
220c0 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 4e lic StringList N
220d0 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ames..
220e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
220f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 get { retur
22100 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 n names; }..
22110 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
22120 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b { names = value;
22130 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
22140 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
22150 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
22160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22190 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
221a0 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73 private Vers
221b0 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b ionMap versions;
221c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
221d0 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 blic VersionMap
221e0 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 Versions..
221f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
22200 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 get { r
22210 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 eturn versions;
22220 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
22230 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e set { version
22240 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 s = value; }..
22250 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
22260 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
22270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
222a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
222b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 .. pr
222c0 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 ivate StringList
222d0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d platformNames;.
222e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
222f0 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 50 lic StringList P
22300 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 latformNames..
22310 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 get
22330 20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66 6f { return platfo
22340 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 rmNames; }..
22350 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
22360 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 { platformNames
22370 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 = value; }..
22380 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
22390 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f #endregio
223a0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 n.. }..
223b0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
223c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
223d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
223e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
223f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22410 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ///.... #
22420 72 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c region VsList Cl
22430 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 ass.. pri
22440 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 vate sealed clas
22450 73 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 s VsList..
22460 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
22470 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 #region Public
22480 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 Constructors..
22490 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
224a0 20 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 VsList()..
224b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
224c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 // do
224d0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 nothing...
224e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
224f0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
22500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
22510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22550 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
22560 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 #region Public
22570 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 Properties..
22580 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
22590 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 MockRegistryKey
225a0 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 rootKey;..
225b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f public Mo
225c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f ckRegistryKey Ro
225d0 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 otKey..
225e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
225f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
22600 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 rn rootKey; }..
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
22620 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 et { rootKey = v
22630 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
22640 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
22650 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
22660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22690 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
226a0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
226b0 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 VersionList ver
226c0 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 sions;..
226d0 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 public Versi
226e0 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d onList Versions.
226f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22710 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 get { return ver
22720 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 sions; }..
22730 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 set {
22740 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 versions = value
22750 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
22760 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
22770 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 #endregion..
22780 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 }.. #
22790 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 endregion..
227a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
227b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
227c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
227d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
227e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
227f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
22810 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 ion Private Cons
22820 74 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20 20 tant Data..
22830 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 private const
22840 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 string CoreFile
22850 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 Name = "System.D
22860 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b ata.SQLite.dll";
22870 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 .. privat
22880 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c e const string L
22890 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 inqFileName = "S
228a0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit
228b0 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20 e.Linq.dll";..
228c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f private co
228d0 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73 69 67 nst string Desig
228e0 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 nerFileName = "S
228f0 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 QLite.Designer.d
22900 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 ll";.. pr
22910 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 ivate const stri
22920 6e 67 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 ng ProviderName
22930 3d 20 22 53 51 4c 69 74 65 20 44 61 74 61 20 50 = "SQLite Data P
22940 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20 20 20 rovider";..
22950 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 private const
22960 20 73 74 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e string ProjectN
22970 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 ame = "System.Da
22980 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 ta.SQLite";..
22990 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e private con
229a0 73 74 20 73 74 72 69 6e 67 20 4c 65 67 61 63 79 st string Legacy
229b0 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 ProjectName = "S
229c0 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 QLite";..
229d0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 private const s
229e0 74 72 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e tring InvariantN
229f0 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 ame = "System.Da
22a00 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 ta.SQLite";..
22a10 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e private con
22a20 73 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72 st string Factor
22a30 79 54 79 70 65 4e 61 6d 65 20 3d 20 22 53 79 73 yTypeName = "Sys
22a40 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite.
22a50 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b 0d SQLiteFactory";.
22a60 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 . private
22a70 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 const string De
22a80 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 2e 4e 45 scription = ".NE
22a90 54 20 46 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 T Framework Data
22aa0 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 Provider for SQ
22ab0 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 Lite";....
22ac0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
22ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
22b10 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e private con
22b20 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 32 49 st string CLRv2I
22b30 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 mageRuntimeVersi
22b40 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30 37 32 37 on = "v2.0.50727
22b50 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 ";.. priv
22b60 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 ate const string
22b70 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 CLRv4ImageRunti
22b80 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e meVersion = "v4.
22b90 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 0.30319";....
22ba0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
22bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
22bf0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
22c00 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d const string Nam
22c10 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20 eAndValueFormat
22c20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 = "{0}: {1}";..
22c30 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 private c
22c40 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46 onst string LogF
22c50 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f ileSuffix = ".lo
22c60 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f g";.... /
22c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22cb0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
22cc0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 private const
22cd0 73 74 72 69 6e 67 20 56 73 44 65 76 45 6e 76 53 string VsDevEnvS
22ce0 65 74 75 70 46 6f 72 6d 61 74 20 3d 20 22 7b 30 etupFormat = "{0
22cf0 7d 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20 }: {1}";....
22d00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
22d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
22d50 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 private c
22d60 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74 onst string Root
22d70 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77 KeyName = "Softw
22d80 61 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 are";.. p
22d90 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 rivate const str
22da0 69 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e ing Wow64SubKeyN
22db0 61 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f ame = "Wow6432No
22dc0 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 de";....
22dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22e10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
22e20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f //.. /
22e30 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 / NOTE: The .NET
22e40 20 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62 Framework has b
22e50 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 oth 32-bit and 6
22e60 34 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d 4-bit editions..
22e70 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 . //..
22e80 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
22e90 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f tic readonly boo
22ea0 6c 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e l NetFxIs32BitOn
22eb0 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 ly = false;....
22ec0 20 20 20 20 20 20 20 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 2f 2f 2f 2f ////////////////
22f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
22f10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 .. //..
22f20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 // NOTE: F
22f30 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53 or now, Visual S
22f40 74 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20 tudio is always
22f50 61 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61 a 32-bit applica
22f60 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f tion... /
22f70 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 /.. priva
22f80 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e te static readon
22f90 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69 ly bool VsIs32Bi
22fa0 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d tOnly = true;...
22fb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
22fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 .... priv
23010 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f ate static reado
23020 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46 nly string VsIdF
23030 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a ormat = "B";....
23040 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
23050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
23090 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 ... priva
230a0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e te static readon
230b0 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 ly string XPathF
230c0 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a orAddElement =..
230d0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e "con
230e0 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 figuration/syste
230f0 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 m.data/DbProvide
23100 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40 rFactories/add[@
23110 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c invariant=\"{0}\
23120 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 "]";....
23130 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 private static r
23140 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 eadonly string X
23150 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 PathForRemoveEle
23160 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 ment =..
23170 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 "configurati
23180 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 on/system.data/D
23190 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 bProviderFactori
231a0 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72 es/remove[@invar
231b0 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d iant=\"{0}\"]";.
231c0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 . #endreg
231d0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f ion.... /
231e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
231f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23220 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
23230 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 #region Privat
23240 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 e Static Data..
23250 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
23260 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74 tatic Assembly t
23270 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 hisAssembly = As
23280 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74 sembly.GetExecut
23290 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a ingAssembly();..
232a0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 .. privat
232b0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 e static string
232c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20 traceCategory =
232d0 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 Path.GetFileName
232e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 (.. t
232f0 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 hisAssembly.Loca
23300 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20 tion); /* NOTE:
23310 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61 Same for debug a
23320 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a nd trace. */....
23330 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
23340 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c static TraceCall
23350 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 back debugCallba
23360 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a ck = AppDebug;..
23370 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
23380 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c static TraceCall
23390 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 back traceCallba
233a0 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a ck = AppTrace;..
233b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f .. //////
233c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
233d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
233e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
233f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23400 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 /.... pri
23410 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 vate static stri
23420 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f ng systemDirecto
23430 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 ry = null;....#i
23440 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 f WINDOWS..
23450 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
23460 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44 c string systemD
23470 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20 irectoryWow64 =
23480 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d null;..#endif...
23490 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
234a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
234b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
234c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
234d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
234e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 .... priv
234f0 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 ate static int f
23500 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20 30 3b ilesCreated = 0;
23510 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 .. privat
23520 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c e static int fil
23530 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d esModified = 0;.
23540 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 . private
23550 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 static int file
23560 73 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20 sDeleted = 0;..
23570 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f #endregio
23580 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f n.... ///
23590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
235a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
235b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
235c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
235d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
235e0 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61 #region Trace Ha
235f0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 ndling..
23600 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 private static s
23610 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65 tring GetLogFile
23620 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 Name(..
23630 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 string typeNa
23640 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me..
23650 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 ) /* throw */..
23660 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
23670 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c string fil
23680 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 eName = Path.Get
23690 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d TempFileName();.
236a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str
236b0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 ing directory =
236c0 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72 Path.GetDirector
236d0 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b yName(fileName);
236e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
236f0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c ring fileNameOnl
23700 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 y = Path.GetFile
23710 4e 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e NameWithoutExten
23720 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d sion(fileName);.
23730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ... s
23740 74 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d tring newFileNam
23750 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 e = Path.Combine
23760 28 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69 (directory, Stri
23770 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
23780 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d "{0}
23790 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61 {1}{2}", traceCa
237a0 74 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e tegory, !String.
237b0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79 IsNullOrEmpty(ty
237c0 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 peName) ?..
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
237e0 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20 ." + typeName :
237f0 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e String.Empty, ".
23800 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 " + fileNameOnly
23810 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 +..
23820 20 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53 LogFileS
23830 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 uffix));....
23840 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 File.Mov
23850 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 e(fileName, newF
23860 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 ileName);....
23870 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
23880 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 newFileName;..
23890 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
238a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
238b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
238c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
238d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
238e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
238f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
23900 61 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62 atic void AppDeb
23910 75 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ug(..
23920 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c string message,
23930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
23940 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 ring category..
23950 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 )..
23960 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
23970 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 TraceOps.De
23980 62 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 bugCore(String.F
23990 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
239a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
239b0 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 .DebugFormat, Tr
239c0 61 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67 aceOps.NextDebug
239d0 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 Id(),..
239e0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e TraceOps.
239f0 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 TimeStamp(DateTi
23a00 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 me.UtcNow), mess
23a10 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b age), category);
23a20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }....
23a30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
23a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
23a80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 .. privat
23a90 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 e static void Ap
23aa0 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 pTrace(..
23ab0 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 string mess
23ac0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 age,..
23ad0 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 string categor
23ae0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 y.. )
23af0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 .. {..
23b00 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 TraceOp
23b10 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69 s.TraceCore(Stri
23b20 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
23b30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
23b40 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 eOps.TraceFormat
23b50 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54 , TraceOps.NextT
23b60 72 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20 raceId(),..
23b70 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
23b80 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 Ops.TimeStamp(Da
23b90 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 teTime.UtcNow),
23ba0 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f message), catego
23bb0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d ry);.. }.
23bc0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 . #endreg
23bd0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f ion.... /
23be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23c20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
23c30 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 #region Generi
23c40 63 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c c Platform Handl
23c50 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 ing.. pri
23c60 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c vate static bool
23c70 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 Is64BitProcess(
23c80 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 ).. {..
23c90 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
23ca0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 // NOT
23cb0 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 E: Returns true
23cc0 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 if the current p
23cd0 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74 rocess is 64-bit
23ce0 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 . If this..
23cf0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
23d00 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e is true, we *kn
23d10 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74 ow* that we must
23d20 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 be running on a
23d30 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 64-bit..
23d40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 // op
23d50 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61 erating system a
23d60 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72 s well. However
23d70 2c 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c , if this is fal
23d80 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20 se, we..
23d90 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20 // do
23da0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 not necessarily
23db0 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65 know that we are
23dc0 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32 running on a 32
23dd0 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 -bit..
23de0 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 // opera
23df0 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65 ting system, due
23e00 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32 to WoW64 (Win32
23e10 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e -on-Win64), etc.
23e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
23e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
23e40 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a turn (IntPtr.Siz
23e50 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67 e == sizeof(long
23e60 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69 )); // NOTE: Poi
23e70 6e 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f nter is 64-bits?
23e80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }....
23e90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
23ee0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 .. privat
23ef0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 e static bool Is
23f00 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 SupportedRootKey
23f10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d (.. M
23f20 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 ockRegistry regi
23f30 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 stry,..
23f40 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
23f50 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 ey rootKey..
23f60 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
23f70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
23f80 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e return Object.
23f90 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 ReferenceEquals(
23fa0 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 rootKey, registr
23fb0 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 7c y.CurrentUser) |
23fc0 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |..
23fd0 20 20 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 Object.Refere
23fe0 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 nceEquals(rootKe
23ff0 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 y, registry.Loca
24000 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20 20 20 20 lMachine);..
24010 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
24020 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
24030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24060 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
24070 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
24080 69 63 20 73 74 72 69 6e 67 20 47 65 74 52 6f 6f ic string GetRoo
24090 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 tKeyName(..
240a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 bool perU
240b0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ser,..
240c0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 bool wow64..
240d0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 )..
240e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
240f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
24100 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 41 // BUGFIX: A
24110 70 70 61 72 65 6e 74 6c 79 2c 20 74 68 65 20 70 pparently, the p
24120 65 72 2d 75 73 65 72 20 72 65 67 69 73 74 72 79 er-user registry
24130 20 68 69 76 65 20 64 6f 65 73 20 6e 6f 74 20 75 hive does not u
24140 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se..
24150 2f 2f 20 20 20 20 20 20 20 20 20 74 68 65 20 22 // the "
24160 57 6f 77 36 34 33 32 4e 6f 64 65 22 20 6e 6f 64 Wow6432Node" nod
24170 65 20 74 6f 20 73 74 6f 72 65 20 73 65 74 74 69 e to store setti
24180 6e 67 73 20 66 6f 72 20 33 32 2d 62 69 74 0d 0a ngs for 32-bit..
24190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
241a0 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 applicati
241b0 6f 6e 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 ons running on a
241c0 20 36 34 2d 62 69 74 20 6f 70 65 72 61 74 69 6e 64-bit operatin
241d0 67 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 g system...
241e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
241f0 20 20 54 69 63 6b 65 74 20 5b 61 30 36 37 37 33 Ticket [a06773
24200 30 39 66 30 5d 20 68 61 73 20 66 75 72 74 68 65 09f0] has furthe
24210 72 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20 r details...
24220 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
24230 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 return S
24240 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 tring.Format("{0
24250 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61 }{1}", RootKeyNa
24260 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me,..
24270 20 20 20 20 20 21 70 65 72 55 73 65 72 20 26 26 !perUser &&
24280 20 77 6f 77 36 34 20 26 26 20 49 73 36 34 42 69 wow64 && Is64Bi
24290 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 tProcess() ?..
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
242b0 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34 53 75 "\\" + Wow64Su
242c0 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72 69 6e bKeyName : Strin
242d0 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 g.Empty);..
242e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
242f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24330 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
24340 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
24350 63 20 73 74 72 69 6e 67 20 47 65 74 53 79 73 74 c string GetSyst
24360 65 6d 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 emDirectory(..
24370 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 bool w
24380 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 ow64..
24390 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a ).. {..
243a0 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 #if WINDOWS..
243b0 20 20 20 20 20 20 20 20 20 69 66 20 28 77 6f 77 if (wow
243c0 36 34 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 64)..
243d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
243e0 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69 if (systemDi
243f0 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 3d 20 rectoryWow64 ==
24400 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
24410 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79 sy
24430 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 stemDirectoryWow
24440 36 34 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 64 =..
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e Un
24460 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod
24470 73 2e 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 s.GetSystemDirec
24480 74 6f 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 tory();..
24490 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
244b0 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63 turn systemDirec
244c0 74 6f 72 79 57 6f 77 36 34 3b 0d 0a 20 20 20 20 toryWow64;..
244d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
244e0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e else..#en
244f0 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 dif..
24500 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
24510 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69 if (systemDi
24520 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 rectory == null)
24530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
24540 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65 systemDire
24550 63 74 6f 72 79 20 3d 20 45 6e 76 69 72 6f 6e 6d ctory = Environm
24560 65 6e 74 2e 53 79 73 74 65 6d 44 69 72 65 63 74 ent.SystemDirect
24570 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ory;....
24580 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 return s
24590 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d ystemDirectory;.
245a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
245b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
245c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
245d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
245e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
245f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
24630 69 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69 ion Generic Stri
24640 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 ng Handling..
24650 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
24660 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69 tic string ForDi
24670 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 splay(..
24680 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 object value
24690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d .. ).
246a0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
246b0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 if (valu
246c0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 e == null)..
246d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
246e0 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a rn "<null>";....
246f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
24700 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 ng result;..
24710 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 Type typ
24720 65 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70 e = value.GetTyp
24730 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 e();....
24740 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 if (type ==
24750 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e typeof(XmlElemen
24760 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t))..
24770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
24780 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 XmlElement e
24790 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 lement = (XmlEle
247a0 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 ment)value;....
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
247c0 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e esult = element.
247d0 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 OuterXml;..
247e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
247f0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 else if (t
24800 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 ype == typeof(Ve
24810 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 rsion))..
24820 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
24830 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 Version
24840 76 65 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 version = (Versi
24850 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 on)value;....
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 res
24870 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 ult = String.For
24880 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 mat("v{0}", vers
24890 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 ion);..
248a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
248b0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 else..
248c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
248d0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 result =
248e0 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 value.ToString()
248f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
24900 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e if (result.
24910 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 Length == 0)..
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24930 20 20 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 return "<empty
24940 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 >";....
24950 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 result =
24960 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24980 20 20 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c type.IsSubcl
24990 61 73 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c assOf(typeof(Val
249a0 75 65 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22 ueType)) ? "{0}"
249b0 20 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 : "\"{0}\"",..
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
249d0 20 20 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 result);..
249e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
249f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
24a00 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 result;..
24a10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e }.. #en
24a20 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 dregion....
24a30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
24a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
24a80 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 #region As
24a90 73 65 6d 62 6c 79 20 41 74 74 72 69 62 75 74 65 sembly Attribute
24aa0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 Handling..
24ab0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 public static
24ac0 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d string GetAssem
24ad0 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e blyConfiguration
24ae0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 (.. A
24af0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 ssembly assembly
24b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d .. ).
24b10 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
24b20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 if (asse
24b30 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 mbly != null)..
24b40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
24b60 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y..
24b70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
24b80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 if (as
24b90 73 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 sembly.IsDefined
24ba0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
24bc0 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f ypeof(AssemblyCo
24bd0 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 nfigurationAttri
24be0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a bute), false))..
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24c00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 A
24c20 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 ssemblyConfigura
24c30 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 63 6f tionAttribute co
24c40 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 nfiguration =..
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24c60 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65 (Asse
24c70 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f mblyConfiguratio
24c80 6e 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 nAttribute)..
24c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24ca0 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c assembl
24cb0 79 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 y.GetCustomAttri
24cc0 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 butes(..
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24ce0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 typeof(A
24cf0 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 ssemblyConfigura
24d00 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 0d tionAttribute),.
24d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
24d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24d30 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 false)[0];....
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24d50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f return co
24d60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 nfiguration.Conf
24d70 69 67 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 iguration;..
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24d90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
24da0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
24db0 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 catch..
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24de0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e // do nothin
24df0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g...
24e00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
24e10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
24e20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b return null;
24e30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }....
24e40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
24e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a //////////////..
24e90 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 .. public
24ea0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 static string G
24eb0 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 etAssemblyTitle(
24ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 .. As
24ed0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d sembly assembly.
24ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a . )..
24ef0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
24f00 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d if (assem
24f10 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 bly != null)..
24f20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try
24f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
24f50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
24f60 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 if (ass
24f70 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 embly.IsDefined(
24f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 ty
24fa0 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 peof(AssemblyTit
24fb0 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 leAttribute), fa
24fc0 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 lse))..
24fd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
24fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24ff0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69 AssemblyTi
25000 74 6c 65 41 74 74 72 69 62 75 74 65 20 74 69 74 tleAttribute tit
25010 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 le =..
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25030 20 20 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 (AssemblyTitle
25040 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 Attribute)..
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25060 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 assembly
25070 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 .GetCustomAttrib
25080 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 utes(..
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
250a0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 typeof(As
250b0 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 semblyTitleAttri
250c0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d bute), false)[0]
250d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
250f0 75 72 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b urn title.Title;
25100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
25110 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
25120 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
25130 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 catc
25140 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 h..
25150 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
25160 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 // do
25170 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 nothing...
25180 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
25190 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
251a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
251b0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 null;..
251c0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 }.. #endr
251d0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
251e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
251f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25220 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
25230 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 #region .NET
25240 20 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c Framework Handl
25250 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 ing.. pri
25260 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 vate static stri
25270 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 ng GetFrameworkR
25280 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 ootKeyName(..
25290 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 bool pe
252a0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 rUser,..
252b0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a bool wow64..
252c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
252d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
252e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 return Str
252f0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c ing.Format("{0}\
25300 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 \Microsoft\\.NET
25310 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 Framework",..
25320 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 Get
25330 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 RootKeyName(perU
25340 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20 ser, wow64));..
25350 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
25360 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
25370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
253a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
253b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
253c0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 tatic string Get
253d0 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 FrameworkKeyName
253e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 (.. s
253f0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e tring frameworkN
25400 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
25410 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 Version framew
25420 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 orkVersion,..
25430 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
25440 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 platformName,..
25450 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
25460 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 perUser,..
25470 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 bool wow64
25480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d .. ).
25490 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
254a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 string f
254b0 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e ormat = !String.
254c0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c IsNullOrEmpty(pl
254d0 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 atformName) ?..
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
254f0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c {0}\\Microsoft\\
25500 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 {1}\\v{2}\\{3}"
25510 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 :..
25520 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f "{0}\\Microso
25530 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d ft\\{1}\\v{2}";.
25540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 ... r
25550 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 eturn String.For
25560 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 mat(format, GetR
25570 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 ootKeyName(perUs
25580 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 er, wow64),..
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 fra
255a0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d meworkName, fram
255b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c eworkVersion, pl
255c0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 atformName);..
255d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
255e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
255f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
25630 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
25640 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 49 atic string GetI
25650 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 mageRuntimeVersi
25660 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on(..
25670 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 string fileName
25680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d .. ).
25690 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
256a0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 try..
256b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
256c0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 Asse
256d0 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d mbly assembly =.
256e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
256f0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 2e 52 65 Assembly.Re
25700 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 flectionOnlyLoad
25710 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20 From(fileName);
25720 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 /* throw */....
25730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
25740 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e f (assembly != n
25750 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
25760 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
25770 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 assembly.ImageR
25780 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a untimeVersion;..
25790 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
257a0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 catch
257b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
257c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
257d0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d // do nothing..
257e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
257f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
25800 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 turn null;..
25810 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
25820 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
25830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25860 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
25870 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
25880 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 ic string GetFra
25890 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 meworkDirectory(
258a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f .. Mo
258b0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
258c0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 otKey,..
258d0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d Version fram
258e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 eworkVersion,..
258f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
25900 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 perUser,..
25910 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 bool wow64
25920 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 ,.. b
25930 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 ool whatIf,..
25940 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 bool ve
25950 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 rbose..
25960 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d ).. {.
25970 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 . usi
25980 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 ng (MockRegistry
25990 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 Key key = Regist
259a0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 ryHelper.OpenSub
259b0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 Key(..
259c0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 rootKe
259d0 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 y, GetFrameworkR
259e0 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 ootKeyName(perUs
259f0 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 er, wow64),..
25a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25a10 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 false, whatIf,
25a20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 verbose))..
25a30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
25a40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 if (ke
25a50 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 y == null)..
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25a70 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a return null;....
25a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25a90 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 object value = R
25aa0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 egistryHelper.Ge
25ab0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 tValue(..
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 key
25ad0 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c , "InstallRoot",
25ae0 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 null, whatIf, v
25af0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 erbose);....
25b00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
25b10 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e !(value is strin
25b20 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 g))..
25b30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
25b40 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 null;....
25b50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
25b60 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 Path.Combine(..
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25b80 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 (string)value
25b90 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
25ba0 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72 "v{0}", framewor
25bb0 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 kVersion));..
25bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
25bd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 }.. #
25be0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 endregion....
25bf0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
25c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
25c40 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 #region
25c50 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c Per-Framework/Pl
25c60 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d atform Handling.
25c70 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 . private
25c80 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 static void Ini
25c90 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b tializeFramework
25ca0 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 List(..
25cb0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
25cc0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 ey rootKey,..
25cd0 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 Configu
25ce0 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 ration configura
25cf0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 tion,..
25d00 20 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b ref Framework
25d10 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 List frameworkLi
25d20 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 st..
25d30 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 ).. {..
25d40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 if (fr
25d50 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e ameworkList == n
25d60 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
25d70 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c frameworkL
25d80 69 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77 ist = new Framew
25d90 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 orkList();....
25da0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 if (fr
25db0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 ameworkList.Root
25dc0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 Key == null)..
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 fr
25de0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 ameworkList.Root
25df0 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a Key = rootKey;..
25e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
25e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25e50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
25e60 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 if (frameworkLi
25e70 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c st.Names == null
25e80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
25e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
25ea0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e frameworkList.
25eb0 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69 Names = new Stri
25ec0 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 ngList();....
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
25ee0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 ((configuration
25ef0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e == null) || !con
25f00 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 figuration.NoDes
25f10 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 ktop)..
25f20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 frame
25f30 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 workList.Names.A
25f40 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 dd(".NETFramewor
25f50 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 k");....
25f60 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e if ((con
25f70 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 figuration == nu
25f80 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 ll) || !configur
25f90 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 ation.NoCompact)
25fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
25fb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
25fc0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f framewo
25fd0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 rkList.Names.Add
25fe0 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 (".NETCompactFra
25ff0 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 mework");..
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f
26010 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d rameworkList.Nam
26020 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 es.Add(".NETComp
26030 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d actFramework");.
26040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
26050 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 frameworkLi
26060 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e st.Names.Add(".N
26070 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f ETCompactFramewo
26080 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 rk");..
26090 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
260a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
260b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
260c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
260d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
260e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
260f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
26100 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 if (fr
26110 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 ameworkList.Vers
26120 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 ions == null)..
26130 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 fr
26150 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 ameworkList.Vers
26160 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 ions = new Versi
26170 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 onMap();....
26180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
26190 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d (configuration =
261a0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 = null) || !conf
261b0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b iguration.NoDesk
261c0 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 top)..
261d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 Ver
261f0 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70 sionList desktop
26200 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 VersionList = ne
26210 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b w VersionList();
26220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
26230 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e if ((con
26240 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 figuration == nu
26250 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 ll) || !configur
26260 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 ation.NoNetFx20)
26270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
26280 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f deskto
26290 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 pVersionList.Add
262a0 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 (new Version(2,
262b0 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 0, 50727));....
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
262d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
262e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f // NO
262f0 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 TE: The .NET Fra
26300 6d 65 77 6f 72 6b 20 33 2e 35 20 64 6f 65 73 20 mework 3.5 does
26310 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e not have its own
26320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
26330 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 // d
26340 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 irectory; howeve
26350 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 r, it still may
26360 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 have assembly..
26370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26380 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 // fold
26390 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 ers for use in V
263a0 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 isual Studio, et
263b0 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 c...
263c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
263d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
263e0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 if ((configurati
263f0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 on == null) || !
26400 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f configuration.No
26410 4e 65 74 46 78 33 35 29 0d 0a 20 20 20 20 20 20 NetFx35)..
26420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26430 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e desktopVersion
26440 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 List.Add(new Ver
26450 73 69 6f 6e 28 33 2c 20 35 29 29 3b 0d 0a 0d 0a sion(3, 5));....
26460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26470 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 if ((configu
26480 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 ration == null)
26490 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f || !configuratio
264a0 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20 n.NoNetFx40)..
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
264c0 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 desktopVer
264d0 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 sionList.Add(new
264e0 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 Version(4, 0, 3
264f0 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 0319));....
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
26510 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
26520 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 // NOTE:
26530 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f The .NET Framewo
26540 72 6b 20 34 2e 35 20 64 6f 65 73 20 6e 6f 74 20 rk 4.5 does not
26550 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 have its own..
26560 20 20 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 64 69 72 65 63 // direc
26580 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 tory; however, i
26590 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 t still may have
265a0 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 assembly..
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
265c0 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20 / folders
265d0 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61 for use in Visua
265e0 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a l Studio, etc...
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26600 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
26610 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
26620 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d (configuration =
26630 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 = null) || !conf
26640 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 iguration.NoNetF
26650 78 34 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 x45)..
26660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
26670 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 sktopVersionList
26680 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e .Add(new Version
26690 28 34 2c 20 35 2c 20 35 30 37 30 39 29 29 3b 0d (4, 5, 50709));.
266a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
266b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
266d0 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 / NOTE: The .NET
266e0 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e 31 Framework 4.5.1
266f0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 does not have i
26700 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 ts own..
26710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
26720 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 directory;
26730 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c however, it stil
26740 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d l may have assem
26750 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 bly..
26760 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
26770 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 folders for us
26780 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 e in Visual Stud
26790 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 io, etc...
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
267b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
267c0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 if ((confi
267d0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c guration == null
267e0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 ) || !configurat
267f0 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 31 29 0d ion.NoNetFx451).
26800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
26810 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 desktop
26820 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 VersionList.Add(
26830 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 new Version(4, 5
26840 2c 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 , 1));....
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 fr
26860 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 ameworkList.Vers
26870 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 ions.Add(".NETFr
26880 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 amework",..
26890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
268a0 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f desktopVersio
268b0 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 nList);..
268c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
268e0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ((configuration
268f0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f == null) || !co
26900 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f nfiguration.NoCo
26910 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 mpact)..
26920 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
26930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f
26940 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 rameworkList.Ver
26950 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43 sions.Add(".NETC
26960 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 ompactFramework"
26970 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
26980 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 new V
26990 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 ersionList(new V
269a0 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 ersion[] {..
269b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
269c0 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 new Version(
269d0 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77 2, 0, 0, 0), new
269e0 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30 Version(3, 5, 0
269f0 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 , 0)..
26a00 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a }));..
26a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26a20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
26a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
26a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26a80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
26a90 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b if (framework
26aa0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d List.PlatformNam
26ab0 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 es == null)..
26ac0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d fram
26ae0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f eworkList.Platfo
26af0 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 rmNames = new St
26b00 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 ringList();....
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
26b20 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f f ((configuratio
26b30 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 n == null) || !c
26b40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 onfiguration.NoD
26b50 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 esktop)..
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 fra
26b70 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 meworkList.Platf
26b80 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c ormNames.Add(nul
26b90 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 l);....
26ba0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 if ((conf
26bb0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c iguration == nul
26bc0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 l) || !configura
26bd0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d tion.NoCompact).
26be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
26bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
26c00 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 framewor
26c10 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 kList.PlatformNa
26c20 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50 mes.Add("PocketP
26c30 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 C");..
26c40 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 framew
26c50 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d orkList.Platform
26c60 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74 Names.Add("Smart
26c70 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20 phone");..
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 fr
26c90 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 ameworkList.Plat
26ca0 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57 formNames.Add("W
26cb0 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20 indowsCE");..
26cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
26ce0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
26cf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
26d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
26d40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
26d50 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 tatic bool HaveF
26d60 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 rameworkDirector
26d70 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
26d80 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
26d90 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 rootKey,..
26da0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 string fra
26db0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 meworkName,..
26dc0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e Version
26dd0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f frameworkVersio
26de0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n,..
26df0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e string platformN
26e00 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
26e10 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d bool perUser,.
26e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f . boo
26e30 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 l wow64,..
26e40 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
26e50 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
26e60 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 bool verbose,..
26e70 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 ref s
26e80 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 tring installDir
26e90 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory..
26ea0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b ).. {
26eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
26ec0 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 ring keyName = G
26ed0 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 etFrameworkKeyNa
26ee0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me(..
26ef0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 frameworkNa
26f00 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 me, frameworkVer
26f10 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 sion, platformNa
26f20 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 me, perUser,..
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f wo
26f40 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 w64);....
26f50 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b using (Mock
26f60 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 RegistryKey key
26f70 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 = RegistryHelper
26f80 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 .OpenSubKey(..
26f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26fa0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 rootKey, keyNa
26fb0 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 me, false, whatI
26fc0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 f, verbose))..
26fd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
26fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
26ff0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 (key == null)..
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27010 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
27020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
27030 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d if (platform
27040 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f Name != null) //
27050 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d NOTE: Skip non-
27060 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 desktop...
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
27080 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 turn true;....
27090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
270a0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d ring directory =
270b0 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 GetFrameworkDir
270c0 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 ectory(..
270d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f roo
270e0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 tKey, frameworkV
270f0 65 72 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c ersion, perUser,
27100 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d wow64, whatIf,.
27110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
27120 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a verbose);..
27130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
27140 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e if (String.IsN
27150 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 ullOrEmpty(direc
27160 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 tory))..
27170 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
27180 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 rn false;....
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
271a0 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 (!Directory.Exis
271b0 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a ts(directory))..
271c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
271d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
271e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
271f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 TraceOps.De
27200 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 bugAndTrace(Trac
27210 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c ePriority.Lower,
27220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
27230 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 debugCallb
27240 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 ack, traceCallba
27250 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
27260 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
27270 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 ".NET Fr
27280 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e amework {0} foun
27290 64 20 76 69 61 20 64 69 72 65 63 74 6f 72 79 20 d via directory
272a0 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 {1}.",..
272b0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
272c0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b isplay(framework
272d0 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 Version), ForDis
272e0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 play(directory))
272f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
27300 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 traceCate
27310 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 gory);....
27320 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c instal
27330 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 lDirectory = dir
27340 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 ectory;..
27350 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
27360 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 true;..
27370 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }.
27380 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
27390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
273a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
273b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
273c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
273d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 //.... pr
273e0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f ivate static boo
273f0 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 l HaveFrameworkR
27400 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 egistry(..
27410 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 MockRegist
27420 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a ryKey rootKey,..
27430 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
27440 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 ng frameworkName
27450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 ,.. V
27460 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b ersion framework
27470 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 Version,..
27480 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 string pla
27490 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 tformName,..
274a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 bool per
274b0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 User,..
274c0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a bool wow64,..
274d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
274e0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
274f0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f bool verbo
27500 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se..
27510 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 ).. {..
27520 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
27530 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 keyName = GetFr
27540 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d ameworkKeyName(.
27550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
27560 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 frameworkName,
27570 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e frameworkVersion
27580 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 , platformName,
27590 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 perUser,..
275a0 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 wow64)
275b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
275c0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 using (MockRegi
275d0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 stryKey key = Re
275e0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 gistryHelper.Ope
275f0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 nSubKey(..
27600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f ro
27610 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 otKey, keyName,
27620 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 false, whatIf, v
27630 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 erbose))..
27640 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
27650 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 if (key
27660 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
27680 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a eturn false;....
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
276a0 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 if (platformName
276b0 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 != null) // NOT
276c0 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b E: Skip non-desk
276d0 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 top...
276e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
276f0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 true;....
27700 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f TraceO
27710 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 ps.DebugAndTrace
27720 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c (TracePriority.L
27730 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 ower,..
27740 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 debug
27750 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 Callback, traceC
27760 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
27770 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
27780 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e ".N
27790 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d ET Framework {0}
277a0 20 66 6f 75 6e 64 20 76 69 61 20 72 65 67 69 73 found via regis
277b0 74 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 try {1}.",..
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
277d0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 ForDisplay(frame
277e0 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f workVersion), Fo
277f0 72 44 69 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65 rDisplay(keyName
27800 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )),..
27810 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
27820 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 tegory);....
27830 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
27840 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 rn true;..
27850 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
27860 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f }.... //
27870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
27880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
27890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
278a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
278b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
278c0 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 [MethodImpl(Met
278d0 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e hodImplOptions.N
278e0 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 oInlining)]..
278f0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
27900 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 tic bool ForEach
27910 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 FrameworkConfig(
27920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f .. Mo
27930 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 ckRegistry regis
27940 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 try,..
27950 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 FrameworkList
27960 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a frameworkList,..
27970 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d Fram
27980 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 eworkConfigCallb
27990 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 ack callback,..
279a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
279b0 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f g version, /* NO
279c0 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f TE: Optional. */
279d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
279e0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d ring invariant,.
279f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str
27a00 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 ing name,..
27a10 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 string de
27a20 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 scription,..
27a30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 string t
27a40 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 ypeName,..
27a50 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 AssemblyNa
27a60 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c me assemblyName,
27a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob
27a80 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c ject clientData,
27a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
27aa0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 ol perUser,..
27ab0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f bool wo
27ac0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 w64,..
27ad0 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 bool throwOnMi
27ae0 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 ssing,..
27af0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c bool whatIf,
27b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
27b10 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 ol verbose,..
27b20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f ref boo
27b30 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 l saved,..
27b40 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 ref string
27b50 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 error..
27b60 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b ).. {
27b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
27b80 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 (registry == nu
27b90 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
27ba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
27bb0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 error = "inv
27bc0 61 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d alid registry";.
27bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
27be0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
27bf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
27c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
27c10 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d (frameworkList =
27c20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
27c30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
27c40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
27c50 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f "invalid framewo
27c60 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 rk list";..
27c70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
27c80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
27c90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
27ca0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 MockRegis
27cb0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d tryKey rootKey =
27cc0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 frameworkList.R
27cd0 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 ootKey;....
27ce0 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b if (rootK
27cf0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ey == null)..
27d00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
27d10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
27d20 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f r = "invalid roo
27d30 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 t key";..
27d40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
27d50 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 false;..
27d60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
27d70 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70 if (!IsSupp
27d80 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 ortedRootKey(reg
27d90 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 istry, rootKey))
27da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
27db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
27dc0 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b error = "root k
27dd0 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 ey must be per-u
27de0 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 ser or per-machi
27df0 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ne";..
27e00 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
27e10 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se;..
27e20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
27e30 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c if (frameworkL
27e40 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c ist.Names == nul
27e50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
27e60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
27e70 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 error = "no f
27e80 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 ramework names f
27e90 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 ound";..
27ea0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
27eb0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alse;..
27ec0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
27ed0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 if (framewor
27ee0 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d kList.Versions =
27ef0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
27f00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
27f10 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
27f20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 "no framework ve
27f30 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a rsions found";..
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27f50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 return false;..
27f60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
27f70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
27f80 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c frameworkList.Pl
27f90 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e atformNames == n
27fa0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
27fb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
27fc0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f error = "no
27fd0 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 platform names
27fe0 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 found";..
27ff0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
28000 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 false;..
28010 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
28020 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f if (framewo
28030 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 rkList.Names.Cou
28040 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c nt != frameworkL
28050 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 ist.PlatformName
28060 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 s.Count)..
28070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
28080 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
28090 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 String.Format("
280a0 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 framework name c
280b0 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f ount {0} does no
280c0 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 t " +..
280d0 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 "matc
280e0 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 h platform name
280f0 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d count {1}", fram
28100 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e eworkList.Names.
28110 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 Count,..
28120 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d fram
28130 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f eworkList.Platfo
28140 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d rmNames.Count);.
28150 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
28160 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
28170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
28180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 ... f
28190 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 or (int index =
281a0 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 0; index < frame
281b0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 workList.Names.C
281c0 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a ount; index++)..
281d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
281e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
281f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
28200 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 // NOTE: Grab
28210 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 the name of the
28220 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e framework (e.g.
28230 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 ".NETFramework"
28240 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
28250 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 // and
28260 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 the name of the
28270 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 platform (e.g. "
28280 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 WindowsCE")...
28290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
282a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
282b0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f string framewo
282c0 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f rkName = framewo
282d0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 rkList.Names[ind
282e0 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ex];..
282f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 string pla
28300 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d tformName = fram
28310 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f eworkList.Platfo
28320 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d rmNames[index];.
28330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
28340 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
28350 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 // NOTE:
28360 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 Skip all non-des
28370 6b 74 6f 70 20 66 72 61 6d 65 77 6f 72 6b 73 20 ktop frameworks
28380 28 69 2e 65 2e 20 69 66 20 74 68 65 20 70 6c 61 (i.e. if the pla
28390 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 tform..
283a0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
283b0 6e 61 6d 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c name is not null
283c0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )...
283d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
283e0 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 if (plat
283f0 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c formName != null
28400 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
28410 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b continue;
28420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
28430 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
28440 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a // NOTE:
28450 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 Grab the suppor
28460 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 ted versions of
28470 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d this particular.
28480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28490 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 // framew
284a0 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ork...
284b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
284c0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f Versio
284d0 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 nList frameworkV
284e0 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 ersionList;....
284f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
28500 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 f (version != nu
28510 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
28520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
28530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28550 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e // NOTE: Man
28560 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20 ual override of
28570 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 the *ONE* framew
28580 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 ork version..
28590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
285a0 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f // to pro
285b0 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 cess...
285c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
285e0 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 frameworkVers
285f0 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 ionList = new Ve
28600 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 rsionList();..
28610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28620 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 frameworkVersi
28630 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 onList.Add(new V
28640 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 ersion(version))
28650 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
28660 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
28670 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 else..
28680 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
28690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
286a0 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 if (!framewor
286b0 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 kList.Versions.T
286c0 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 ryGetValue(..
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
286e0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f framewo
286f0 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d rkName, out fram
28700 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 eworkVersionList
28710 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 ) ||..
28720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 (f
28730 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c rameworkVersionL
28740 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 ist == null))..
28750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28760 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
28770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
28780 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 ntinue;..
28790 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
287a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
287b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
287c0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 foreach (Ve
287d0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 rsion frameworkV
287e0 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 ersion in framew
287f0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d orkVersionList).
28800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
28820 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
28830 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 .DebugAndTrace(T
28840 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 racePriority.Low
28850 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er,..
28860 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 deb
28870 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 ugCallback, trac
28880 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
28890 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
288b0 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d "frameworkNam
288c0 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f e = {0}, framewo
288d0 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c rkVersion = {1},
288e0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 " +..
288f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70 "p
28900 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 latformName = {2
28910 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 }", ForDisplay(f
28920 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a rameworkName),..
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28940 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
28950 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 ay(frameworkVers
28960 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 ion),..
28970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
28980 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f orDisplay(platfo
28990 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 rmName)), traceC
289a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
289b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
289c0 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 string installD
289d0 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b irectory = null;
289e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
289f0 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76 if (!Hav
28a00 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 eFrameworkDirect
28a10 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ory(..
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28a30 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 rootKey, frame
28a40 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 workName, framew
28a50 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 orkVersion,..
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28a70 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 platfor
28a80 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 mName, perUser,
28a90 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 wow64, whatIf, v
28aa0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 erbose,..
28ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28ac0 20 20 20 20 20 72 65 66 20 69 6e 73 74 61 6c 6c ref install
28ad0 44 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 Directory))..
28ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
28b00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
28b10 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 eOps.DebugAndTra
28b20 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 ce(TracePriority
28b30 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 .Low,..
28b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28b50 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b debugCallback
28b60 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c , traceCallback,
28b70 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
28b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28b90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e ".N
28ba0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d ET Framework {0}
28bb0 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74 20 66 directory not f
28bc0 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 ound, " +..
28bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28be0 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 "skipping
28bf0 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 ...", ForDisplay
28c00 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f (frameworkVersio
28c10 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 n)),..
28c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28c30 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
28c40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
28c60 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 tinue;..
28c70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
28c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28c90 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 if (callbac
28ca0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 k == null)..
28cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28cc0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d continue;...
28cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28ce0 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 string dire
28cf0 63 74 6f 72 79 20 3d 20 69 6e 73 74 61 6c 6c 44 ctory = installD
28d00 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 irectory;....
28d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28d20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 if (String.IsNu
28d30 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 llOrEmpty(direct
28d40 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ory))..
28d50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28d70 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 TraceOps.D
28d80 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 ebugAndTrace(Tra
28d90 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d cePriority.Low,.
28da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28db0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 deb
28dc0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 ugCallback, trac
28dd0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
28de0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
28df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28e00 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 ".NET Fra
28e10 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 mework {0} direc
28e20 74 6f 72 79 20 69 73 20 69 6e 76 61 6c 69 64 2c tory is invalid,
28e30 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 " +..
28e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28e50 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c "skipping...",
28e60 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d ForDisplay(fram
28e70 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d eworkVersion)),.
28e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28e90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
28ea0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a ceCategory);....
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28ec0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 continue
28ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
28ee0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28f00 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 directory = Path
28f10 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f .Combine(directo
28f20 72 79 2c 20 22 43 6f 6e 66 69 67 22 29 3b 0d 0a ry, "Config");..
28f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
28f40 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63 if (!Direc
28f50 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 tory.Exists(dire
28f60 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 ctory))..
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28f90 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
28fa0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 .DebugAndTrace(T
28fb0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 racePriority.Low
28fc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
28fe0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 ebugCallback, tr
28ff0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 aceCallback, Str
29000 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29020 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 ".NET F
29030 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 ramework {0} dir
29040 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f 65 73 20 ectory {1} does
29050 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 not " +..
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29070 20 20 20 20 20 22 65 78 69 73 74 2c 20 73 6b 69 "exist, ski
29080 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 pping...", ForDi
29090 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 splay(frameworkV
290a0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 ersion),..
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
290c0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
290d0 28 64 69 72 65 63 74 6f 72 79 29 29 2c 20 74 72 (directory)), tr
290e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
290f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
29100 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 continu
29110 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
29120 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
29130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29140 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 string fileName
29150 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 = Path.Combine(
29160 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 61 63 68 directory, "mach
29170 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d ine.config");...
29180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
29190 20 20 20 20 20 69 66 20 28 21 46 69 6c 65 2e 45 if (!File.E
291a0 78 69 73 74 73 28 66 69 6c 65 4e 61 6d 65 29 29 xists(fileName))
291b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
291c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
291e0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
291f0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 ndTrace(TracePri
29200 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 ority.Low,..
29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29220 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c debugCal
29230 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c lback, traceCall
29240 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
29250 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29270 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 ".NET Framewor
29280 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64 k {0} file {1} d
29290 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22 oes not exist, "
292a0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 +..
292b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
292c0 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 "skipping...", F
292d0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 orDisplay(framew
292e0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 orkVersion),..
292f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29300 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 ForDis
29310 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c play(fileName)),
29320 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
29330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
29340 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 cont
29350 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 inue;..
29360 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29380 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61 bool localSa
29390 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a ved = false;....
293a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
293b0 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 if (!callbac
293c0 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 k(..
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
293e0 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 fileName, invari
293f0 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 ant, name, descr
29400 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 iption, typeName
29410 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
29430 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 69 6e 73 ssemblyName, ins
29440 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c 20 63 tallDirectory, c
29450 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 lientData,..
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29470 20 20 20 20 20 20 20 20 70 65 72 55 73 65 72 2c perUser,
29480 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d wow64, throwOnM
29490 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 issing, whatIf,
294a0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 verbose,..
294b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
294c0 20 20 20 20 20 20 72 65 66 20 6c 6f 63 61 6c 53 ref localS
294d0 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 aved, ref error)
294e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
294f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29510 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
29520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
29530 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
29540 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 else
29550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
29560 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
29570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29580 20 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 if (localSaved
29590 26 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 && !saved)..
295a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
295b0 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 saved =
295c0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 true;....
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
295e0 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 if (verbose)..
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29600 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
29610 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 Ops.DebugAndTrac
29620 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e e(TracePriority.
29630 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 Lowest,..
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29650 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 debugCa
29660 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c llback, traceCal
29670 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f lback, String.Fo
29680 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
296a0 20 20 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 "localSav
296b0 65 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 ed = {0}, saved
296c0 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 = {1}",..
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
296e0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
296f0 6c 61 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c lay(localSaved),
29700 20 46 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65 ForDisplay(save
29710 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 d)),..
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29730 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
29740 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 ory);..
29750 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
29760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
29770 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
29780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
29790 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 turn true;..
297a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
297b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
297c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
297d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
297e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
297f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
29800 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 [MethodImpl(
29810 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e MethodImplOption
29820 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a s.NoInlining)]..
29830 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
29840 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 static bool ForE
29850 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 achFrameworkRegi
29860 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 stry(..
29870 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 MockRegistry
29880 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 registry,..
29890 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b Framework
298a0 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 List frameworkLi
298b0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 st,..
298c0 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 FrameworkRegist
298d0 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 ryCallback callb
298e0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ack,..
298f0 20 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e string version
29900 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f , /* NOTE: Optio
29910 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 nal. */..
29920 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 object clie
29930 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 ntData,..
29940 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 bool perUse
29950 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 r,..
29960 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 bool wow64,..
29970 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 bool th
29980 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 rowOnMissing,..
29990 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
299a0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 whatIf,..
299b0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 bool verbos
299c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
299d0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 ref string error
299e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d .. ).
299f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
29a00 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 if (regi
29a10 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 stry == null)..
29a20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
29a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
29a40 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 ror = "invalid r
29a50 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 egistry";..
29a60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
29a70 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
29a80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
29a90 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 if (frame
29aa0 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c workList == null
29ab0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
29ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
29ad0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c error = "inval
29ae0 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 id framework lis
29af0 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t";..
29b00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
29b10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
29b20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
29b30 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 MockRegistryKey
29b40 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 rootKey = frame
29b50 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 workList.RootKey
29b60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
29b70 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 if (rootKey ==
29b80 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
29b90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
29ba0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 error = "i
29bb0 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 nvalid root key"
29bc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
29bd0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
29be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
29bf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
29c00 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 f (!IsSupportedR
29c10 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c ootKey(registry,
29c20 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 rootKey))..
29c30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
29c40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
29c50 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 = "root key mus
29c60 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 t be per-user or
29c70 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a per-machine";..
29c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29c90 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 return false;..
29ca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
29cc0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 frameworkList.Na
29cd0 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 mes == null)..
29ce0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
29d00 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f or = "no framewo
29d10 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b rk names found";
29d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
29d30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
29d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
29d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
29d60 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e (frameworkList.
29d70 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c Versions == null
29d80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
29d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
29da0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 error = "no fr
29db0 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 amework versions
29dc0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 found";..
29dd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
29de0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
29df0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
29e00 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 if (framew
29e10 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d orkList.Platform
29e20 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a Names == null)..
29e30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
29e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
29e50 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 rror = "no platf
29e60 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 orm names found"
29e70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
29e80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
29e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
29ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
29eb0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 f (frameworkList
29ec0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 .Names.Count !=
29ed0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c frameworkList.Pl
29ee0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e atformNames.Coun
29ef0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t)..
29f00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
29f10 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e error = Strin
29f20 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 g.Format("framew
29f30 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b ork name count {
29f40 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0} does not " +.
29f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
29f60 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 "match plat
29f70 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 form name count
29f80 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c {1}", frameworkL
29f90 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c ist.Names.Count,
29fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
29fb0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c frameworkL
29fc0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 ist.PlatformName
29fd0 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 s.Count);....
29fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
29ff0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
2a000 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
2a010 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e for (in
2a020 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 t index = 0; ind
2a030 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 ex < frameworkLi
2a040 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 st.Names.Count;
2a050 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 index++)..
2a060 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
2a070 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
2a090 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e NOTE: Grab the n
2a0a0 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 ame of the frame
2a0b0 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 work (e.g. ".NET
2a0c0 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 Framework")..
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
2a0e0 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 and the na
2a0f0 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f me of the platfo
2a100 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 rm (e.g. "Window
2a110 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 sCE")...
2a120 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
2a130 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
2a140 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 ng frameworkName
2a150 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 = frameworkList
2a160 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a .Names[index];..
2a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a180 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e string platformN
2a190 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c ame = frameworkL
2a1a0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 ist.PlatformName
2a1b0 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 s[index];....
2a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d //.
2a1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2a1e0 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 // NOTE: Grab t
2a1f0 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 he supported ver
2a200 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 sions of this pa
2a210 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 rticular..
2a220 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 //
2a230 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 framework...
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
2a250 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
2a260 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 VersionList f
2a270 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c rameworkVersionL
2a280 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ist;....
2a290 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73 if (vers
2a2a0 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 ion != null)..
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
2a2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2a2d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
2a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
2a2f0 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 NOTE: Manual ove
2a300 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e rride of the *ON
2a310 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 E* framework ver
2a320 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 sion..
2a330 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 //
2a340 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a to process...
2a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a360 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
2a370 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d fram
2a380 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 eworkVersionList
2a390 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 = new VersionLi
2a3a0 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 st();..
2a3b0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 frame
2a3c0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e workVersionList.
2a3d0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 Add(new Version(
2a3e0 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 version));..
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
2a410 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lse..
2a420 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
2a430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
2a440 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 !frameworkList.V
2a450 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 ersions.TryGetVa
2a460 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 lue(..
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a480 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c frameworkName,
2a490 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 out frameworkVe
2a4a0 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 rsionList) ||..
2a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a4c0 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 (framewor
2a4d0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 kVersionList ==
2a4e0 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 null))..
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
2a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a510 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b continue;
2a520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2a530 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
2a540 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
2a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo
2a560 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 reach (Version f
2a570 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 rameworkVersion
2a580 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 in frameworkVers
2a590 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 ionList)..
2a5a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a5c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
2a5d0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 ndTrace(TracePri
2a5e0 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 ority.Lower,..
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a600 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 debugCallb
2a610 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 ack, traceCallba
2a620 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
2a630 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
2a640 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61 "fra
2a650 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d meworkName = {0}
2a660 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 , frameworkVersi
2a670 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 on = {1}, " +..
2a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a690 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d "platform
2a6a0 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 Name = {2}", For
2a6b0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 Display(framewor
2a6c0 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 kName),..
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a6e0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d ForDisplay(fram
2a6f0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a eworkVersion),..
2a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a710 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
2a720 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 ay(platformName)
2a730 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 ), traceCategory
2a740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
2a750 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 if (!H
2a760 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 aveFrameworkRegi
2a770 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 stry(..
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a790 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d rootKey, fram
2a7a0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 eworkName, frame
2a7b0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 workVersion,..
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a7d0 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f platfo
2a7e0 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c rmName, perUser,
2a7f0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 wow64, whatIf,
2a800 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 verbose))..
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
2a820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2a830 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f TraceO
2a840 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 ps.DebugAndTrace
2a850 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c (TracePriority.L
2a860 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ow,..
2a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a880 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 debugCallback,
2a890 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 traceCallback, S
2a8a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 tring.Format(..
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a8c0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 ".NET
2a8d0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 72 Framework {0} r
2a8e0 65 67 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e egistry not foun
2a8f0 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 d, " +..
2a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a910 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e "skipping...
2a920 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 ", ForDisplay(fr
2a930 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 ameworkVersion))
2a940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
2a960 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
2a970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2a980 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e contin
2a990 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue;..
2a9a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a9c0 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d if (callback =
2a9d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
2a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a9f0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 continue;....
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2aa10 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 if (!callback(
2aa20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f ro
2aa40 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b otKey, framework
2aa50 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 Name, frameworkV
2aa60 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 ersion,..
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2aa80 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d platformNam
2aa90 65 2c 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e 74 44 e, null, clientD
2aaa0 61 74 61 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 ata, perUser,..
2aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2aac0 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 wow64
2aad0 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 , throwOnMissing
2aae0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
2aaf0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
2ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ab10 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 ref error))..
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ab30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2ab40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
2ab50 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
2ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
2ab70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2ab80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
2ab90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
2aba0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a return true;..
2abb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
2abc0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
2abd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
2abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ac10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ac20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
2ac30 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53 ion Per-Visual S
2ac40 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61 tudio Version Ha
2ac50 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 ndling..
2ac60 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 private static v
2ac70 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 oid InitializeVs
2ac80 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 List(..
2ac90 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
2aca0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 ey rootKey,..
2acb0 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 Configu
2acc0 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 ration configura
2acd0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 tion,..
2ace0 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 76 73 ref VsList vs
2acf0 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 List..
2ad00 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a ).. {..
2ad10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
2ad20 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d vsList == null).
2ad30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2ad40 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73 vsList = new Vs
2ad50 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 List();....
2ad60 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 if (vsLis
2ad70 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c t.RootKey == nul
2ad80 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
2ad90 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b vsList.RootK
2ada0 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d ey = rootKey;...
2adb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
2adc0 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 (vsList.Versions
2add0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
2ade0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
2adf0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 vsList
2ae00 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 .Versions = new
2ae10 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a VersionList();..
2ae20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2ae30 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 if ((configura
2ae40 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c tion == null) ||
2ae50 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e !configuration.
2ae60 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 20 20 NoVs2005)..
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
2ae80 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 sList.Versions.A
2ae90 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 dd(new Version(8
2aea0 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d 0a , 0)); // 2005..
2aeb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2aec0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 if ((configura
2aed0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c tion == null) ||
2aee0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e !configuration.
2aef0 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20 NoVs2008)..
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
2af10 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 sList.Versions.A
2af20 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 dd(new Version(9
2af30 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d 0a , 0)); // 2008..
2af40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2af50 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 if ((configura
2af60 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c tion == null) ||
2af70 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e !configuration.
2af80 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20 NoVs2010)..
2af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
2afa0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 sList.Versions.A
2afb0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 dd(new Version(1
2afc0 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d 0a 0, 0));// 2010..
2afd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2afe0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 if ((configura
2aff0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c tion == null) ||
2b000 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e !configuration.
2b010 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 20 20 NoVs2012)..
2b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
2b030 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 sList.Versions.A
2b040 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 dd(new Version(1
2b050 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d 0a 1, 0));// 2012..
2b060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2b070 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 if ((configura
2b080 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c tion == null) ||
2b090 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e !configuration.
2b0a0 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20 20 20 NoVs2013)..
2b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
2b0c0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 sList.Versions.A
2b0d0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 dd(new Version(1
2b0e0 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d 0a 2, 0));// 2013..
2b0f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
2b100 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
2b110 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
2b120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
2b160 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
2b170 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56 tatic bool HaveV
2b180 73 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 sVersionDirector
2b190 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
2b1a0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
2b1b0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 rootKey,..
2b1c0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 Version vs
2b1d0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 Version,..
2b1e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 string suf
2b1f0 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 fix,..
2b200 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d bool perUser,.
2b210 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f . boo
2b220 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 l wow64,..
2b230 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
2b240 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
2b250 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 bool verbose,..
2b260 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 ref s
2b270 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 tring installDir
2b280 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory..
2b290 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b ).. {
2b2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
2b2b0 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e (vsVersion == n
2b2c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
2b2d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
2b2e0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 se;....
2b2f0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d string keyNam
2b300 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 e = GetVsKeyName
2b310 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 (vsVersion, suff
2b320 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 ix, perUser, wow
2b330 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64);....
2b340 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 using (MockR
2b350 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d egistryKey key =
2b360 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
2b370 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 OpenSubKey(..
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b390 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d rootKey, keyNam
2b3a0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 e, false, whatIf
2b3b0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 , verbose))..
2b3c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2b3d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
2b3e0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 key == null)..
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b400 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
2b410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
2b420 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 object value
2b430 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 = RegistryHelper
2b440 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 .GetValue(..
2b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b460 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 key, "InstallDir
2b470 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c ", null, whatIf,
2b480 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 verbose);....
2b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
2b4a0 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 (!(value is str
2b4b0 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ing))..
2b4c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
2b4d0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 n false;....
2b4e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
2b4f0 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 ng directory = (
2b500 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d string)value;...
2b510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2b520 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 if (String.IsNu
2b530 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 llOrEmpty(direct
2b540 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ory))..
2b550 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
2b560 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 n false;....
2b570 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
2b580 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 !Directory.Exist
2b590 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 s(directory))..
2b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b5b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
2b5c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2b5d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 TraceOps.Deb
2b5e0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 ugAndTrace(Trace
2b5f0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d Priority.Lower,.
2b600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2b610 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 debugCallba
2b620 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 ck, traceCallbac
2b630 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 k, String.Format
2b640 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2b650 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 "Visual S
2b660 74 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 tudio {0} found
2b670 69 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d in directory {1}
2b680 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .",..
2b690 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
2b6a0 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 lay(vsVersion),
2b6b0 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 ForDisplay(direc
2b6c0 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 tory)),..
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
2b6e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a ceCategory);....
2b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b700 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 installDirectory
2b710 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 = directory;..
2b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2b730 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 eturn true;..
2b740 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
2b750 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
2b760 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
2b770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b7a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
2b7b0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 [MethodImpl(
2b7c0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e MethodImplOption
2b7d0 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a s.NoInlining)]..
2b7e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
2b7f0 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 static bool ForE
2b800 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 achVsVersionRegi
2b810 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 stry(..
2b820 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 MockRegistry
2b830 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 registry,..
2b840 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 VsList vs
2b850 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 List,..
2b860 20 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 VisualStudioR
2b870 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 egistryCallback
2b880 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 callback,..
2b890 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 string su
2b8a0 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 ffix,..
2b8b0 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 Package packa
2b8c0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ge,..
2b8d0 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 object clientDa
2b8e0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ta,..
2b8f0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a bool perUser,..
2b900 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2b910 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 wow64,..
2b920 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f bool throwO
2b930 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 nMissing,..
2b940 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 bool what
2b950 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If,..
2b960 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a bool verbose,..
2b970 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 ref
2b980 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 string error..
2b990 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 )..
2b9a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
2b9b0 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 if (registry
2b9c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
2b9d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
2b9e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
2b9f0 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 = "invalid regis
2ba00 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 try";..
2ba10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
2ba20 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
2ba30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
2ba40 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d if (vsList ==
2ba50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
2ba60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2ba70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 error = "
2ba80 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 invalid VS list"
2ba90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
2baa0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
2bab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
2bac0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d ... M
2bad0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 ockRegistryKey r
2bae0 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e ootKey = vsList.
2baf0 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 RootKey;....
2bb00 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 if (root
2bb10 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 Key == null)..
2bb20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
2bb40 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f or = "invalid ro
2bb50 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 ot key";..
2bb60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
2bb70 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
2bb80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
2bb90 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 if (!IsSup
2bba0 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 portedRootKey(re
2bbb0 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 gistry, rootKey)
2bbc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
2bbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2bbe0 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 error = "root
2bbf0 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d key must be per-
2bc00 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 user or per-mach
2bc10 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 ine";..
2bc20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
2bc30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
2bc40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
2bc50 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 if (vsList.Ve
2bc60 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d rsions == null).
2bc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bc90 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 error = "no VS v
2bca0 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d ersions found";.
2bcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2bcc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
2bcd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
2bce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 . for
2bcf0 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 each (Version vs
2bd00 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 Version in vsLis
2bd10 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 t.Versions)..
2bd20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
2bd40 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 eOps.DebugAndTra
2bd50 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 ce(TracePriority
2bd60 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 .Lower,..
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 deb
2bd80 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 ugCallback, trac
2bd90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
2bda0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
2bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
2bdc0 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 vsVersion = {0}"
2bdd0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 , ForDisplay(vsV
2bde0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 ersion)),..
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
2be00 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
2be10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2be20 20 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c string install
2be30 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c Directory = null
2be40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
2be50 20 20 20 20 20 69 66 20 28 21 48 61 76 65 56 73 if (!HaveVs
2be60 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79 VersionDirectory
2be70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2be80 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b rootK
2be90 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 ey, vsVersion, s
2bea0 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 uffix, perUser,
2beb0 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a wow64, whatIf,..
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bed0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c verbose,
2bee0 20 72 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 ref installDire
2bef0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 ctory))..
2bf00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bf20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
2bf30 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f dTrace(TracePrio
2bf40 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 rity.Low,..
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bf60 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b debugCallback
2bf70 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c , traceCallback,
2bf80 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
2bf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2bfa0 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61 6c "Visual
2bfb0 20 53 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 Studio {0} not
2bfc0 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e found, skipping.
2bfd0 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ..",..
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f Fo
2bff0 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 rDisplay(vsVersi
2c000 6f 6e 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 on)), traceCateg
2c010 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
2c020 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
2c030 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 tinue;..
2c040 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
2c050 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
2c060 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c (callback == nul
2c070 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
2c080 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 continue
2c090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
2c0a0 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 if (!callba
2c0b0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ck(..
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f roo
2c0d0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c tKey, vsVersion,
2c0e0 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 suffix, package
2c0f0 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f , installDirecto
2c100 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ry,..
2c110 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 cli
2c120 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65 72 entData, perUser
2c130 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e , wow64, throwOn
2c140 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c Missing, whatIf,
2c150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2c160 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 verbos
2c170 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a e, ref error))..
2c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
2c1a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
2c1b0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
2c1c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
2c1d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
2c1e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru
2c1f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 e;.. }..
2c200 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f #endregio
2c210 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f n.... ///
2c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c260 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
2c270 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 #region Configur
2c280 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c ation File Handl
2c290 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 ing.. [Me
2c2a0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 thodImpl(MethodI
2c2b0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c mplOptions.NoInl
2c2c0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 ining)]..
2c2d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
2c2e0 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64 bool AddDbProvid
2c2f0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 erFactory(..
2c300 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 string f
2c310 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 ileName,..
2c320 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 string inv
2c330 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 ariant,..
2c340 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 string name
2c350 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ,.. s
2c360 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f tring descriptio
2c370 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n,..
2c380 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c string typeName,
2c390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 .. As
2c3a0 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d semblyName assem
2c3b0 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 blyName,..
2c3c0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
2c3d0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
2c3e0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 bool verbose,..
2c3f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 ref b
2c400 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 ool saved,..
2c410 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 ref stri
2c420 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 ng error..
2c430 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
2c440 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2c450 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c bool dirty = fal
2c460 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se;..
2c470 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 XmlDocument doc
2c480 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 ument = new XmlD
2c490 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 ocument();....
2c4a0 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 docume
2c4b0 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65 nt.PreserveWhite
2c4c0 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 space = true;..
2c4d0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d docum
2c4e0 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d ent.Load(fileNam
2c4f0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
2c500 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 XmlElement ad
2c510 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d dElement = docum
2c520 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 ent.SelectSingle
2c530 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 Node(..
2c540 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f String.Fo
2c550 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64 64 rmat(XPathForAdd
2c560 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 Element, invaria
2c570 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 nt)) as XmlEleme
2c580 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 nt;....
2c590 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e if (addElemen
2c5a0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 t == null)..
2c5b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
2c5c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
2c5d0 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 g[] elementNames
2c5e0 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 = {..
2c5f0 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65 "syste
2c600 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76 m.data", "DbProv
2c610 69 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a iderFactories"..
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c630 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 };....
2c640 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 XmlElement
2c650 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 previousElement
2c660 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 =..
2c670 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 document
2c680 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 .DocumentElement
2c690 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69 ; /* configurati
2c6a0 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 on */....
2c6b0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach
2c6c0 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 (string element
2c6d0 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e Name in elementN
2c6e0 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 ames)..
2c6f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 ad
2c710 64 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69 dElement = previ
2c720 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 ousElement.Selec
2c730 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 tSingleNode(..
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c750 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d elementNam
2c760 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 e) as XmlElement
2c770 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
2c780 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64 if (add
2c790 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 Element == null)
2c7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2c7b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c7d0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f addElement = do
2c7e0 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 cument.CreateEle
2c7f0 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 ment(..
2c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c810 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 elementName,
2c820 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a String.Empty);..
2c830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2c840 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f previo
2c850 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 usElement.Append
2c860 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 Child(addElement
2c870 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
2c880 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
2c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c8a0 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 previousElement
2c8b0 20 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a = addElement;..
2c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c8d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
2c8e0 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 addElement
2c8f0 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 = document.Creat
2c900 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 eElement(..
2c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
2c920 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70 add", String.Emp
2c930 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ty);....
2c940 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 previous
2c950 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 Element.AppendCh
2c960 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b ild(addElement);
2c970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2c980 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 dirty = true
2c990 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
2c9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2c9b0 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 if (!String.Equa
2c9c0 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 ls(addElement.Ge
2c9d0 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 tAttribute("name
2c9e0 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 "),..
2c9f0 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53 name, S
2ca00 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e tringComparison.
2ca10 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 Ordinal))..
2ca20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
2ca30 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 addEle
2ca40 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 ment.SetAttribut
2ca50 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b e("name", name);
2ca60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2ca70 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d dirty = true;.
2ca80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2ca90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
2caa0 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 (!String.Equals
2cab0 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 (addElement.GetA
2cac0 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 ttribute("invari
2cad0 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 ant"),..
2cae0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61 inva
2caf0 72 69 61 6e 74 2c 20 53 74 72 69 6e 67 43 6f 6d riant, StringCom
2cb00 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 parison.Ordinal)
2cb10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
2cb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2cb30 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 addElement.Set
2cb40 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 Attribute("invar
2cb50 69 61 6e 74 22 2c 20 69 6e 76 61 72 69 61 6e 74 iant", invariant
2cb60 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
2cb70 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 dirty = true
2cb80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
2cb90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2cba0 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 if (!String.Equa
2cbb0 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 ls(addElement.Ge
2cbc0 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63 tAttribute("desc
2cbd0 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 ription"),..
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cbf0 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72 description, Str
2cc00 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 ingComparison.Or
2cc10 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 dinal))..
2cc20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
2cc30 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 addEleme
2cc40 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 nt.SetAttribute(
2cc50 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64 "description", d
2cc60 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 escription);..
2cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 di
2cc80 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 rty = true;..
2cc90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
2cca0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
2ccb0 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20 fullTypeName =
2ccc0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b String.Format("{
2ccd0 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 0}, {1}",..
2cce0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 4e typeN
2ccf0 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d ame, assemblyNam
2cd00 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
2cd10 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 if (!String.E
2cd20 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 quals(addElement
2cd30 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 74 .GetAttribute("t
2cd40 79 70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 ype"),..
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c full
2cd60 54 79 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67 TypeName, String
2cd70 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e Comparison.Ordin
2cd80 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 al))..
2cd90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
2cda0 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e addElement.
2cdb0 53 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79 SetAttribute("ty
2cdc0 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d pe", fullTypeNam
2cdd0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e);..
2cde0 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 dirty = tru
2cdf0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
2ce00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
2ce10 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 if (dirty || wh
2ce20 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 atIf)..
2ce30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
2ce40 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 if (verbos
2ce50 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e)..
2ce60 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
2ce70 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 .DebugAndTrace(T
2ce80 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 racePriority.Hig
2ce90 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 hest,..
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
2ceb0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 ebugCallback, tr
2cec0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 aceCallback, Str
2ced0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cef0 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 "addElement
2cf00 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 = {0}", ForDisp
2cf10 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 29 lay(addElement))
2cf20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2cf30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
2cf40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 Category);....
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
2cf60 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 (!whatIf)..
2cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cf80 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 document.Save(fi
2cf90 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 leName);....
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 file
2cfb0 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a sModified++;....
2cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cfd0 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 saved = true;..
2cfe0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
2d000 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 rn true;..
2d010 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f }.... /
2d020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d060 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
2d070 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 [MethodImpl(Me
2d080 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e thodImplOptions.
2d090 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 NoInlining)]..
2d0a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
2d0b0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 atic bool Remove
2d0c0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 DbProviderFactor
2d0d0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
2d0e0 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c string fileName,
2d0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
2d100 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d ring invariant,.
2d110 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f . boo
2d120 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 l whatIf,..
2d130 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 bool verb
2d140 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ose,..
2d150 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 ref bool saved
2d160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 ,.. r
2d170 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d ef string error.
2d180 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a . )..
2d190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
2d1a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 bool dirt
2d1b0 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 y = false;..
2d1c0 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d XmlDocum
2d1d0 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e ent document = n
2d1e0 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 ew XmlDocument()
2d1f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
2d200 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 document.Preser
2d210 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 veWhitespace = t
2d220 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 rue;..
2d230 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 document.Load(
2d240 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 fileName);....
2d250 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 XmlEle
2d260 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74 20 ment addElement
2d270 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 = document.Selec
2d280 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 tSingleNode(..
2d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 St
2d2a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 ring.Format(XPat
2d2b0 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 hForAddElement,
2d2c0 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 invariant)) as X
2d2d0 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 mlElement;....
2d2e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 if (ad
2d2f0 64 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c dElement != null
2d300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
2d310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2d320 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72 addElement.Par
2d330 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 entNode.RemoveCh
2d340 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b ild(addElement);
2d350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2d360 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d dirty = true;.
2d370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2d380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d .. Xm
2d390 6c 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45 lElement removeE
2d3a0 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e lement = documen
2d3b0 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f t.SelectSingleNo
2d3c0 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 de(..
2d3d0 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d String.Form
2d3e0 61 74 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 at(XPathForRemov
2d3f0 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 eElement, invari
2d400 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d ant)) as XmlElem
2d410 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ent;....
2d420 20 20 20 20 69 66 20 28 72 65 6d 6f 76 65 45 6c if (removeEl
2d430 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a ement != null)..
2d440 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
2d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2d460 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2e 50 61 72 emoveElement.Par
2d470 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 entNode.RemoveCh
2d480 69 6c 64 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e ild(removeElemen
2d490 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t);..
2d4a0 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 dirty = tru
2d4b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
2d4c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
2d4d0 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 if (dirty || wh
2d4e0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 atIf)..
2d4f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
2d500 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 if (verbos
2d510 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e)..
2d520 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
2d530 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 .DebugAndTrace(T
2d540 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 racePriority.Hig
2d550 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 hest,..
2d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
2d570 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 ebugCallback, tr
2d580 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 aceCallback, Str
2d590 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d5b0 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 "addElement
2d5c0 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f 76 65 45 6c = {0}, removeEl
2d5d0 65 6d 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20 ement = {1}",..
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d5f0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 ForDispla
2d600 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 2c 20 46 y(addElement), F
2d610 6f 72 44 69 73 70 6c 61 79 28 72 65 6d 6f 76 65 orDisplay(remove
2d620 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 Element)),..
2d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d640 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
2d650 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
2d660 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 if (!what
2d670 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If)..
2d680 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e documen
2d690 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 t.Save(fileName)
2d6a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
2d6b0 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69 filesModifi
2d6c0 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ed++;....
2d6d0 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d saved =
2d6e0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 true;..
2d6f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
2d700 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true
2d710 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ;.. }....
2d720 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
2d730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
2d770 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 ... priva
2d780 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 te static bool P
2d790 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65 72 rocessDbProvider
2d7a0 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 Factory(..
2d7b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c string fil
2d7c0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 eName,..
2d7d0 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 string invar
2d7e0 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 iant,..
2d7f0 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d string name,.
2d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str
2d810 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c ing description,
2d820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
2d830 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a ring typeName,..
2d840 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 Asse
2d850 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c mblyName assembl
2d860 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 yName,..
2d870 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 string direc
2d880 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 tory,..
2d890 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 object client
2d8a0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 Data,..
2d8b0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c bool perUser,
2d8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
2d8d0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 ol wow64,..
2d8e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f bool thro
2d8f0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 wOnMissing,..
2d900 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 bool wh
2d910 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 atIf,..
2d920 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c bool verbose,
2d930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
2d940 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 f bool saved,..
2d950 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 ref s
2d960 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 tring error..
2d970 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 )..
2d980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2d990 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e AnyPair<strin
2d9a0 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 g, bool> pair =
2d9b0 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e clientData as An
2d9c0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f yPair<string, bo
2d9d0 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ol>;....
2d9e0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 if (pair ==
2d9f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
2da00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
2da10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 error = "i
2da20 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b nvalid framework
2da30 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b config callback
2da40 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 data";..
2da50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
2da60 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 false;..
2da70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
2da80 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 if (pair.Y)
2da90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
2daa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2dab0 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 return RemoveDb
2dac0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 ProviderFactory(
2dad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2dae0 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 fileName,
2daf0 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 invariant, whatI
2db00 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 f, verbose, ref
2db10 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 saved,..
2db20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 ref
2db30 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 error) &&..
2db40 20 20 20 20 20 20 20 20 20 20 20 41 64 64 44 62 AddDb
2db50 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 ProviderFactory(
2db60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2db70 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 fileName,
2db80 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c invariant, name,
2db90 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 description, ty
2dba0 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 peName,..
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 ass
2dbc0 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 emblyName, whatI
2dbd0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 f, verbose, ref
2dbe0 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 saved, ref error
2dbf0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
2dc00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 }.. e
2dc10 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lse..
2dc20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2dc30 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 return Remov
2dc40 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f eDbProviderFacto
2dc50 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ry(..
2dc60 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d fileNam
2dc70 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 e, invariant, wh
2dc80 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 atIf, verbose, r
2dc90 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 ef saved,..
2dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2dcb0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 ef error);..
2dcc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
2dcd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 }.. #e
2dce0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 ndregion....
2dcf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
2dd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2dd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2dd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2dd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
2dd40 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 #region A
2dd50 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20 ssembly Folders
2dd60 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 Handling..
2dd70 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
2dd80 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d string GetAssem
2dd90 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d blyFoldersKeyNam
2dda0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
2ddb0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b string framework
2ddc0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 Name,..
2ddd0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 Version frame
2dde0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 workVersion,..
2ddf0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
2de00 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a platformName,..
2de10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2de20 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 perUser,..
2de30 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 bool wow6
2de40 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 4.. )
2de50 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 .. {..
2de60 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
2de70 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 // NOTE
2de80 3a 20 54 68 69 73 20 72 65 67 69 73 74 72 79 20 : This registry
2de90 6b 65 79 20 61 70 70 65 61 72 73 20 74 6f 20 61 key appears to a
2dea0 6c 77 61 79 73 20 62 65 20 33 32 2d 62 69 74 20 lways be 32-bit
2deb0 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 only..
2dec0 20 20 2f 2f 20 20 20 20 20 20 20 28 69 2e 65 2e // (i.e.
2ded0 20 70 72 6f 62 61 62 6c 79 20 62 65 63 61 75 73 probably becaus
2dee0 65 20 69 74 20 69 73 20 6f 6e 6c 79 20 75 73 65 e it is only use
2def0 64 20 62 79 20 56 69 73 75 61 6c 0d 0a 20 20 20 d by Visual..
2df00 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
2df10 20 20 53 74 75 64 69 6f 2c 20 77 68 69 63 68 20 Studio, which
2df20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6c 77 is currently alw
2df30 61 79 73 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29 ays 32-bit only)
2df40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
2df50 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 /.. s
2df60 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 tring format = !
2df70 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 String.IsNullOrE
2df80 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d mpty(platformNam
2df90 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 e) ?..
2dfa0 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 "{0}\\Micr
2dfb0 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d osoft\\{1}\\v{2}
2dfc0 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 \\{3}\\AssemblyF
2dfd0 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 oldersEx" :..
2dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 "{0
2dff0 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 }\\Microsoft\\{1
2e000 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c }\\v{2}\\Assembl
2e010 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a yFoldersEx";....
2e020 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
2e030 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 rn String.Format
2e040 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 (format, GetRoot
2e050 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c KeyName(perUser,
2e060 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 wow64),..
2e070 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 framew
2e080 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f orkName, framewo
2e090 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 rkVersion, platf
2e0a0 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 ormName);..
2e0b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
2e0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e100 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
2e110 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
2e120 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 c bool AddToAsse
2e130 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 mblyFolders(..
2e140 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 MockRe
2e150 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 gistryKey rootKe
2e160 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
2e170 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b string framework
2e180 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 Name,..
2e190 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 Version frame
2e1a0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 workVersion,..
2e1b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
2e1c0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a platformName,..
2e1d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
2e1e0 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a ng subKeyName,..
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
2e200 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 ng directory,..
2e210 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
2e220 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 perUser,..
2e230 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 bool wow64
2e240 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 ,.. b
2e250 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 ool whatIf,..
2e260 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 bool ve
2e270 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 rbose,..
2e280 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 ref string e
2e290 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 rror..
2e2a0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a ).. {..
2e2b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
2e2c0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 ng keyName = Get
2e2d0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b AssemblyFoldersK
2e2e0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 eyName(..
2e2f0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f framewo
2e300 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 rkName, framewor
2e310 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f kVersion, platfo
2e320 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c rmName, perUser,
2e330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2e340 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 wow64);....
2e350 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 using (
2e360 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
2e370 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 key = RegistryHe
2e380 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 lper.OpenSubKey(
2e390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2e3a0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b rootKey, k
2e3b0 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 eyName, true, wh
2e3c0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d atIf, verbose)).
2e3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
2e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e3f0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 if (key == null)
2e400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2e410 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
2e420 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
2e430 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
2e440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2e450 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 "could
2e460 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 not open registr
2e470 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 y key: {0}\\{1}"
2e480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2e490 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b rootK
2e4a0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d ey, keyName);...
2e4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2e4c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
2e4d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
2e4e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
2e4f0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 using (
2e500 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
2e510 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 subKey = Registr
2e520 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 yHelper.CreateSu
2e530 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 bKey(..
2e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b k
2e550 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 ey, subKeyName,
2e560 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 whatIf, verbose)
2e570 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
2e580 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
2e590 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 if (su
2e5a0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 bKey == null)..
2e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e5c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
2e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
2e5e0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 ror = String.For
2e5f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
2e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e610 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 "could not cre
2e620 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 ate registry key
2e630 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 : {0}\\{1}",..
2e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e650 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 key, s
2e660 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 ubKeyName);....
2e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e680 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
2e690 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
2e6a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
2e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e6c0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 RegistryHelpe
2e6d0 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 r.SetValue(..
2e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e6f0 20 20 20 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c subKey, nul
2e700 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 l, directory, wh
2e710 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d atIf, verbose);.
2e720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2e730 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
2e740 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
2e750 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 return true;..
2e760 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
2e770 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
2e780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
2e7c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
2e7d0 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 tatic bool Remov
2e7e0 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c eFromAssemblyFol
2e7f0 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 ders(..
2e800 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
2e810 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 ey rootKey,..
2e820 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
2e830 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a frameworkName,..
2e840 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 Vers
2e850 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 ion frameworkVer
2e860 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 sion,..
2e870 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f string platfo
2e880 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 rmName,..
2e890 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b string subK
2e8a0 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 eyName,..
2e8b0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 bool perUse
2e8c0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 r,..
2e8d0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 bool wow64,..
2e8e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 bool th
2e8f0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 rowOnMissing,..
2e900 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
2e910 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 whatIf,..
2e920 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 bool verbos
2e930 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
2e940 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 ref string error
2e950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d .. ).
2e960 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
2e970 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b string k
2e980 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 eyName = GetAsse
2e990 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 mblyFoldersKeyNa
2e9a0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me(..
2e9b0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 frameworkNa
2e9c0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 me, frameworkVer
2e9d0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 sion, platformNa
2e9e0 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 me, perUser,..
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f wo
2ea00 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 w64);....
2ea10 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b using (Mock
2ea20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 RegistryKey key
2ea30 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 = RegistryHelper
2ea40 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 .OpenSubKey(..
2ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ea60 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 rootKey, keyNa
2ea70 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 me, true, whatIf
2ea80 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 , verbose))..
2ea90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2eaa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
2eab0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 key == null)..
2eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
2ead0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2eae0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 error = Str
2eaf0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
2eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2eb10 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 "could not
2eb20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 open registry ke
2eb30 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 y: {0}\\{1}",..
2eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2eb50 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 rootKey,
2eb60 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 keyName);....
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2eb80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
2eb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2eba0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
2ebb0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c RegistryHel
2ebc0 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 per.DeleteSubKey
2ebd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2ebe0 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b key, subK
2ebf0 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d eyName, throwOnM
2ec00 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 issing, whatIf,
2ec10 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 verbose);..
2ec20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
2ec30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t
2ec40 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d rue;.. }.
2ec50 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
2ec60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ec70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ec80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ec90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2eca0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 //.... pr
2ecb0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f ivate static boo
2ecc0 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c l ProcessAssembl
2ecd0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 yFolders(..
2ece0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 MockRegis
2ecf0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d tryKey rootKey,.
2ed00 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str
2ed10 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d ing frameworkNam
2ed20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
2ed30 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 Version framewor
2ed40 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 kVersion,..
2ed50 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c string pl
2ed60 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 atformName,..
2ed70 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
2ed80 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 directory,..
2ed90 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 object c
2eda0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 lientData,..
2edb0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 bool per
2edc0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 User,..
2edd0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a bool wow64,..
2ede0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2edf0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c throwOnMissing,
2ee00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
2ee10 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 ol whatIf,..
2ee20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 bool ver
2ee30 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 bose,..
2ee40 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 ref string er
2ee50 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ror..
2ee60 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 ).. {..
2ee70 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 AnyPa
2ee80 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e ir<string, bool>
2ee90 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 pair = clientDa
2eea0 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 ta as AnyPair<st
2eeb0 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a ring, bool>;....
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
2eed0 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 pair == null)..
2eee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
2eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
2ef00 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 ror = "invalid f
2ef10 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63 ramework callbac
2ef20 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 k data";..
2ef30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
2ef40 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
2ef50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
2ef60 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 if (pair.Y
2ef70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
2ef80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2ef90 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 return RemoveF
2efa0 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 romAssemblyFolde
2efb0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rs(..
2efc0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 rootKey
2efd0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c , frameworkName,
2efe0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f frameworkVersio
2eff0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c n, platformName,
2f000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2f010 20 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a LegacyProj
2f020 65 63 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 ectName, perUser
2f030 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 , wow64, false,
2f040 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c whatIf, verbose,
2f050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2f060 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 ref error)
2f070 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 &&..
2f080 20 20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62 AddToAssemb
2f090 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 lyFolders(..
2f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f0b0 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f rootKey, framewo
2f0c0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 rkName, framewor
2f0d0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f kVersion, platfo
2f0e0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 rmName,..
2f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f Pro
2f100 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 jectName, pair.X
2f110 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 , perUser, wow64
2f120 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
2f130 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
2f140 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f ref erro
2f150 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 r);..
2f160 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
2f170 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 else..
2f180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
2f190 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f return Remo
2f1a0 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f veFromAssemblyFo
2f1b0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 lders(..
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 root
2f1d0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 Key, frameworkNa
2f1e0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 me, frameworkVer
2f1f0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 sion, platformNa
2f200 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me,..
2f210 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 Project
2f220 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 Name, perUser, w
2f230 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 ow64, throwOnMis
2f240 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20 sing, whatIf,..
2f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f260 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 verbose, ref
2f270 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 error);..
2f280 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
2f290 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 }.. #endr
2f2a0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
2f2b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
2f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f2f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
2f300 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 #region Visu
2f310 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69 al Studio Handli
2f320 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 ng.. priv
2f330 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e ate static strin
2f340 67 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 g GetVsRootKeyNa
2f350 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me(..
2f360 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a bool perUser,..
2f370 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2f380 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 wow64..
2f390 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b ).. {
2f3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
2f3b0 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d turn String.Form
2f3c0 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f at("{0}\\Microso
2f3d0 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f ft\\VisualStudio
2f3e0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
2f3f0 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 GetRootKeyNa
2f400 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 me(perUser, wow6
2f410 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 4));.. }.
2f420 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
2f430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f470 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 //.... pr
2f480 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 ivate static str
2f490 69 6e 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 ing GetVsKeyName
2f4a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 (.. V
2f4b0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e ersion vsVersion
2f4c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ,.. s
2f4d0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 tring suffix,..
2f4e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
2f4f0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 perUser,..
2f500 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 bool wow64
2f510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d .. ).
2f520 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
2f530 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 if (vsVe
2f540 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a rsion == null)..
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f560 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a return null;....
2f570 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
2f580 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 rn String.Format
2f590 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2f5a0 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 "{0}\\{1}{2}"
2f5b0 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 , GetVsRootKeyNa
2f5c0 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 me(perUser, wow6
2f5d0 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 4), vsVersion,..
2f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f5f0 73 75 66 66 69 78 29 3b 0d 0a 20 20 20 20 20 20 suffix);..
2f600 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f }.... /
2f610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f650 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
2f660 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c #region Visual
2f670 20 53 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75 Studio Data Sou
2f680 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 rce Handling..
2f690 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
2f6a0 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 atic bool AddVsD
2f6b0 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 ataSource(..
2f6c0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 MockRegi
2f6d0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c stryKey rootKey,
2f6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 .. Ve
2f6f0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c rsion vsVersion,
2f700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
2f710 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 ring suffix,..
2f720 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 Packag
2f730 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 e package,..
2f740 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 bool per
2f750 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 User,..
2f760 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a bool wow64,..
2f770 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2f780 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
2f790 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f bool verbo
2f7a0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se,..
2f7b0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f ref string erro
2f7c0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 r.. )
2f7d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 .. {..
2f7e0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 if (vsV
2f7f0 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d ersion == null).
2f800 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
2f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f820 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 error = "invalid
2f830 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 VS version";..
2f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2f850 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 eturn false;..
2f860 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
2f870 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 if (p
2f880 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d ackage == null).
2f890 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f8b0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 error = "invalid
2f8c0 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 VS package";..
2f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2f8e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 eturn false;..
2f8f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
2f900 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
2f910 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 g keyName = GetV
2f920 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 sKeyName(vsVersi
2f930 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 on, suffix, perU
2f940 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a ser, wow64);....
2f950 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e usin
2f960 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b g (MockRegistryK
2f970 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 ey key = Registr
2f980 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b yHelper.OpenSubK
2f990 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ey(..
2f9a0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 rootKey
2f9b0 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 , keyName, false
2f9c0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
2f9d0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e))..
2f9e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2f9f0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e if (key == n
2fa00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
2fa10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
2fa30 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d or = String.Form
2fa40 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
2fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f "co
2fa60 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 uld not open reg
2fa70 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c istry key: {0}\\
2fa80 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 {1}",..
2fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2faa0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 ootKey, keyName)
2fab0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
2fac0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
2fad0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 false;..
2fae0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 usi
2fb00 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 ng (MockRegistry
2fb10 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 Key subKey = Reg
2fb20 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e istryHelper.Open
2fb30 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 SubKey(..
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fb50 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 key, "DataSourc
2fb60 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 es", true, whatI
2fb70 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 f, verbose))..
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
2fb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2fba0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 if (subKey
2fbb0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
2fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
2fbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2fbe0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
2fbf0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
2fc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f "co
2fc20 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 uld not open reg
2fc30 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c istry key: {0}\\
2fc40 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 DataSources",..
2fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fc60 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b key);
2fc70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2fc80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
2fc90 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
2fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
2fcb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2fcc0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d using (M
2fcd0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 ockRegistryKey d
2fce0 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a ataSourceKey =..
2fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 Regi
2fd10 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 stryHelper.Creat
2fd20 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d eSubKey(subKey,.
2fd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 pac
2fd50 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 kage.DataSourceI
2fd60 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 d.ToString(VsIdF
2fd70 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 ormat),..
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fd90 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 whatIf, ver
2fda0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 bose))..
2fdb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
2fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fdd0 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 53 if (dataS
2fde0 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c ourceKey == null
2fdf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
2fe00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
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 65 72 72 6f 72 20 error
2fe30 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 = String.Format(
2fe40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fe60 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 "could not cre
2fe70 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 ate registry key
2fe80 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 : {0}\\{1}", key
2fe90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2feb0 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 package.DataS
2fec0 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 ourceId.ToString
2fed0 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a (VsIdFormat));..
2fee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
2ff00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
2ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ff20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
2ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ff40 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 RegistryHelper
2ff50 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 .SetValue(..
2ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ff70 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 dataSour
2ff80 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 ceKey, null, Str
2ff90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ffb0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61 "{0} Da
2ffc0 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72 tabase File", Pr
2ffd0 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 ojectName), what
2ffe0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If,..
2fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30000 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 verbose);....
30010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30020 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
30030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30040 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 // NOTE: This
30050 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 value is new as
30060 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 of 1.0.83.0...
30070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30080 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
30090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
300a0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 RegistryHelper
300b0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 .SetValue(..
300c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
300d0 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 dataSour
300e0 63 65 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 50 ceKey, "DefaultP
300f0 72 6f 76 69 64 65 72 22 2c 0d 0a 20 20 20 20 20 rovider",..
30100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30110 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 package.D
30120 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f ataProviderId.To
30130 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 String(VsIdForma
30140 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t),..
30150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30160 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
30170 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
30180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
30190 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 gistryHelper.Cre
301a0 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f ateSubKey(dataSo
301b0 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 urceKey,..
301c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
301d0 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 String.For
301e0 6d 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50 mat("SupportingP
301f0 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d roviders\\{0}",.
30200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
30210 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 pac
30220 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 kage.DataProvide
30230 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 rId.ToString(VsI
30240 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 dFormat)),..
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30260 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 whatIf,
30270 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 verbose);..
30280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
30290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
302a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
302b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
302c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a return true;..
302d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
302e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
302f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
30330 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
30340 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f static bool Remo
30350 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d veVsDataSource(.
30360 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 . Moc
30370 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f kRegistryKey roo
30380 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 tKey,..
30390 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 Version vsVer
303a0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 sion,..
303b0 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 string suffix
303c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 ,.. P
303d0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d ackage package,.
303e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f . boo
303f0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 l perUser,..
30400 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 bool wow
30410 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 64,..
30420 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 bool whatIf,..
30430 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
30440 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 verbose,..
30450 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 ref string
30460 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 error..
30470 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b ).. {
30480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
30490 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e (vsVersion == n
304a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
304b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
304c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e error = "in
304d0 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e valid VS version
304e0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ";..
304f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
30500 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
30510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
30520 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e if (package == n
30530 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
30540 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
30550 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e error = "in
30560 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 valid VS package
30570 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ";..
30580 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
30590 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
305a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
305b0 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d string keyName =
305c0 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 GetVsKeyName(vs
305d0 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c Version, suffix,
305e0 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 perUser, wow64)
305f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
30600 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 using (MockRegi
30610 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 stryKey key = Re
30620 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 gistryHelper.Ope
30630 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 nSubKey(..
30640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f ro
30650 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 otKey, keyName,
30660 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 false, whatIf, v
30670 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 erbose))..
30680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
30690 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 if (key
306a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
306b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
306c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
306d0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 error = String
306e0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
306f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30700 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 "could not ope
30710 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 n registry key:
30720 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 {0}\\{1}",..
30730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30740 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 rootKey, key
30750 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 Name);....
30760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
30770 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
30780 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
30790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
307a0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 using (MockReg
307b0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 istryKey subKey
307c0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 = RegistryHelper
307d0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 .OpenSubKey(..
307e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
307f0 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 key, "Data
30800 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 Sources", true,
30810 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 whatIf, verbose)
30820 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
30830 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
30840 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 if (su
30850 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 bKey == null)..
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30870 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
30880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
30890 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 ror = String.For
308a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
308b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
308c0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 "could not ope
308d0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 n registry key:
308e0 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 {0}\\DataSources
308f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30910 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 key);....
30920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30930 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
30960 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 Reg
30970 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 istryHelper.Dele
30980 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 teSubKeyTree(..
30990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
309a0 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 subKey, p
309b0 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 ackage.DataSourc
309c0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 eId.ToString(VsI
309d0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 dFormat),..
309e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
309f0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f whatIf, verbo
30a00 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 se);..
30a10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
30a20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
30a30 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru
30a40 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d e;.. }...
30a50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
30a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30aa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 .... priv
30ab0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 ate static bool
30ac0 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75 ProcessVsDataSou
30ad0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 rce(..
30ae0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 MockRegistryKe
30af0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 y rootKey,..
30b00 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 Version
30b10 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 vsVersion,..
30b20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 string s
30b30 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 uffix,..
30b40 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b Package pack
30b50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 age,..
30b60 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f string directo
30b70 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ry,..
30b80 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 object clientDa
30b90 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ta,..
30ba0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a bool perUser,..
30bb0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
30bc0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 wow64,..
30bd0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f bool throwO
30be0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 nMissing,..
30bf0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 bool what
30c00 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If,..
30c10 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a bool verbose,..
30c20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 ref
30c30 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 string error..
30c40 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 )..
30c50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
30c60 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 if (package
30c70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
30c80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
30c90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
30ca0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 "invalid VS pac
30cb0 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 kage";..
30cc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
30cd0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alse;..
30ce0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
30cf0 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 AnyPair<stri
30d00 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d ng, bool> pair =
30d10 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 clientData as A
30d20 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 nyPair<string, b
30d30 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ool>;....
30d40 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d if (pair ==
30d50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
30d60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
30d70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 error = "
30d80 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 invalid VS callb
30d90 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 ack data";..
30da0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
30db0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
30dc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
30dd0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 if (pair
30de0 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .Y)..
30df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
30e00 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 return AddVs
30e10 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 DataSource(..
30e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30e30 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 rootKey, vsVers
30e40 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 ion, suffix, pac
30e50 6b 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 kage, perUser, w
30e60 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 ow64,..
30e70 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 whatI
30e80 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 f, verbose, ref
30e90 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 error);..
30ea0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
30eb0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 else..
30ec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
30ed0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
30ee0 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 RemoveVsDataSour
30ef0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ce(..
30f00 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 rootKey
30f10 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 , vsVersion, suf
30f20 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65 fix, package, pe
30f30 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 rUser, wow64,..
30f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30f50 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f whatIf, verbo
30f60 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d se, ref error);.
30f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
30f80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
30f90 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
30fa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
30fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30ff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
31000 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 ion Visual Studi
31010 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 o Data Provider
31020 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 Handling..
31030 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
31040 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50 bool AddVsDataP
31050 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 rovider(..
31060 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 MockRegist
31070 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a ryKey rootKey,..
31080 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 Vers
31090 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a ion vsVersion,..
310a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
310b0 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 ng suffix,..
310c0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 Package
310d0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 package,..
310e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c string fil
310f0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 eName,..
31100 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 bool perUser
31110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 ,.. b
31120 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 ool wow64,..
31130 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 bool wha
31140 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf,..
31150 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d bool verbose,.
31160 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 . ref
31170 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 string error..
31180 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 )..
31190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
311a0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 if (vsVersi
311b0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 on == null)..
311c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
311d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
311e0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 r = "invalid VS
311f0 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 version";..
31200 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
31210 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
31220 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
31230 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 if (packa
31240 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ge == null)..
31250 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
31260 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
31270 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 r = "invalid VS
31280 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 package";..
31290 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
312a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
312b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
312c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 string ke
312d0 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 yName = GetVsKey
312e0 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 Name(vsVersion,
312f0 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c suffix, perUser,
31300 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 wow64);....
31310 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d using (M
31320 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b ockRegistryKey k
31330 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c ey = RegistryHel
31340 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d per.OpenSubKey(.
31350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
31360 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 rootKey, ke
31370 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 yName, false, wh
31380 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d atIf, verbose)).
31390 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
313b0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 if (key == null)
313c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
313d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
313e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
313f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
31400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
31410 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 "could
31420 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 not open registr
31430 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 y key: {0}\\{1}"
31440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
31450 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b rootK
31460 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d ey, keyName);...
31470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
31480 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
31490 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
314a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
314b0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 using (
314c0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
314d0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 subKey = Registr
314e0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b yHelper.OpenSubK
314f0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ey(..
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 key
31510 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 , "DataProviders
31520 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c ", true, whatIf,
31530 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 verbose))..
31540 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
31550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31560 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d if (subKey ==
31570 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
31580 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
31590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
315a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 error = S
315b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 tring.Format(..
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
315d0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c "coul
315e0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 d not open regis
315f0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 try key: {0}\\Da
31600 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 taProviders",..
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31620 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b key);
31630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
31640 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
31650 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
31660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
31670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
31680 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d using (M
31690 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 ockRegistryKey d
316a0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d ataProviderKey =
316b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
316c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
316d0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 gistryHelper.Cre
316e0 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 ateSubKey(subKey
316f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
31700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
31710 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 ackage.DataProvi
31720 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 derId.ToString(V
31730 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 sIdFormat),..
31740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31750 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c whatIf,
31760 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 verbose))..
31770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31780 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
31790 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 if (d
317a0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d ataProviderKey =
317b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
317c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
317d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
317e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
317f0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 error = String.F
31800 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
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 22 63 6f 75 6c 64 20 6e "could n
31830 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 ot create regist
31840 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d ry key: {0}\\{1}
31850 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 ", key,..
31860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31870 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 package
31880 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e .DataProviderId.
31890 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 ToString(VsIdFor
318a0 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 mat));....
318b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
318c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
318d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se;..
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
318f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
31900 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 Regist
31910 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 ryHelper.SetValu
31920 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
31930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31940 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c dataProviderKey,
31950 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69 null, Descripti
31960 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 on, whatIf,..
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31980 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 verbose
31990 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
319a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
319b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
319c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 // NOT
319d0 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 E: This value is
319e0 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 new as of 1.0.8
319f0 33 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a 3.0. However,..
31a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31a10 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
31a20 20 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 it should only
31a30 62 65 20 73 65 74 20 69 66 20 74 68 65 20 70 61 be set if the pa
31a40 63 6b 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a ckage assembly..
31a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31a60 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
31a70 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73 and all the ass
31a80 65 6d 62 6c 69 65 73 20 69 74 20 72 65 66 65 72 emblies it refer
31a90 73 20 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a s to are being..
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31ab0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
31ac0 20 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 placed into the
31ad0 20 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 global assembly
31ae0 20 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 cache...
31af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31b00 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
31b20 28 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 (package.GlobalA
31b30 73 73 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20 ssemblyCache)..
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31b50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
31b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31b70 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 RegistryHe
31b80 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a lper.SetValue(..
31b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31bb0 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c dataProviderKey,
31bc0 20 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 "Assembly",..
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 pa
31bf0 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61 ckage.AssemblyNa
31c00 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a me.ToString(),..
31c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31c30 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 whatIf, verbose)
31c40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
31c50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
31c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31c70 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
31c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31c90 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 // NOTE: Thi
31ca0 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 s value is new a
31cb0 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a s of 1.0.83.0...
31cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31cd0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31cf0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 RegistryHelp
31d00 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 er.SetValue(..
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31d20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 dataPr
31d30 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f oviderKey, "Asso
31d40 63 69 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a ciatedSource",..
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31d60 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b pack
31d70 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 age.DataSourceId
31d80 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f .ToString(VsIdFo
31d90 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 rmat),..
31da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31db0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 whatIf, verb
31dc0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ose);....
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31de0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
31df0 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 SetValue(..
31e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31e10 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 dataProvi
31e20 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 derKey, "Invaria
31e30 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 ntName", Invaria
31e40 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 ntName,..
31e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31e60 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 whatIf, ver
31e70 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 bose);....
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31e90 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 RegistryHelper
31ea0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 .SetValue(..
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 64 61 74 61 50 72 6f 76 dataProv
31ed0 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f iderKey, "Techno
31ee0 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 logy",..
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31f00 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e package.AdoN
31f10 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 etTechnologyId.T
31f20 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d oString(VsIdForm
31f30 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 at),..
31f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31f50 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 whatIf, verbos
31f60 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 R
31f80 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 egistryHelper.Se
31f90 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 tValue(..
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31fb0 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 dataProvide
31fc0 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 rKey, "CodeBase"
31fd0 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 , fileName, what
31fe0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If,..
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32000 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 verbose);....
32010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32020 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 RegistryHe
32030 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a lper.SetValue(..
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32050 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 data
32060 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 ProviderKey, "Fa
32070 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a ctoryService",..
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32090 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b pack
320a0 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f age.ServiceId.To
320b0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 String(VsIdForma
320c0 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 t), whatIf,..
320d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
320e0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 verbose
320f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
32100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
32110 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 gistryHelper.Cre
32120 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 ateSubKey(dataPr
32130 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 oviderKey,..
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32150 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 "Support
32160 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 edObjects\\DataC
32170 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 onnectionUIContr
32180 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ol",..
32190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
321a0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 whatIf, verbos
321b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
321c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 R
321d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 egistryHelper.Cr
321e0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 eateSubKey(dataP
321f0 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 roviderKey,..
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32210 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 "Suppor
32220 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 tedObjects\\Data
32230 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 ConnectionProper
32240 74 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 ties",..
32250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32260 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 whatIf, verb
32270 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ose);....
32280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32290 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
322a0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 CreateSubKey(dat
322b0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 aProviderKey,..
322c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
322d0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 "Supp
322e0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 ortedObjects\\Da
322f0 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 taConnectionSupp
32300 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 ort", whatIf,..
32310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32320 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f verbo
32330 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 se);....
32340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32350 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 RegistryHelper.C
32360 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 reateSubKey(data
32370 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 ProviderKey,..
32380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32390 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f "Suppo
323a0 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 rtedObjects\\Dat
323b0 61 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c aObjectSupport",
323c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
323d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
323e0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d verbose);.
323f0 0a 0d 0a 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 52 65 67 69 73 Regis
32410 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 tryHelper.Create
32420 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 SubKey(dataProvi
32430 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 derKey,..
32440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32450 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f "SupportedO
32460 62 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 bjects\\DataView
32470 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 Support", whatIf
32480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
324a0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 erbose);..
324b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
324c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
324d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
324e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
324f0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 return true;..
32500 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
32510 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
32520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
32560 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
32570 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 tatic bool Remov
32580 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 eVsDataProvider(
32590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f .. Mo
325a0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
325b0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 otKey,..
325c0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 Version vsVe
325d0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 rsion,..
325e0 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 string suffi
325f0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 x,..
32600 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c Package package,
32610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
32620 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 ol perUser,..
32630 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f bool wo
32640 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 w64,..
32650 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a bool whatIf,..
32660 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
32670 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 verbose,..
32680 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e ref strin
32690 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 g error..
326a0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 )..
326b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i
326c0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 f (vsVersion ==
326d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
326e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
326f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 error = "i
32700 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f nvalid VS versio
32710 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n";..
32720 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
32730 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
32740 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
32750 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 string keyName
32760 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 = GetVsKeyName(v
32770 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 sVersion, suffix
32780 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 , perUser, wow64
32790 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
327a0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 using (MockReg
327b0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 istryKey key = R
327c0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 egistryHelper.Op
327d0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 enSubKey(..
327e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
327f0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c ootKey, keyName,
32800 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 false, whatIf,
32810 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 verbose))..
32820 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
32830 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 if (ke
32840 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 y == null)..
32850 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
32860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32870 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e error = Strin
32880 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
32890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
328a0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 "could not op
328b0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a en registry key:
328c0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 {0}\\{1}",..
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
328e0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 rootKey, ke
328f0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 yName);....
32900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
32910 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 eturn false;..
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
32930 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
32940 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 using (MockRe
32950 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 gistryKey subKey
32960 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 = RegistryHelpe
32970 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 r.OpenSubKey(..
32980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32990 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 key, "Dat
329a0 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 aProviders", tru
329b0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f e, whatIf, verbo
329c0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 se))..
329d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
329e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
329f0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 (subKey == null)
32a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
32a10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
32a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32a30 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e error = String.
32a40 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
32a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32a60 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 "could not
32a70 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 open registry ke
32a80 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 y: {0}\\DataProv
32a90 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 iders",..
32aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32ab0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 key);....
32ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32ad0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
32ae0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se;..
32af0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
32b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32b10 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 RegistryHelper
32b20 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 .DeleteSubKeyTre
32b30 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
32b40 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b subK
32b50 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 ey, package.Data
32b60 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 ProviderId.ToStr
32b70 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c ing(VsIdFormat),
32b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
32b90 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 whatIf
32ba0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 , verbose);..
32bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
32bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret
32be0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 urn true;..
32bf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
32c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32c40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
32c50 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
32c60 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 c bool ProcessVs
32c70 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 DataProvider(..
32c80 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 MockR
32c90 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b egistryKey rootK
32ca0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ey,..
32cb0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 Version vsVersi
32cc0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on,..
32cd0 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d string suffix,.
32ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 . Pac
32cf0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 kage package,..
32d00 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
32d10 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 g directory,..
32d20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object
32d30 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 clientData,..
32d40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 bool p
32d50 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 erUser,..
32d60 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c bool wow64,
32d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
32d80 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e ol throwOnMissin
32d90 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g,..
32da0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 bool whatIf,..
32db0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 bool v
32dc0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 erbose,..
32dd0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 ref string
32de0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 error..
32df0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d ).. {.
32e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 . Any
32e10 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f Pair<string, boo
32e20 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 l> pair = client
32e30 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c Data as AnyPair<
32e40 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a string, bool>;..
32e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
32e60 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d (pair == null).
32e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
32e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32e90 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 error = "invalid
32ea0 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 VS callback dat
32eb0 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 a";..
32ec0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
32ed0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
32ee0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
32ef0 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 if (pair.Y)..
32f00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
32f20 75 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f urn AddVsDataPro
32f30 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 vider(..
32f40 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 root
32f50 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 Key, vsVersion,
32f60 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c suffix, package,
32f70 20 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72 pair.X, perUser
32f80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
32f90 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20 77 68 wow64, wh
32fa0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 atIf, verbose, r
32fb0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 ef error);..
32fc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
32fd0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 else..
32fe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
33000 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 rn RemoveVsDataP
33010 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 rovider(..
33020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f ro
33030 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e otKey, vsVersion
33040 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 , suffix, packag
33050 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 e, perUser, wow6
33060 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4,..
33070 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 whatIf,
33080 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 verbose, ref err
33090 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 or);..
330a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }..
330b0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 #endregi
330c0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f on.... //
330d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
330e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
330f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
33100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
33110 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
33120 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 #region Visual
33130 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48 Studio Package H
33140 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 andling..
33150 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
33160 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 void InitializeV
33170 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 sPackage(..
33180 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e AssemblyN
33190 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 ame assemblyName
331a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 ,.. b
331b0 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 ool globalAssemb
331c0 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 lyCache,..
331d0 20 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 ref Packag
331e0 65 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 e package..
331f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
33200 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
33210 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 if (package ==
33220 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
33230 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
33240 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 package =
33250 6e 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a new Package();..
33260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
33270 20 20 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 package.Assemb
33280 6c 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c lyName = assembl
33290 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 yName;..
332a0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e package.
332b0 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 GlobalAssemblyCa
332c0 63 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65 che = globalAsse
332d0 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20 mblyCache;....
332e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 pa
332f0 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 ckage.AdoNetTech
33300 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47 nologyId = new G
33310 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 uid(..
33320 20 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39 "77AB9
33330 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31 A9D-78B9-4BA7-91
33340 41 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22 AC-873F5338F1D2"
33350 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
33360 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 package.Pa
33370 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75 ckageId = new Gu
33380 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 id(..
33390 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 "DCBE6C
333a0 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 8D-0E57-4099-A18
333b0 33 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29 3-98FF74C64D9C")
333c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
333d0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 package.Ser
333e0 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 viceId = new Gui
333f0 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d(..
33400 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38 "DCBE6C8
33410 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33 D-0E57-4099-A183
33420 2d 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b -98FF74C64D9D");
33430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
33440 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 package.Data
33450 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47 SourceId = new G
33460 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 uid(..
33470 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41 "0EBAA
33480 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 B6E-CA80-4B4A-8D
33490 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22 DF-CBE6BF058C71"
334a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
334b0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 package.Da
334c0 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e taProviderId = n
334d0 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 ew Guid(..
334e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30 "0
334f0 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 EBAAB6E-CA80-4B4
33500 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 A-8DDF-CBE6BF058
33510 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 C70");..
33520 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. }
33530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
33540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
33550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
33560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
33570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
33580 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 ///.... p
33590 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f rivate static bo
335a0 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28 ol AddVsPackage(
335b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f .. Mo
335c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
335d0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 otKey,..
335e0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 Version vsVe
335f0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 rsion,..
33600 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 string suffi
33610 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 x,..
33620 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c Package package,
33630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
33640 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a ring fileName,..
33650 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
33660 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 perUser,..
33670 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 bool wow6
33680 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4,..
33690 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 bool whatIf,..
336a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 bool v
336b0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 erbose,..
336c0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 ref string
336d0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 error..
336e0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d ).. {.
336f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
33700 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 (vsVersion == nu
33710 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
33720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
33730 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 error = "inv
33740 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 alid VS version"
33750 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
33760 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
33770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
33780 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
33790 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 f (package == nu
337a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
337b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
337c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 error = "inv
337d0 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 alid VS package"
337e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
337f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
33800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
33810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ... s
33820 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 tring keyName =
33830 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 GetVsKeyName(vsV
33840 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 ersion, suffix,
33850 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b perUser, wow64);
33860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
33870 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 using (MockRegis
33880 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 tryKey key = Reg
33890 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e istryHelper.Open
338a0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 SubKey(..
338b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f roo
338c0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 tKey, keyName, f
338d0 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 alse, whatIf, ve
338e0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 rbose))..
338f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
33900 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 if (key
33910 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
33920 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
33930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33940 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e error = String.
33950 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
33960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33970 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e "could not open
33980 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b registry key: {
33990 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 0}\\{1}",..
339a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
339b0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e rootKey, keyN
339c0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ame);....
339d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
339e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
339f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
33a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
33a10 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 using (MockRegi
33a20 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d stryKey subKey =
33a30 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
33a40 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 OpenSubKey(..
33a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33a60 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 key, "Packa
33a70 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 ges", true, what
33a80 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 If, verbose))..
33a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
33aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
33ab0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 if (subKey
33ac0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
33ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
33ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
33af0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
33b00 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 = String.Format(
33b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
33b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 "c
33b30 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 ould not open re
33b40 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c gistry key: {0}\
33b50 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 \Packages",..
33b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33b70 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a key);..
33b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
33b90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
33ba0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
33bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
33bd0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
33bf0 20 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a NOTE: *WARNING*
33c00 20 43 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66 Changing any of
33c10 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 77 69 these values wi
33c20 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20 ll likely..
33c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
33c40 2f 20 20 20 20 20 20 20 72 65 71 75 69 72 65 20 / require
33c50 61 20 6e 65 77 20 22 70 61 63 6b 61 67 65 20 6c a new "package l
33c60 6f 61 64 20 6b 65 79 22 20 28 50 4c 4b 29 20 74 oad key" (PLK) t
33c70 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 o be..
33c80 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 //
33c90 20 20 20 67 65 6e 65 72 61 74 65 64 20 69 6e 20 generated in
33ca0 6f 72 64 65 72 20 74 6f 20 70 72 6f 70 65 72 6c order to properl
33cb0 79 20 73 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e y support loadin
33cc0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 g the..
33cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
33ce0 20 20 20 20 70 61 63 6b 61 67 65 20 69 6e 74 6f package into
33cf0 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 Visual Studio 2
33d00 30 30 38 20 61 6e 64 20 65 61 72 6c 69 65 72 20 008 and earlier
33d10 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 without..
33d20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
33d30 20 20 20 20 20 20 74 68 65 20 6d 61 74 63 68 69 the matchi
33d40 6e 67 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f ng Visual Studio
33d50 20 53 44 4b 20 62 65 69 6e 67 20 69 6e 73 74 61 SDK being insta
33d60 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 lled...
33d70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
33d80 20 20 20 20 50 6c 65 61 73 65 20 72 65 66 65 72 Please refer
33d90 20 74 6f 20 74 68 65 20 22 53 51 4c 69 74 65 2e to the "SQLite.
33da0 44 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74 Designer\plk.txt
33db0 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 " file..
33dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
33dd0 20 20 20 20 20 66 6f 72 20 74 68 65 20 65 78 69 for the exi
33de0 73 74 69 6e 67 20 6f 66 66 69 63 69 61 6c 20 76 sting official v
33df0 61 6c 75 65 73 20 61 6e 64 20 75 70 64 61 74 65 alues and update
33e00 20 74 68 65 6d 20 69 66 0d 0a 20 20 20 20 20 20 them if..
33e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
33e20 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 necessary
33e30 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77 . Also, the new
33e40 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 61 63 ly generated pac
33e50 6b 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20 kage load..
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
33e70 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 73 65 / key itse
33e80 6c 66 2c 20 77 68 69 63 68 20 69 73 20 61 20 31 lf, which is a 1
33e90 32 38 20 63 68 61 72 61 63 74 65 72 20 61 6c 70 28 character alp
33ea0 68 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20 20 hanumeric..
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
33ec0 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 / string,
33ed0 6d 75 73 74 20 62 65 20 70 6c 61 63 65 64 20 69 must be placed i
33ee0 6e 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 73 n the resource s
33ef0 74 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20 tring named..
33f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33f10 20 2f 2f 20 20 20 20 20 20 20 22 34 30 30 22 20 // "400"
33f20 69 6e 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44 in the "SQLite.D
33f30 65 73 69 67 6e 65 72 5c 56 53 50 61 63 6b 61 67 esigner\VSPackag
33f40 65 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a 20 20 e.resx" file..
33f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33f60 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 // and t
33f70 68 65 6e 20 74 68 65 20 64 65 73 69 67 6e 65 72 hen the designer
33f80 20 61 73 73 65 6d 62 6c 79 20 69 74 73 65 6c 66 assembly itself
33f90 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20 must be..
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
33fb0 20 20 20 20 20 20 20 72 65 63 6f 6d 70 69 6c 65 recompile
33fc0 64 2e 20 20 41 73 20 6f 66 20 74 68 69 73 20 77 d. As of this w
33fd0 72 69 74 69 6e 67 20 28 69 6e 20 46 65 62 72 75 riting (in Febru
33fe0 61 72 79 20 32 30 31 32 29 2c 0d 0a 20 20 20 20 ary 2012),..
33ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34000 2f 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c // the fol
34010 6c 6f 77 69 6e 67 20 55 52 4c 20 69 73 20 74 68 lowing URL is th
34020 65 20 70 72 6f 70 65 72 20 70 6c 61 63 65 20 74 e proper place t
34030 6f 20 67 65 6e 65 72 61 74 65 0d 0a 20 20 20 20 o generate..
34040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34050 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 // package
34060 20 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20 load keys:..
34070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34080 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
34090 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
340a0 20 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69 http://msdn.mi
340b0 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75 crosoft.com/en-u
340c0 73 2f 76 73 74 75 64 69 6f 2f 63 63 36 35 35 37 s/vstudio/cc6557
340d0 39 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 95..
340e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34100 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 using (MockRegis
34110 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 tryKey packageKe
34120 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y =..
34130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34140 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
34150 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 CreateSubKey(sub
34160 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 Key,..
34170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34180 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 package.Packag
34190 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 eId.ToString(VsI
341a0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 dFormat), whatIf
341b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
341c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
341d0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 erbose))..
341e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
341f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
34200 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 if (pac
34210 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 kageKey == null)
34220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
34230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34250 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
34260 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
34270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
34280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34290 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 "could not crea
342a0 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a te registry key:
342b0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 {0}\\{1}",..
342c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
342d0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 key
342e0 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 , package.Packag
342f0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 eId.ToString(VsI
34300 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 dFormat));....
34310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34320 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
34330 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
34340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34350 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
34360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
34370 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 gistryHelper.Set
34380 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 Value(packageKey
34390 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 , null,..
343a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
343b0 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d String.Form
343c0 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 at("{0} Designer
343d0 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 Package", Proje
343e0 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 ctName),..
343f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34400 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 whatIf, ve
34410 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 rbose);....
34420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34430 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 RegistryHelpe
34440 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 r.SetValue(packa
34450 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d geKey, "Class",.
34460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
34470 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 "SQ
34480 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 Lite.Designer.SQ
34490 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68 LitePackage", wh
344a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d atIf, verbose);.
344b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
344c0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 Regis
344d0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c tryHelper.SetVal
344e0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 ue(packageKey, "
344f0 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 CodeBase",..
34500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34510 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName
34520 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
34530 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 R
34550 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 egistryHelper.Se
34560 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 tValue(packageKe
34570 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68 y, "ID", 400, wh
34580 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 atIf,..
34590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
345a0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a verbose);....
345b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
345c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 string d
345d0 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 53 79 irectory = GetSy
345e0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 77 6f stemDirectory(wo
345f0 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 w64);....
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34610 20 69 66 20 28 64 69 72 65 63 74 6f 72 79 20 3d if (directory =
34620 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
34630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34640 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d directory =
34650 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a String.Empty;..
34660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
34670 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 Regist
34680 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 ryHelper.SetValu
34690 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 e(packageKey, "I
346a0 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d nprocServer32",.
346b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
346c0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74 Pat
346d0 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 h.Combine(direct
346e0 6f 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c ory, "mscoree.dl
346f0 6c 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 l"),..
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34710 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 whatIf, verbos
34720 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
34730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 R
34740 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 egistryHelper.Se
34750 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 tValue(packageKe
34760 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 y, "CompanyName"
34770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
34790 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 http://system.da
347a0 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c ta.sqlite.org/",
347b0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
347c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
347d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
347e0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 gistryHelper.Set
347f0 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 Value(packageKey
34800 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d , "MinEdition",.
34810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
34820 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 74 "st
34830 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c andard", whatIf,
34840 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 verbose);....
34850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34860 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 RegistryHe
34870 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 lper.SetValue(pa
34880 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 ckageKey, "Produ
34890 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 ctName",..
348a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
348b0 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 String.For
348c0 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 mat("{0} Designe
348d0 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a r Package", Proj
348e0 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 ectName),..
348f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34900 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 whatIf, v
34910 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 erbose);....
34920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34930 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 RegistryHelp
34940 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b er.SetValue(pack
34950 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 ageKey, "Product
34960 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 Version",..
34970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34980 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68 "1.0", wh
34990 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d atIf, verbose);.
349a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
349b0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 using
349c0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 (MockRegistryKe
349d0 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a y toolboxKey =..
349e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
349f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34a00 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 RegistryHelper.C
34a10 72 65 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b reateSubKey(pack
34a20 61 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 ageKey,..
34a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34a40 20 20 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f "Toolbo
34a50 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 x", whatIf, verb
34a60 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ose))..
34a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
34a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
34a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
34aa0 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 (toolboxKey ==
34ab0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
34ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34ad0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
34ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34af0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 error = St
34b00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 ring.Format(..
34b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34b30 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 "could not cre
34b40 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 ate registry key
34b50 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 : " +..
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34b70 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c "{0}\
34b80 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 \Toolbox", packa
34b90 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 geKey);....
34ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34bb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
34bc0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
34bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34be0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
34bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34c00 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 RegistryH
34c10 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d elper.SetValue(.
34c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
34c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34c40 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 toolboxKey, "De
34c50 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c fault Items", 3,
34c60 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
34c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34c80 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 verbos
34c90 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e);..
34ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34cc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
34cd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e usin
34cf0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b g (MockRegistryK
34d00 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 ey subKey = Regi
34d10 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 stryHelper.OpenS
34d20 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ubKey(..
34d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34d40 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 key, "Menus", tr
34d50 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 ue, whatIf, verb
34d60 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ose))..
34d70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
34d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
34d90 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c (subKey == null
34da0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
34db0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
34dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34dd0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 error = String
34de0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
34df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34e00 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 "could not
34e10 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b open registry k
34e20 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c ey: {0}\\Menus",
34e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
34e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 ke
34e50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
34e70 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 eturn false;..
34e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34e90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
34ea0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 Regis
34eb0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c tryHelper.SetVal
34ec0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue(..
34ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 sub
34ee0 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 Key, package.Pac
34ef0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 kageId.ToString(
34f00 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 VsIdFormat),..
34f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34f20 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33 ", 1000, 3
34f30 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f ", whatIf, verbo
34f40 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 se);..
34f50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
34f60 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 using
34f70 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 (MockRegistryKe
34f80 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 y subKey = Regis
34f90 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 tryHelper.OpenSu
34fa0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 bKey(..
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b k
34fc0 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 ey, "Services",
34fd0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 true, whatIf, ve
34fe0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 rbose))..
34ff0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
35000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35010 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 if (subKey == nu
35020 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
35030 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
35040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35050 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 error = Stri
35060 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
35070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35080 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e "could n
35090 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 ot open registry
350a0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 key: {0}\\Servi
350b0 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 ces",..
350c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
350d0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 key);....
350e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
350f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
35100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
35110 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
35120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35130 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 using (MockRegis
35140 74 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65 tryKey serviceKe
35150 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y =..
35160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35170 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
35180 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 CreateSubKey(sub
35190 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 Key,..
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
351b0 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 package.Servic
351c0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 eId.ToString(VsI
351d0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 dFormat), whatIf
351e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
351f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
35200 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 erbose))..
35210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
35220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
35230 20 20 20 20 20 20 20 20 20 69 66 20 28 73 65 72 if (ser
35240 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 viceKey == null)
35250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
35260 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35280 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
35290 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
352a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
352b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
352c0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 "could not crea
352d0 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a te registry key:
352e0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 {0}\\{1}",..
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35300 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 key
35310 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 , package.Servic
35320 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 eId.ToString(VsI
35330 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 dFormat));....
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35350 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
35360 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
35370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35380 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
35390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
353a0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 gistryHelper.Set
353b0 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 Value(serviceKey
353c0 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 , null,..
353d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
353e0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 package.Pac
353f0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 kageId.ToString(
35400 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 VsIdFormat), wha
35410 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf,..
35420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35430 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 verbose);....
35440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35450 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 RegistryH
35460 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 elper.SetValue(s
35470 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 erviceKey, "Name
35480 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
35490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
354a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b String.Format("{
354b0 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65 72 76 0} Designer Serv
354c0 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d ice", ProjectNam
354d0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e),..
354e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
354f0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
35500 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
35510 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
35520 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
35530 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
35540 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
35550 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 n true;..
35560 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
355a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
355b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
355c0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
355d0 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 bool RemoveVsPac
355e0 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 kage(..
355f0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
35600 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 ey rootKey,..
35610 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e Version
35620 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 vsVersion,..
35630 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
35640 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 suffix,..
35650 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 Package pac
35660 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 kage,..
35670 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c bool perUser,
35680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
35690 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 ol wow64,..
356a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f bool thro
356b0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 wOnMissing,..
356c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 bool wh
356d0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 atIf,..
356e0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c bool verbose,
356f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
35700 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a f string error..
35710 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
35720 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
35730 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 if (vsVers
35740 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 ion == null)..
35750 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
35760 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
35770 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 or = "invalid VS
35780 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 version";..
35790 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
357a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
357b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
357c0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b if (pack
357d0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 age == null)..
357e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
35800 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 or = "invalid VS
35810 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 package";..
35820 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
35830 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
35840 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
35850 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b string k
35860 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 eyName = GetVsKe
35870 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c yName(vsVersion,
35880 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 suffix, perUser
35890 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 , wow64);....
358a0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 using (
358b0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
358c0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 key = RegistryHe
358d0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 lper.OpenSubKey(
358e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
358f0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b rootKey, k
35900 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 eyName, false, w
35910 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 hatIf, verbose))
35920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
35930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
35940 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c if (key == null
35950 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
35960 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
35970 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
35980 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 = String.Format(
35990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
359a0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 "could
359b0 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 not open regist
359c0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d ry key: {0}\\{1}
359d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
359e0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 root
359f0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a Key, keyName);..
35a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
35a10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
35a20 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se;..
35a30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
35a40 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 using
35a50 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 (MockRegistryKey
35a60 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 subKey = Regist
35a70 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 ryHelper.OpenSub
35a80 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 Key(..
35a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 ke
35aa0 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 y, "Packages", t
35ab0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 rue, whatIf, ver
35ac0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 bose))..
35ad0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
35ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
35af0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c f (subKey == nul
35b00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
35b10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35b30 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e error = Strin
35b40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
35b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35b60 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f "could no
35b70 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 t open registry
35b80 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 key: {0}\\Packag
35b90 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 es",..
35ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35bb0 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 key);....
35bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35bd0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
35be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
35bf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
35c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 R
35c10 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 egistryHelper.De
35c20 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d leteSubKeyTree(.
35c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
35c40 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c subKey,
35c50 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 package.Package
35c60 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 Id.ToString(VsId
35c70 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 Format),..
35c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35c90 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 whatIf, verbos
35ca0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e);..
35cb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
35cc0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 using
35cd0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 (MockRegistryKey
35ce0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 subKey = Regist
35cf0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 ryHelper.OpenSub
35d00 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 Key(..
35d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 ke
35d20 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 y, "Menus", true
35d30 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
35d40 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e))..
35d50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
35d60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
35d70 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d subKey == null).
35d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
35d90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35db0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 error = String.F
35dc0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35de0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f "could not o
35df0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 pen registry key
35e00 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a : {0}\\Menus",..
35e10 20 20 20 20 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 6b 65 79 29 key)
35e30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
35e50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
35e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35e70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
35e80 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 Registr
35e90 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61 yHelper.DeleteVa
35ea0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 lue(..
35eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 su
35ec0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 bKey, package.Pa
35ed0 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 ckageId.ToString
35ee0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 (VsIdFormat),..
35ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35f00 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 throwOnMi
35f10 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 ssing, whatIf, v
35f20 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 erbose);..
35f30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
35f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 u
35f50 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 sing (MockRegist
35f60 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 ryKey subKey = R
35f70 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 egistryHelper.Op
35f80 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 enSubKey(..
35f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35fa0 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 key, "Service
35fb0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 s", true, whatIf
35fc0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 , verbose))..
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
35fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35ff0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d if (subKey =
36000 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
36020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36030 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
36040 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
36050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36060 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 "cou
36070 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 ld not open regi
36080 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 stry key: {0}\\S
36090 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 ervices",..
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
360b0 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a key);....
360c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
360d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
360e0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alse;..
360f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
36100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36110 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 RegistryHelp
36120 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 er.DeleteSubKeyT
36130 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ree(..
36140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 su
36150 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 bKey, package.Se
36160 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 rviceId.ToString
36170 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 (VsIdFormat),..
36180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36190 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 whatIf, v
361a0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 erbose);..
361b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
361c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
361d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
361e0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 true;..
361f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f }.... ///
36200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36240 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
36250 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 private static b
36260 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63 ool ProcessVsPac
36270 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 kage(..
36280 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
36290 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 ey rootKey,..
362a0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e Version
362b0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 vsVersion,..
362c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
362d0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 suffix,..
362e0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 Package pac
362f0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 kage,..
36300 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 string direct
36310 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ory,..
36320 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 object clientD
36330 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ata,..
36340 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d bool perUser,.
36350 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f . boo
36360 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 l wow64,..
36370 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 bool throw
36380 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 OnMissing,..
36390 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 bool wha
363a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf,..
363b0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d bool verbose,.
363c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 . ref
363d0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 string error..
363e0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 )..
363f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
36400 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 AnyPair<str
36410 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 ing, bool> pair
36420 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 = clientData as
36430 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 AnyPair<string,
36440 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 bool>;....
36450 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d if (pair =
36460 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
36470 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
36480 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
36490 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c "invalid VS call
364a0 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 back data";..
364b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
364c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
364d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
364e0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 if (pai
364f0 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 r.Y)..
36500 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
36510 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 return AddV
36520 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 sPackage(..
36530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
36540 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f ootKey, vsVersio
36550 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 n, suffix, packa
36560 67 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55 ge, pair.X, perU
36570 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ser,..
36580 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c wow64,
36590 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
365a0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 , ref error);..
365b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
365c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a else..
365d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
365e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
365f0 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 eturn RemoveVsPa
36600 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 ckage(..
36610 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 root
36620 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 Key, vsVersion,
36630 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c suffix, package,
36640 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c perUser, wow64,
36650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
36660 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73 throwOnMis
36670 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 sing, whatIf, ve
36680 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 rbose, ref error
36690 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
366a0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }..
366b0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
366c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
366d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
366e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
366f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36710 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ///.... #
36720 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 region Visual St
36730 75 64 69 6f 20 53 65 74 75 70 20 48 61 6e 64 6c udio Setup Handl
36740 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 ing.. pri
36750 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 vate static void
36760 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 4f 75 VsDevEnvSetupOu
36770 74 70 75 74 44 61 74 61 52 65 63 65 69 76 65 64 tputDataReceived
36780 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f (.. o
36790 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 0d 0a 20 bject sender,..
367a0 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61 52 DataR
367b0 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73 eceivedEventArgs
367c0 20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e..
367d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 ).. {..
367e0 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73 Proces
367f0 73 20 70 72 6f 63 65 73 73 20 3d 20 73 65 6e 64 s process = send
36800 65 72 20 61 73 20 50 72 6f 63 65 73 73 3b 0d 0a er as Process;..
36810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72 .. Tr
36820 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
36830 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 race(TracePriori
36840 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 ty.Medium,..
36850 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 debu
36860 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 gCallback, trace
36870 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 Callback, String
36880 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
36890 20 20 20 20 20 20 20 20 20 20 56 73 44 65 76 45 VsDevE
368a0 6e 76 53 65 74 75 70 46 6f 72 6d 61 74 2c 20 70 nvSetupFormat, p
368b0 72 6f 63 65 73 73 2e 49 64 2c 20 65 2e 44 61 74 rocess.Id, e.Dat
368c0 61 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 a),..
368d0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f traceCatego
368e0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d ry);.. }.
368f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
36900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36940 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 //.... pr
36950 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 ivate static voi
36960 64 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 45 d VsDevEnvSetupE
36970 72 72 6f 72 44 61 74 61 52 65 63 65 69 76 65 64 rrorDataReceived
36980 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f (.. o
36990 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 0d 0a 20 bject sender,..
369a0 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61 52 DataR
369b0 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73 eceivedEventArgs
369c0 20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e..
369d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 ).. {..
369e0 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73 Proces
369f0 73 20 70 72 6f 63 65 73 73 20 3d 20 73 65 6e 64 s process = send
36a00 65 72 20 61 73 20 50 72 6f 63 65 73 73 3b 0d 0a er as Process;..
36a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72 .. Tr
36a20 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
36a30 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 race(TracePriori
36a40 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 ty.Medium,..
36a50 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 debu
36a60 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 gCallback, trace
36a70 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 Callback, String
36a80 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
36a90 20 20 20 20 20 20 20 20 20 20 56 73 44 65 76 45 VsDevE
36aa0 6e 76 53 65 74 75 70 46 6f 72 6d 61 74 2c 20 70 nvSetupFormat, p
36ab0 72 6f 63 65 73 73 2e 49 64 2c 20 65 2e 44 61 74 rocess.Id, e.Dat
36ac0 61 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 a),..
36ad0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f traceCatego
36ae0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d ry);.. }.
36af0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
36b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36b40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 //.... pr
36b50 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f ivate static boo
36b60 6c 20 41 64 64 56 73 44 65 76 45 6e 76 53 65 74 l AddVsDevEnvSet
36b70 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 up(..
36b80 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 Version vsVersi
36b90 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on,..
36ba0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 string director
36bb0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
36bc0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 bool perUser,..
36bd0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
36be0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 whatIf,..
36bf0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 bool verbos
36c00 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
36c10 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 ref string error
36c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d .. ).
36c30 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
36c40 20 20 20 20 20 20 20 20 69 66 20 28 70 65 72 55 if (perU
36c50 73 65 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ser)..
36c60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
36c70 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
36c80 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 // NOTE
36c90 3a 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 : Visual Studio
36ca0 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 does not support
36cb0 20 72 75 6e 6e 69 6e 67 20 69 6e 20 27 73 65 74 running in 'set
36cc0 75 70 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20 up'..
36cd0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f // mo
36ce0 64 65 20 6f 6e 20 61 20 70 65 72 2d 75 73 65 72 de on a per-user
36cf0 20 62 61 73 69 73 3b 20 74 68 65 72 65 66 6f 72 basis; therefor
36d00 65 2c 20 73 6b 69 70 20 72 75 6e 6e 69 6e 67 0d e, skip running.
36d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
36d20 20 2f 2f 20 20 20 20 20 20 20 69 74 20 69 6e 20 // it in
36d30 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20 that case...
36d40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
36d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36d60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
36d70 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f dTrace(TracePrio
36d80 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 rity.Medium,..
36d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36da0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c debugCallback,
36db0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 traceCallback,
36dc0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
36dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36de0 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64 "Visual Stud
36df0 69 6f 20 7b 30 7d 20 27 73 65 74 75 70 27 20 6d io {0} 'setup' m
36e00 6f 64 65 20 69 73 20 70 65 72 2d 6d 61 63 68 69 ode is per-machi
36e10 6e 65 20 6f 6e 6c 79 2c 20 22 20 2b 0d 0a 20 20 ne only, " +..
36e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36e30 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c "skipping...",
36e40 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 ForDisplay(vsVe
36e50 72 73 69 6f 6e 29 29 2c 20 74 72 61 63 65 43 61 rsion)), traceCa
36e60 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 tegory);....
36e70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
36e80 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 rn true;..
36e90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
36ea0 20 20 20 20 20 20 20 50 72 6f 63 65 73 73 53 74 ProcessSt
36eb0 61 72 74 49 6e 66 6f 20 73 74 61 72 74 49 6e 66 artInfo startInf
36ec0 6f 20 3d 20 6e 65 77 20 50 72 6f 63 65 73 73 53 o = new ProcessS
36ed0 74 61 72 74 49 6e 66 6f 28 29 3b 0d 0a 0d 0a 20 tartInfo();....
36ee0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
36ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f // NO
36f00 54 45 3a 20 53 65 74 20 74 68 65 20 63 6f 72 65 TE: Set the core
36f10 20 70 72 6f 70 65 72 74 69 65 73 20 66 6f 72 20 properties for
36f20 74 68 65 20 70 72 6f 63 65 73 73 20 74 6f 20 73 the process to s
36f30 74 61 72 74 2e 20 20 49 6e 20 74 68 69 73 0d 0a tart. In this..
36f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
36f50 20 20 20 20 20 63 61 73 65 2c 20 77 65 20 61 72 case, we ar
36f60 65 20 73 74 61 72 74 69 6e 67 20 74 68 65 20 70 e starting the p
36f70 72 69 6d 61 72 79 20 56 69 73 75 61 6c 20 53 74 rimary Visual St
36f80 75 64 69 6f 20 65 78 65 63 75 74 61 62 6c 65 0d udio executable.
36f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 . //
36fa0 20 20 20 20 20 20 28 64 65 76 65 6e 76 2e 65 78 (devenv.ex
36fb0 65 29 20 69 6e 20 22 73 65 74 75 70 22 20 6d 6f e) in "setup" mo
36fc0 64 65 2c 20 73 6f 20 74 68 61 74 20 69 74 20 63 de, so that it c
36fd0 61 6e 20 72 65 66 72 65 73 68 20 69 74 73 0d 0a an refresh its..
36fe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
36ff0 20 20 20 20 20 6c 69 73 74 20 6f 66 20 69 6e 73 list of ins
37000 74 61 6c 6c 65 64 20 70 61 63 6b 61 67 65 73 20 talled packages
37010 61 6e 64 20 74 68 65 69 72 20 61 73 73 6f 63 69 and their associ
37020 61 74 65 64 20 72 65 73 6f 75 72 63 65 73 2e 0d ated resources..
37030 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d . //.
37040 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 . sta
37050 72 74 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 20 rtInfo.FileName
37060 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 = Path.Combine(d
37070 69 72 65 63 74 6f 72 79 2c 20 22 64 65 76 65 6e irectory, "deven
37080 76 2e 65 78 65 22 29 3b 0d 0a 20 20 20 20 20 20 v.exe");..
37090 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e startInfo.
370a0 41 72 67 75 6d 65 6e 74 73 20 3d 20 22 2f 73 65 Arguments = "/se
370b0 74 75 70 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 tup";..
370c0 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72 startInfo.Wor
370d0 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 20 3d 20 kingDirectory =
370e0 64 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 directory;....
370f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
37100 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 // NOT
37110 45 3a 20 53 65 74 20 74 68 65 20 62 6f 6f 6c 65 E: Set the boole
37120 61 6e 20 66 6c 61 67 20 70 72 6f 70 65 72 74 69 an flag properti
37130 65 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 es that require
37140 6e 6f 6e 2d 64 65 66 61 75 6c 74 0d 0a 20 20 20 non-default..
37150 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
37160 20 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 values for the
37170 20 70 72 6f 63 65 73 73 20 74 6f 20 73 74 61 72 process to star
37180 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 t. In this case
37190 2c 20 77 65 20 64 6f 20 6e 6f 74 0d 0a 20 20 20 , we do not..
371a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
371b0 20 20 77 61 6e 74 20 74 68 65 20 73 68 65 6c 6c want the shell
371c0 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 to be used for
371d0 73 74 61 72 74 69 6e 67 20 74 68 65 20 70 72 6f starting the pro
371e0 63 65 73 73 2e 20 20 49 6e 0d 0a 20 20 20 20 20 cess. In..
371f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
37200 61 64 64 69 74 69 6f 6e 2c 20 62 6f 74 68 20 73 addition, both s
37210 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 20 61 tandard output a
37220 6e 64 20 65 72 72 6f 72 20 64 61 74 61 20 73 68 nd error data sh
37230 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 20 ould be..
37240 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 // re
37250 64 69 72 65 63 74 65 64 2c 20 73 6f 20 69 74 20 directed, so it
37260 63 61 6e 20 62 65 20 6c 6f 67 67 65 64 20 70 72 can be logged pr
37270 6f 70 65 72 6c 79 2e 0d 0a 20 20 20 20 20 20 20 operly...
37280 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
37290 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 55 startInfo.U
372a0 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 20 3d seShellExecute =
372b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
372c0 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 startInfo.R
372d0 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f edirectStandardO
372e0 75 74 70 75 74 20 3d 20 74 72 75 65 3b 0d 0a 20 utput = true;..
372f0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 start
37300 49 6e 66 6f 2e 52 65 64 69 72 65 63 74 53 74 61 Info.RedirectSta
37310 6e 64 61 72 64 45 72 72 6f 72 20 3d 20 74 72 75 ndardError = tru
37320 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e;....
37330 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63 65 73 Process proces
37340 73 20 3d 20 6e 65 77 20 50 72 6f 63 65 73 73 28 s = new Process(
37350 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
37360 20 20 70 72 6f 63 65 73 73 2e 4f 75 74 70 75 74 process.Output
37370 44 61 74 61 52 65 63 65 69 76 65 64 20 2b 3d 20 DataReceived +=
37380 6e 65 77 20 44 61 74 61 52 65 63 65 69 76 65 64 new DataReceived
37390 45 76 65 6e 74 48 61 6e 64 6c 65 72 28 0d 0a 20 EventHandler(..
373a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 V
373b0 73 44 65 76 45 6e 76 53 65 74 75 70 4f 75 74 70 sDevEnvSetupOutp
373c0 75 74 44 61 74 61 52 65 63 65 69 76 65 64 29 3b utDataReceived);
373d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
373e0 70 72 6f 63 65 73 73 2e 45 72 72 6f 72 44 61 74 process.ErrorDat
373f0 61 52 65 63 65 69 76 65 64 20 2b 3d 20 6e 65 77 aReceived += new
37400 20 44 61 74 61 52 65 63 65 69 76 65 64 45 76 65 DataReceivedEve
37410 6e 74 48 61 6e 64 6c 65 72 28 0d 0a 20 20 20 20 ntHandler(..
37420 20 20 20 20 20 20 20 20 20 20 20 20 56 73 44 65 VsDe
37430 76 45 6e 76 53 65 74 75 70 45 72 72 6f 72 44 61 vEnvSetupErrorDa
37440 74 61 52 65 63 65 69 76 65 64 29 3b 0d 0a 0d 0a taReceived);....
37450 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
37460 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 verbose)..
37470 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f TraceO
37480 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 ps.DebugAndTrace
37490 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 (TracePriority.H
374a0 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 ighest,..
374b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 deb
374c0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 ugCallback, trac
374d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
374e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
37500 66 69 6c 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 fileName = {0},
37510 61 72 67 75 6d 65 6e 74 73 20 3d 20 7b 31 7d 2c arguments = {1},
37520 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 " +..
37530 20 20 20 20 20 20 20 20 20 20 22 77 6f 72 6b 69 "worki
37540 6e 67 44 69 72 65 63 74 6f 72 79 20 3d 20 7b 32 ngDirectory = {2
37550 7d 2c 20 75 73 65 53 68 65 6c 6c 45 78 65 63 75 }, useShellExecu
37560 74 65 20 3d 20 7b 33 7d 2c 20 22 20 2b 0d 0a 20 te = {3}, " +..
37570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37580 20 20 20 22 72 65 64 69 72 65 63 74 53 74 61 6e "redirectStan
37590 64 61 72 64 4f 75 74 70 75 74 20 3d 20 7b 34 7d dardOutput = {4}
375a0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 , " +..
375b0 20 20 20 20 20 20 20 20 20 20 20 22 72 65 64 69 "redi
375c0 72 65 63 74 53 74 61 6e 64 61 72 64 45 72 72 6f rectStandardErro
375d0 72 20 3d 20 7b 35 7d 22 2c 20 46 6f 72 44 69 73 r = {5}", ForDis
375e0 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 play(..
375f0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 start
37600 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 29 2c 20 Info.FileName),
37610 46 6f 72 44 69 73 70 6c 61 79 28 73 74 61 72 74 ForDisplay(start
37620 49 6e 66 6f 2e 41 72 67 75 6d 65 6e 74 73 29 2c Info.Arguments),
37630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
37640 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
37650 28 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72 6b 69 (startInfo.Worki
37660 6e 67 44 69 72 65 63 74 6f 72 79 29 2c 20 46 6f ngDirectory), Fo
37670 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 rDisplay(..
37680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
37690 74 61 72 74 49 6e 66 6f 2e 55 73 65 53 68 65 6c tartInfo.UseShel
376a0 6c 45 78 65 63 75 74 65 29 2c 20 46 6f 72 44 69 lExecute), ForDi
376b0 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 splay(..
376c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 star
376d0 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74 53 74 tInfo.RedirectSt
376e0 61 6e 64 61 72 64 4f 75 74 70 75 74 29 2c 20 46 andardOutput), F
376f0 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 orDisplay(..
37700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37710 73 74 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 startInfo.Redire
37720 63 74 53 74 61 6e 64 61 72 64 45 72 72 6f 72 29 ctStandardError)
37730 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 ), traceCategory
37740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
37750 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
37760 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 27 77 // NOTE: In 'w
37770 68 61 74 2d 69 66 27 20 6d 6f 64 65 2c 20 64 6f hat-if' mode, do
37780 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74 not actually st
37790 61 72 74 20 74 68 65 20 70 72 6f 63 65 73 73 2e art the process.
377a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
377b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
377c0 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 (!whatIf)..
377d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
377e0 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 proce
377f0 73 73 2e 53 74 61 72 74 28 29 3b 0d 0a 20 20 20 ss.Start();..
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f pro
37810 63 65 73 73 2e 42 65 67 69 6e 4f 75 74 70 75 74 cess.BeginOutput
37820 52 65 61 64 4c 69 6e 65 28 29 3b 0d 0a 20 20 20 ReadLine();..
37830 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f pro
37840 63 65 73 73 2e 42 65 67 69 6e 45 72 72 6f 72 52 cess.BeginErrorR
37850 65 61 64 4c 69 6e 65 28 29 3b 0d 0a 20 20 20 20 eadLine();..
37860 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 proc
37870 65 73 73 2e 57 61 69 74 46 6f 72 45 78 69 74 28 ess.WaitForExit(
37880 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
37890 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
378a0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 return true;..
378b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
378c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
378d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
378e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
378f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
37910 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
37920 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 tatic bool Remov
37930 65 56 73 44 65 76 45 6e 76 53 65 74 75 70 28 0d eVsDevEnvSetup(.
37940 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 . Ver
37950 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d sion vsVersion,.
37960 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str
37970 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a ing directory,..
37980 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
37990 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 perUser,..
379a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 bool what
379b0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If,..
379c0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a bool verbose,..
379d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 ref
379e0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 string error..
379f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 )..
37a00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
37a10 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
37a20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 69 6e // NOTE: Sin
37a30 63 65 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f ce Visual Studio
37a40 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 does not have a
37a50 6e 20 27 75 6e 64 6f 27 20 6f 70 65 72 61 74 69 n 'undo' operati
37a60 6f 6e 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 on for..
37a70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73 // its
37a80 20 27 73 65 74 75 70 27 20 6d 6f 64 65 2c 20 73 'setup' mode, s
37a90 69 6d 70 6c 79 20 65 78 65 63 75 74 65 20 74 68 imply execute th
37aa0 65 20 73 61 6d 65 20 63 6f 6d 6d 61 6e 64 20 61 e same command a
37ab0 67 61 69 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 gain...
37ac0 20 20 20 2f 2f 20 20 20 20 20 20 20 54 68 69 73 // This
37ad0 20 73 68 6f 75 6c 64 20 66 6f 72 63 65 20 69 74 should force it
37ae0 20 74 6f 20 72 65 66 72 65 73 68 20 69 74 73 20 to refresh its
37af0 6c 69 73 74 20 6f 66 20 69 6e 73 74 61 6c 6c 65 list of installe
37b00 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f d.. /
37b10 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 73 / packages
37b20 20 61 6e 64 20 74 68 65 69 72 20 61 73 73 6f 63 and their assoc
37b30 69 61 74 65 64 20 72 65 73 6f 75 72 63 65 73 20 iated resources
37b40 28 69 2e 65 2e 20 74 68 69 73 20 77 69 6c 6c 0d (i.e. this will.
37b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 . //
37b60 20 20 20 20 20 20 65 66 66 65 63 74 69 76 65 6c effectivel
37b70 79 20 27 72 65 6d 6f 76 65 27 20 74 68 65 20 70 y 'remove' the p
37b80 61 63 6b 61 67 65 20 62 65 69 6e 67 20 70 72 6f ackage being pro
37b90 63 65 73 73 65 64 20 73 69 6e 63 65 0d 0a 20 20 cessed since..
37ba0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 //
37bb0 20 20 20 74 68 69 73 20 69 73 20 62 65 69 6e 67 this is being
37bc0 20 64 6f 6e 65 20 61 66 74 65 72 20 61 6c 6c 20 done after all
37bd0 74 68 65 20 6f 74 68 65 72 20 63 68 61 6e 67 65 the other change
37be0 73 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 s for the..
37bf0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
37c00 70 61 63 6b 61 67 65 20 72 65 6d 6f 76 61 6c 20 package removal
37c10 68 61 76 65 20 62 65 65 6e 20 63 6f 6d 70 6c 65 have been comple
37c20 74 65 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 ted)...
37c30 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
37c40 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 return AddVsD
37c50 65 76 45 6e 76 53 65 74 75 70 28 0d 0a 20 20 20 evEnvSetup(..
37c60 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 56 vsV
37c70 65 72 73 69 6f 6e 2c 20 64 69 72 65 63 74 6f 72 ersion, director
37c80 79 2c 20 70 65 72 55 73 65 72 2c 20 77 68 61 74 y, perUser, what
37c90 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 If, verbose, ref
37ca0 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 error);..
37cb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f }.... /
37cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37d00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
37d10 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
37d20 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 bool ProcessVsD
37d30 65 76 45 6e 76 53 65 74 75 70 28 0d 0a 20 20 20 evEnvSetup(..
37d40 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 MockReg
37d50 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 istryKey rootKey
37d60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 ,.. V
37d70 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e ersion vsVersion
37d80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ,.. s
37d90 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 tring suffix,..
37da0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 Packa
37db0 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 ge package,..
37dc0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
37dd0 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 directory,..
37de0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 object c
37df0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 lientData,..
37e00 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 bool per
37e10 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 User,..
37e20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a bool wow64,..
37e30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
37e40 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c throwOnMissing,
37e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
37e60 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 ol whatIf,..
37e70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 bool ver
37e80 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 bose,..
37e90 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 ref string er
37ea0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ror..
37eb0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 ).. {..
37ec0 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 AnyPa
37ed0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e ir<string, bool>
37ee0 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 pair = clientDa
37ef0 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 ta as AnyPair<st
37f00 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a ring, bool>;....
37f10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
37f20 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 pair == null)..
37f30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
37f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
37f50 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 ror = "invalid V
37f60 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 S callback data"
37f70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
37f80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
37f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
37fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
37fb0 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 f (pair.Y)..
37fc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
37fd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
37fe0 6e 20 41 64 64 56 73 44 65 76 45 6e 76 53 65 74 n AddVsDevEnvSet
37ff0 75 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 up(..
38000 20 20 20 20 20 20 20 20 20 76 73 56 65 72 73 69 vsVersi
38010 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 70 on, directory, p
38020 65 72 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20 erUser, whatIf,
38030 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 verbose, ref err
38040 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 or);..
38050 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
38060 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 else..
38070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
38080 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d return Rem
38090 6f 76 65 56 73 44 65 76 45 6e 76 53 65 74 75 70 oveVsDevEnvSetup
380a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
380b0 20 20 20 20 20 20 20 76 73 56 65 72 73 69 6f 6e vsVersion
380c0 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 70 65 72 , directory, per
380d0 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20 76 65 User, whatIf, ve
380e0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 rbose, ref error
380f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
38100 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }..
38110 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
38120 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 .. #endre
38130 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 gion....
38140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38180 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
38190 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69 #region Appli
381a0 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69 cation Entry Poi
381b0 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 nt.. [Met
381c0 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d hodImpl(MethodIm
381d0 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 plOptions.NoInli
381e0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 ning)]..
381f0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 private static i
38200 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20 nt Main(..
38210 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 string[] a
38220 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rgs..
38230 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 ).. {..
38240 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a try..
38250 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
38260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
38270 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e onfiguration con
38280 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c figuration = nul
38290 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l;..
382a0 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 string error
382b0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 = null;....
382c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
382d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
382e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
382f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
38310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 #
38320 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65 72 20 region Debugger
38330 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 Hook..
38340 20 20 20 20 20 20 69 66 20 28 45 6e 76 69 72 6f if (Enviro
38350 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f 6e nment.GetEnviron
38360 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22 42 72 mentVariable("Br
38370 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a eak") != null)..
38380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38390 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
383a0 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 Console.W
383b0 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 riteLine(..
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
383d0 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65 62 "Attach a deb
383e0 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73 ugger to process
383f0 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 20 {0} and " +..
38400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38410 20 20 20 20 20 20 22 70 72 65 73 73 20 61 6e 79 "press any
38420 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65 key to continue
38430 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .",..
38440 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f Pro
38450 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 cess.GetCurrentP
38460 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d rocess().Id);...
38470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
38480 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 try..
38490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
384a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
384b0 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 Console
384c0 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20 .ReadKey(true);
384d0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 /* throw */..
384e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
384f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
38500 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49 catch (I
38510 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 nvalidOperationE
38520 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e xception) // Con
38530 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20 sole.ReadKey..
38540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38550 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
38560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
38570 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 do nothing...
38580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38590 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
385a0 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 67 Debugg
385b0 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20 er.Break();..
385c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
385d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
385e0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 #endregion....
385f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
38600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
38640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
38650 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64 #region Command
38660 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67 Line Processing
38670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
38680 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61 if (!Configura
38690 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a tion.FromArgs(..
386a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
386b0 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74 72 args, tr
386c0 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72 ue, ref configur
386d0 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72 ation, ref error
386e0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 ) ||..
386f0 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 !Confi
38700 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73 guration.Process
38710 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
38720 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c args,
38730 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 configuration,
38740 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29 true, ref error)
38750 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ||..
38760 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 !Config
38770 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e uration.CheckRun
38780 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 timeVersion(..
38790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
387a0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
387b0 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65 ion, true, ref e
387c0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 rror))..
387d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
387e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
387f0 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 raceOps.ShowMess
38800 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 age(TracePriorit
38810 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 y.H