0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72 /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57 .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65 stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75 leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65 blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73 at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67 k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20 System;..using
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69 ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79 stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53 stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75 m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76 ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74 DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73 ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72 tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69 missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73 m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67 ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73 System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69 ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65 Lite..{.. #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65 gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72 gates.. inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69 nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 .. string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20 message, /* in
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 */.. stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69 ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a n */.. );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 ... internal
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72 delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 lback(..
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 */.. str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 20 20 ing invariant,
03d0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 .. string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 name,
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 /* in */..
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20 scription,
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 /* in */..
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f ame, /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 * in */..
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69 semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 n */.. ob
04a0: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c ject clientData,
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 /.. bool
04d0: 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20 20 perUser,
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 bool wow
0500: 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 64,
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 /* in */..
0520: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f bool throwO
0530: 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20 nMissing,
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 /* in */..
0550: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 bool whatIf,
0560: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 in */.. b
0580: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20 ool verbose,
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 /* in
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 */.. ref
05b0: 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20 20 20 20 bool saved,
05c0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f /* out */
05d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74 .. ref st
05e0: 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20 20 ring error
05f0: 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a /* out */..
0600: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f );.... //
0610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
0660: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 internal delega
0670: 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 te bool Framewor
0680: 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 kRegistryCallbac
0690: 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 k(.. Inst
06a0: 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 aller.MockRegist
06b0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f ryKey rootKey, /
06c0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 * in */..
06d0: 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 string framewor
06e0: 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 kName,
06f0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 /* in */..
0700: 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 Version fr
0710: 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 ameworkVersion,
0720: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a /* in *
0730: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e /.. strin
0740: 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 g platformName,
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a /*
0760: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 in */..
0770: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 object clientDat
0780: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a,
0790: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 /* in */..
07a0: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 bool perUse
07b0: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 r,
07c0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f /* in */
07d0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 .. bool w
07e0: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 ow64,
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
0800: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 in */.. b
0810: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 ool throwOnMissi
0820: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 ng,
0830: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 /* in */..
0840: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c bool whatIf,
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0860: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d /* in */.
0870: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 . bool ve
0880: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20 rbose,
0890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 /* i
08a0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 n */.. re
08b0: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 f string error
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
08d0: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 /* out */..
08e0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f );.... //////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0930: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 /////.... int
0940: 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 ernal delegate b
0950: 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64 69 6f ool VisualStudio
0960: 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b RegistryCallback
0970: 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 (.. Insta
0980: 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 ller.MockRegistr
0990: 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a yKey rootKey, /*
09a0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 in */..
09b0: 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f Version vsVersio
09c0: 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n,
09d0: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 /* in */..
09e0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 string suff
09f0: 69 78 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 ix,
0a00: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20 6f /* in, o
0a10: 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20 20 20 ptional */..
0a20: 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 50 61 Installer.Pa
0a30: 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 20 20 ckage package,
0a40: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d /* in */.
0a50: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object
0a60: 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 clientData,
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 /* i
0a80: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f n */.. bo
0a90: 6f 6c 20 70 65 72 55 73 65 72 2c 20 20 20 20 20 ol perUser,
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ab0: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 /* in */..
0ac0: 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20 bool wow64,
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ae0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a /* in */..
0af0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 bool thr
0b00: 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 owOnMissing,
0b10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e /* in
0b20: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f */.. boo
0b30: 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20 20 20 l whatIf,
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0b50: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 /* in */..
0b60: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 bool verbose,
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0b80: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 /* in */..
0b90: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e ref strin
0ba0: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20 g error
0bb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 /* out
0bc0: 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 20 20 20 */.. );..
0bd0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 #endregion....
0be0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
0c30: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 .. #region Pu
0c40: 62 6c 69 63 20 45 6e 75 6d 65 72 61 74 69 6f 6e blic Enumeration
0c50: 73 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d s.. [Flags()]
0c60: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 .. public enu
0c70: 6d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a m InstallFlags..
0c80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 {.. #
0c90: 72 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 46 6c region Normal Fl
0ca0: 61 67 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e ags.. Non
0cb0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20 e = 0x0,..
0cc0: 20 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 GlobalAssembly
0cd0: 43 61 63 68 65 20 3d 20 30 78 31 2c 0d 0a 20 20 Cache = 0x1,..
0ce0: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 46 6f AssemblyFo
0cf0: 6c 64 65 72 73 20 3d 20 30 78 32 2c 0d 0a 20 20 lders = 0x2,..
0d00: 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72 DbProvider
0d10: 46 61 63 74 6f 72 79 20 3d 20 30 78 34 2c 0d 0a Factory = 0x4,..
0d20: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67 VsPackag
0d30: 65 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 e = 0x8,..
0d40: 20 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 VsPackageGloba
0d50: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d lAssemblyCache =
0d60: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 0x10,..
0d70: 56 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20 30 VsDataSource = 0
0d80: 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 x20,.. Vs
0d90: 44 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20 30 DataProvider = 0
0da0: 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 x40,.. #e
0db0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 ndregion....
0dc0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
0e10: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 #region C
0e20: 6f 6d 70 6f 73 69 74 65 20 46 6c 61 67 73 0d 0a omposite Flags..
0e30: 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 Framewor
0e40: 6b 20 3d 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62 k = GlobalAssemb
0e50: 6c 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d 62 lyCache | Assemb
0e60: 6c 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20 20 lyFolders |..
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e80: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f DbProviderFacto
0e90: 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f ry,.... /
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
0ef0: 20 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67 65 Vs = VsPackage
0f00: 20 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 | VsPackageGlob
0f10: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 alAssemblyCache
0f20: 7c 20 56 73 44 61 74 61 53 6f 75 72 63 65 20 7c | VsDataSource |
0f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 56 .. V
0f40: 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 0d 0a sDataProvider,..
0f50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f .. //////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0fa0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c /.... All
0fb0: 20 3d 20 46 72 61 6d 65 77 6f 72 6b 20 7c 20 56 = Framework | V
0fc0: 73 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f s,.... //
0fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
0ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1010: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
1020: 20 41 6c 6c 45 78 63 65 70 74 47 6c 6f 62 61 6c AllExceptGlobal
1030: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 AssemblyCache =
1040: 41 6c 6c 20 26 20 7e 28 47 6c 6f 62 61 6c 41 73 All & ~(GlobalAs
1050: 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d 0a 20 semblyCache |..
1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1080: 20 20 20 20 20 20 56 73 50 61 63 6b 61 67 65 47 VsPackageG
1090: 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 lobalAssemblyCac
10a0: 68 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 he),.. #e
10b0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 ndregion....
10c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1110: 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d Default =
1120: 20 41 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 All.. }....
1130: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
1180: 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d .. [Flags()].
1190: 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d . public enum
11a0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a TracePriority..
11b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 4e {.. N
11c0: 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 one = 0x0,..
11d0: 20 20 20 20 4c 6f 77 65 73 74 20 3d 20 30 78 31 Lowest = 0x1
11e0: 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 72 ,.. Lower
11f0: 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 = 0x2,..
1200: 20 4c 6f 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20 Low = 0x4,..
1210: 20 20 20 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d MediumLow =
1220: 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d 0x8,.. M
1230: 65 64 69 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20 edium = 0x10,..
1240: 20 20 20 20 20 20 20 4d 65 64 69 75 6d 48 69 67 MediumHig
1250: 68 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 h = 0x20,..
1260: 20 20 20 48 69 67 68 20 3d 20 30 78 34 30 2c 0d High = 0x40,.
1270: 0a 20 20 20 20 20 20 20 20 48 69 67 68 65 72 20 . Higher
1280: 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 = 0x80,..
1290: 20 48 69 67 68 65 73 74 20 3d 20 30 78 31 30 30 Highest = 0x100
12a0: 2c 0d 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 ,.. Defau
12b0: 6c 74 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20 lt = Medium..
12c0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 }.. #endregi
12d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f on.... //////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1320: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 /////.... #re
1330: 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43 gion Installer C
1340: 6c 61 73 73 0d 0a 23 69 66 20 4e 45 54 5f 34 30 lass..#if NET_40
1350: 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 || NET_45 || NE
1360: 54 5f 34 35 31 0d 0a 20 20 20 20 5b 53 65 63 75 T_451.. [Secu
1370: 72 69 74 79 43 72 69 74 69 63 61 6c 28 29 5d 0d rityCritical()].
1380: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 5b 53 65 63 .#else.. [Sec
1390: 75 72 69 74 79 50 65 72 6d 69 73 73 69 6f 6e 28 urityPermission(
13a0: 53 65 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c SecurityAction.L
13b0: 69 6e 6b 44 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e inkDemand, Unman
13c0: 61 67 65 64 43 6f 64 65 20 3d 20 74 72 75 65 29 agedCode = true)
13d0: 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69 ]..#endif.. i
13e0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 nternal static c
13f0: 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a lass Installer..
1400: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 {.. #
1410: 72 65 67 69 6f 6e 20 55 6e 73 61 66 65 20 4e 61 region Unsafe Na
1420: 74 69 76 65 20 4d 65 74 68 6f 64 73 20 43 6c 61 tive Methods Cla
1430: 73 73 0d 0a 20 20 20 20 20 20 20 20 5b 53 75 70 ss.. [Sup
1440: 70 72 65 73 73 55 6e 6d 61 6e 61 67 65 64 43 6f pressUnmanagedCo
1450: 64 65 53 65 63 75 72 69 74 79 28 29 5d 0d 0a 20 deSecurity()]..
1460: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
1470: 65 61 6c 65 64 20 63 6c 61 73 73 20 55 6e 73 61 ealed class Unsa
1480: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 0d feNativeMethods.
1490: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 . {..#if
14a0: 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 WINDOWS..
14b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 #region Nat
14c0: 69 76 65 20 57 69 6e 33 32 20 43 6f 6e 73 74 61 ive Win32 Consta
14d0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nts..
14e0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 private const i
14f0: 6e 74 20 4d 41 58 5f 50 41 54 48 20 3d 20 32 36 nt MAX_PATH = 26
1500: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 0;....
1510: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1550: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
1560: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e private con
1570: 73 74 20 69 6e 74 20 43 53 49 44 4c 5f 53 59 53 st int CSIDL_SYS
1580: 54 45 4d 58 38 36 20 3d 20 30 78 30 30 32 39 3b TEMX86 = 0x0029;
1590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
15d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
15e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
15f0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 private const
1600: 20 69 6e 74 20 53 48 47 46 50 5f 54 59 50 45 5f int SHGFP_TYPE_
1610: 43 55 52 52 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a CURRENT = 0;....
1620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
1670: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
1680: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 rivate const int
1690: 20 53 5f 4f 4b 20 3d 20 30 3b 20 2f 2a 20 48 52 S_OK = 0; /* HR
16a0: 45 53 55 4c 54 20 2a 2f 0d 0a 20 20 20 20 20 20 ESULT */..
16b0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
16c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1710: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
1720: 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 #region Nativ
1730: 65 20 57 69 6e 64 6f 77 73 20 4d 65 74 68 6f 64 e Windows Method
1740: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b s.. [
1750: 44 6c 6c 49 6d 70 6f 72 74 28 22 73 68 66 6f 6c DllImport("shfol
1760: 64 65 72 2e 64 6c 6c 22 2c 0d 0a 20 20 20 20 20 der.dll",..
1770: 20 20 20 20 20 20 20 20 20 20 20 43 61 6c 6c 69 Calli
1780: 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 20 3d 20 43 ngConvention = C
1790: 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e allingConvention
17a0: 2e 57 69 6e 61 70 69 2c 0d 0a 20 20 20 20 20 20 .Winapi,..
17b0: 20 20 20 20 20 20 20 20 20 20 43 68 61 72 53 65 CharSe
17c0: 74 20 3d 20 43 68 61 72 53 65 74 2e 41 75 74 6f t = CharSet.Auto
17d0: 2c 20 42 65 73 74 46 69 74 4d 61 70 70 69 6e 67 , BestFitMapping
17e0: 20 3d 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 = false,..
17f0: 20 20 20 20 20 20 20 20 20 20 20 54 68 72 6f 77 Throw
1800: 4f 6e 55 6e 6d 61 70 70 61 62 6c 65 43 68 61 72 OnUnmappableChar
1810: 20 3d 20 74 72 75 65 2c 20 53 65 74 4c 61 73 74 = true, SetLast
1820: 45 72 72 6f 72 20 3d 20 74 72 75 65 29 5d 0d 0a Error = true)]..
1830: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 priv
1840: 61 74 65 20 73 74 61 74 69 63 20 65 78 74 65 72 ate static exter
1850: 6e 20 69 6e 74 20 53 48 47 65 74 46 6f 6c 64 65 n int SHGetFolde
1860: 72 50 61 74 68 28 0d 0a 20 20 20 20 20 20 20 20 rPath(..
1870: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 IntPtr h
1880: 57 6e 64 4f 77 6e 65 72 2c 20 69 6e 74 20 6e 46 WndOwner, int nF
1890: 6f 6c 64 65 72 2c 20 49 6e 74 50 74 72 20 68 54 older, IntPtr hT
18a0: 6f 6b 65 6e 2c 20 75 69 6e 74 20 66 6c 61 67 73 oken, uint flags
18b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
18c0: 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 65 72 IntPtr buffer
18d0: 20 2f 2a 20 3e 3d 20 4d 41 58 5f 50 41 54 48 20 /* >= MAX_PATH
18e0: 2a 2f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 */);..
18f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
1900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
1950: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... #
1960: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 57 72 region Public Wr
1970: 61 70 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 apper Methods..
1980: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
1990: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 c static string
19a0: 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f GetSystemDirecto
19b0: 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ry()..
19c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
19d0: 20 20 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 IntPtr buff
19e0: 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f er = IntPtr.Zero
19f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1a00: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 try..
1a10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a30: 20 62 75 66 66 65 72 20 3d 20 4d 61 72 73 68 61 buffer = Marsha
1a40: 6c 2e 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d l.AllocCoTaskMem
1a50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
1a60: 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f sizeo
1a70: 66 28 63 68 61 72 29 20 2a 20 28 4d 41 58 5f 50 f(char) * (MAX_P
1a80: 41 54 48 20 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20 ATH + 1));....
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aa0: 20 20 69 66 20 28 62 75 66 66 65 72 20 21 3d 20 if (buffer !=
1ab0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 IntPtr.Zero)..
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
1af0: 28 53 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68 (SHGetFolderPath
1b00: 28 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 (IntPtr.Zero,..
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
1b30: 53 49 44 4c 5f 53 59 53 54 45 4d 58 38 36 2c 20 SIDL_SYSTEMX86,
1b40: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 IntPtr.Zero,..
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 48 SH
1b70: 47 46 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 GFP_TYPE_CURRENT
1b80: 2c 20 62 75 66 66 65 72 29 20 3d 3d 20 53 5f 4f , buffer) == S_O
1b90: 4b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 K)..
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bc0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
1bd0: 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 n Marshal.PtrToS
1be0: 74 72 69 6e 67 41 75 74 6f 28 62 75 66 66 65 72 tringAuto(buffer
1bf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
1c30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
1c40: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 catch (
1c50: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 Exception e)..
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
1c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c80: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
1ca0: 54 4f 44 4f 3a 20 49 73 20 74 68 69 73 20 74 68 TODO: Is this th
1cb0: 65 20 72 69 67 68 74 20 65 72 72 6f 72 20 68 61 e right error ha
1cc0: 6e 64 6c 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d ndling solution.
1cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1ce0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f // to
1cf0: 20 75 73 65 20 61 74 20 74 68 69 73 20 70 6f 69 use at this poi
1d00: 6e 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nt?..
1d10: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d30: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
1d40: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 ndTrace(TracePri
1d50: 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 ority.MediumHigh
1d60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
1d70: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 debug
1d80: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 Callback, traceC
1d90: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
1da0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dc0: 20 22 43 6f 75 6c 64 20 6e 6f 74 20 67 65 74 20 "Could not get
1dd0: 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 system directory
1de0: 3a 20 7b 30 7d 22 2c 20 65 29 2c 0d 0a 20 20 20 : {0}", e),..
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e00: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f traceCatego
1e10: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ry);....
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f thro
1e30: 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 w;..
1e40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
1e50: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a finally..
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
1e80: 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66 65 if (buffe
1e90: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f r != IntPtr.Zero
1ea0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
1eb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ed0: 20 20 4d 61 72 73 68 61 6c 2e 46 72 65 65 43 6f Marshal.FreeCo
1ee0: 54 61 73 6b 4d 65 6d 28 62 75 66 66 65 72 29 3b TaskMem(buffer);
1ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1f00: 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72 buffer
1f10: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d = IntPtr.Zero;.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1f30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
1f40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
1f60: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 urn null;..
1f70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
1f80: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
1f90: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 ..#endif..
1fa0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e }.. #en
1fb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 dregion....
1fc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
2010: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 #region Pr
2020: 69 76 61 74 65 20 48 65 6c 70 65 72 20 43 6c 61 ivate Helper Cla
2030: 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20 23 72 sses.. #r
2040: 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20 43 6c egion AnyPair Cl
2050: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 ass.. pri
2060: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 vate sealed clas
2070: 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 s AnyPair<T1, T2
2080: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 >.. {..
2090: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f #regio
20a0: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 n Public Constru
20b0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 ctors..
20c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
20d0: 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 // WARNING: T
20e0: 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 his constructor
20f0: 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d 6d 75 produces an immu
2100: 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20 70 61 table "empty" pa
2110: 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ir..
2120: 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 // obje
2130: 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ct...
2140: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
2150: 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28 public AnyPair(
2160: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
2170: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 : base()..
2180: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2190: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 // d
21a0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 o nothing...
21b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
21c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
21d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
2210: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
2220: 69 63 20 41 6e 79 50 61 69 72 28 54 31 20 78 29 ic AnyPair(T1 x)
2230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2240: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 : this()..
2250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
2260: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
2270: 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20 20 20 x = x;..
2280: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
2290: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
22e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 public A
22f0: 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54 32 20 nyPair(T1 x, T2
2300: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y)..
2310: 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d 0a 20 : this(x)..
2320: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
2330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 th
2340: 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20 20 20 is.y = y;..
2350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
2360: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
2370: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
23d0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 #region Publi
23e0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 c Properties..
23f0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
2400: 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20 20 20 e T1 x;..
2410: 20 20 20 20 20 70 75 62 6c 69 63 20 54 31 20 58 public T1 X
2420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
2430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2440: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 78 3b get { return x;
2450: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
2460: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
2470: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
24c0: 20 20 20 20 70 72 69 76 61 74 65 20 54 32 20 79 private T2 y
24d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
24e0: 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20 20 20 ublic T2 Y..
24f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
2500: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b get {
2510: 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a 20 20 return y; }..
2520: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
2530: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 #endreg
2540: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ion.. }..
2550: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 #endregi
2560: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f on.... //
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
25c0: 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 4f 70 #region TraceOp
25d0: 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 s Class..
25e0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
25f0: 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73 0d 0a class TraceOps..
2600: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
2610: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 #region P
2620: 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 rivate Constants
2630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 .. pr
2640: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 ivate const stri
2650: 6e 67 20 44 65 66 61 75 6c 74 44 65 62 75 67 46 ng DefaultDebugF
2660: 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20 ormat = "#{0} @
2670: 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20 20 {1}: {2}";..
2680: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
2690: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66 const string Def
26a0: 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 20 aultTraceFormat
26b0: 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b = "#{0} @ {1}: {
26c0: 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2}";....
26d0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 private cons
26e0: 74 20 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 t string Iso8601
26f0: 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f DateTimeOutputFo
2700: 72 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 rmat =..
2710: 20 20 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d "yyyy.MM
2720: 2e 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 .ddTHH:mm:ss.fff
2730: 66 66 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 ffff";..
2740: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a #endregion..
2750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
2760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
27a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
27b0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 #region Private
27c0: 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 Static Data..
27d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
27e0: 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 e static object
27f0: 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f syncRoot = new o
2800: 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 bject();..
2810: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
2820: 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 atic long nextDe
2830: 62 75 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 bugId;..
2840: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
2850: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 ic long nextTrac
2860: 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 eId;..
2870: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
2880: 20 49 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 IList<TraceList
2890: 65 6e 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 ener> debugListe
28a0: 6e 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 ners;..
28b0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
28c0: 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 c TracePriority
28d0: 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 debugPriority =
28e0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 TracePriority.De
28f0: 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 fault;..
2900: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
2910: 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 ic TracePriority
2920: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d tracePriority =
2930: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 TracePriority.D
2940: 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 efault;..
2950: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
2960: 74 69 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 tic string debug
2970: 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 Format = Default
2980: 44 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 DebugFormat;..
2990: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 privat
29a0: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 e static string
29b0: 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 traceFormat = De
29c0: 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 faultTraceFormat
29d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ;.. #
29e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 endregion....
29f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
2a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 #reg
2a50: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 ion Public Stati
2a60: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 c Properties..
2a70: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
2a80: 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 static TracePri
2a90: 6f 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 ority DebugPrior
2aa0: 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ity..
2ab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2ac0: 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 get { lock (
2ad0: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 syncRoot) { retu
2ae0: 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 rn debugPriority
2af0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ; } }..
2b00: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 set { loc
2b10: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 k (syncRoot) { d
2b20: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 ebugPriority = v
2b30: 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 alue; } }..
2b40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
2b50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
2b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
2ba0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
2bb0: 63 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 c static TracePr
2bc0: 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f iority TracePrio
2bd0: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 rity..
2be0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
2bf0: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 get { lock
2c00: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 (syncRoot) { ret
2c10: 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 urn tracePriorit
2c20: 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 y; } }..
2c30: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f set { lo
2c40: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 ck (syncRoot) {
2c50: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 tracePriority =
2c60: 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 value; } }..
2c70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
2c80: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
2c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
2ce0: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 ic static string
2cf0: 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 DebugFormat..
2d00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 get
2d20: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f { lock (syncRoo
2d30: 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 t) { return debu
2d40: 67 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 gFormat; } }..
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
2d60: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f t { lock (syncRo
2d70: 6f 74 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 ot) { debugForma
2d80: 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a t = value; } }..
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
2da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
2db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2e00: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 public static st
2e10: 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 ring TraceFormat
2e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
2e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2e40: 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e get { lock (syn
2e50: 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 cRoot) { return
2e60: 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d traceFormat; } }
2e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2e80: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 set { lock (sy
2e90: 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 ncRoot) { traceF
2ea0: 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d ormat = value; }
2eb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
2ec0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 }.. #
2ed0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 endregion....
2ee0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 #reg
2f40: 69 6f 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 ion Interactive
2f50: 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d Support Methods.
2f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 . [Me
2f70: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 thodImpl(MethodI
2f80: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c mplOptions.NoInl
2f90: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 ining)]..
2fa0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 public stat
2fb0: 69 63 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 ic DialogResult
2fc0: 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 ShowMessage(..
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
2fe0: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 acePriority trac
2ff0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 ePriority,..
3000: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
3010: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 eCallback debugC
3020: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 allback,..
3030: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 TraceC
3040: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c allback traceCal
3050: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 lback,..
3060: 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 Assembly
3070: 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 assembly,..
3080: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
3090: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 ng message,..
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
30b0: 69 6e 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 ing category,..
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d M
30d0: 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 essageBoxButtons
30e0: 20 62 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 buttons,..
30f0: 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 Messa
3100: 67 65 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a geBoxIcon icon..
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3120: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
3130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3140: 20 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 DialogResult r
3150: 65 73 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 esult = DialogRe
3160: 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 sult.OK;....
3170: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 Debu
3180: 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 gAndTrace(traceP
3190: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 riority,..
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
31b0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 bugCallback, tra
31c0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 ceCallback, mess
31d0: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d age, category);.
31e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
31f0: 20 20 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 if (SystemInf
3200: 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 ormation.UserInt
3210: 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 eractive)..
3220: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
3230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3240: 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d string title =
3250: 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c GetAssemblyTitl
3260: 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a e(assembly);....
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3280: 20 20 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d if (title ==
3290: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32b0: 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 title = Applicat
32c0: 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b ion.ProductName;
32d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
32e0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d result =
32f0: 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 MessageBox.Show
3300: 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c (message, title,
3310: 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b buttons, icon);
3320: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
3330: 20 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 DebugAnd
3340: 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 Trace(tracePrior
3350: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ity,..
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
3370: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 bugCallback, tra
3380: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 ceCallback, Stri
3390: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33b0: 20 20 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 "User choice
33c0: 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 of {0}.", ForDi
33d0: 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d splay(result)),.
33e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
33f0: 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 categor
3400: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
3410: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
3420: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 n result;..
3430: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3450: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 DebugAndTrace(tr
3460: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 acePriority,..
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3480: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c debugCallback,
3490: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 traceCallback,
34a0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34c0: 20 20 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f "Default cho
34d0: 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f ice of {0}.", Fo
34e0: 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 rDisplay(result)
34f0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
3500: 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 category
3510: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
3520: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 return res
3530: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ult;..
3540: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
3550: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 #endregion....
3560: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
3570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
35b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 .. #r
35c0: 65 67 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 egion Tracing Su
35d0: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 pport Methods..
35e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
35f0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 c static void Se
3600: 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 tupDebugListener
3610: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s()..
3620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
3630: 20 20 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 if (debugLis
3640: 74 65 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d teners == null).
3650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3660: 20 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e debugListen
3670: 65 72 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 ers = new List<T
3680: 72 61 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b raceListener>();
3690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
36a0: 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 debugListene
36b0: 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f rs.Add(new Conso
36c0: 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 leTraceListener(
36d0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ));..
36e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
36f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
3700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
3740: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 public stat
3750: 69 63 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 ic long NextDebu
3760: 67 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 gId()..
3770: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
3780: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 return Int
3790: 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 erlocked.Increme
37a0: 6e 74 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 nt(ref nextDebug
37b0: 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 Id);..
37c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
37d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
3810: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
3820: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 public sta
3830: 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 tic long NextTra
3840: 63 65 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 ceId()..
3850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
3860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e return In
3870: 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d terlocked.Increm
3880: 65 6e 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 ent(ref nextTrac
3890: 65 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 eId);..
38a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
38b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
3900: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 public st
3910: 61 74 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 atic string Time
3920: 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 Stamp(DateTime d
3930: 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 ateTime)..
3940: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
3950: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
3960: 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e dateTime.ToStrin
3970: 67 28 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d g(Iso8601DateTim
3980: 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d eOutputFormat);.
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
39a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
39c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
39d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
39e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
39f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
3a00: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 [MethodImpl(Met
3a10: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e hodImplOptions.N
3a20: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 oInlining)]..
3a30: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
3a40: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 static string G
3a50: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 etMethodName(..
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S
3a70: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 tackTrace stackT
3a80: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 race,..
3a90: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c int level
3aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3ab0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )..
3ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
3ad0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 try..
3ae0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3b00: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
3b10: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a // NOTE:
3b20: 20 49 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 If a valid stac
3b30: 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 k trace was not
3b40: 73 75 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d supplied by the.
3b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3b60: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 // ca
3b70: 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 ller, create one
3b80: 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 now based on th
3b90: 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 e current..
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
3bb0: 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 69 6f / executio
3bc0: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 n stack...
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
3be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3bf0: 20 20 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 if (stackT
3c00: 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 race == null)..
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3c20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3c50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 // NOT
3c60: 45 3a 20 47 72 61 62 20 74 68 65 20 63 75 72 72 E: Grab the curr
3c70: 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 ent execution st
3c80: 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ack...
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
3ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
3cb0: 20 20 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 stackT
3cc0: 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b race = new Stack
3cd0: 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 Trace();....
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3cf0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d10: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 // NOTE: Always
3d20: 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 skip this call f
3d30: 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 rame when we cap
3d40: 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ture..
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
3d60: 20 20 20 20 20 20 20 74 68 65 20 73 74 61 63 6b the stack
3d70: 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 trace...
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d90: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 lev
3db0: 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 el++;..
3dc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3de0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e // N
3e00: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 OTE: Get the spe
3e10: 63 69 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 cified stack fra
3e20: 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f me (always add o
3e30: 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 ne to..
3e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
3e50: 20 20 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 skip this me
3e60: 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 thod)...
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e90: 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 StackFrame s
3ea0: 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 tackFrame = stac
3eb0: 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 kTrace.GetFrame(
3ec0: 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 level);....
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
3ee0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
3ef0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 // NOTE:
3f00: 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 Get the method f
3f10: 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 or the stack fra
3f20: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me...
3f30: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f50: 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 MethodBase meth
3f60: 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 odBase = stackFr
3f70: 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b ame.GetMethod();
3f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
3f90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3fb0: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 // NOTE: Get the
3fc0: 20 74 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 type for the me
3fd0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 thod...
3fe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4000: 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d Type type = m
4010: 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 ethodBase.Declar
4020: 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 ingType;....
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4040: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
4050: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a // NOTE:
4060: 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 Get the name of
4070: 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 the method...
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4090: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
40a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
40b0: 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 name = methodBa
40c0: 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 se.Name;....
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
40e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
40f0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a // NOTE:
4100: 20 52 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 Return the prop
4110: 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 erly formatted r
4120: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 esult...
4130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4150: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e return Strin
4160: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4180: 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 "{0}{1}{2}",
4190: 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e type.Name, Type.
41a0: 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 Delimiter, name)
41b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
41c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
41d0: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 catch..
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4200: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e // do nothin
4210: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g...
4220: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
4230: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
4240: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 null;..
4250: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
4260: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
4270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
42a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
42b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 public st
42c0: 61 74 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 atic void DebugC
42d0: 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ore(..
42e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 string mes
42f0: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 sage,..
4300: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 string ca
4310: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 tegory..
4320: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
4330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
4340: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 lock (
4350: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 syncRoot)..
4360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4380: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 if (debugListe
4390: 6e 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 ners != null)..
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
43b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo
43d0: 72 65 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 reach (TraceList
43e0: 65 6e 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e ener listener in
43f0: 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 debugListeners)
4400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
4410: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4430: 20 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 listene
4440: 72 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 r.WriteLine(mess
4450: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d age, category);.
4460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 lis
4480: 74 65 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a tener.Flush();..
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
44a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
44c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
44d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
44e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
44f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
4500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4530: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
4540: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 public stat
4550: 69 63 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 ic void TraceCor
4560: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
4570: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 string messa
4580: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ge,..
4590: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 string cate
45a0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 gory..
45b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
45c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
45d0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 lock (sy
45e0: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 ncRoot)..
45f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4610: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
4620: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a // NOTE:
4630: 20 57 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 Write the messa
4640: 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 ge to all the ac
4650: 74 69 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 tive trace..
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4670: 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 // listene
4680: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rs...
4690: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
46b0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 Trace.WriteLine
46c0: 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f (message, catego
46d0: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ry);..
46e0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e Trace.
46f0: 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 Flush();..
4700: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
4710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
4720: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
4770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 . [Me
4780: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 thodImpl(MethodI
4790: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c mplOptions.NoInl
47a0: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 ining)]..
47b0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 public stat
47c0: 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 ic string DebugA
47d0: 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 ndTrace(..
47e0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 TraceP
47f0: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 riority tracePri
4800: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 ority,..
4810: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c TraceCal
4820: 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 lback debugCallb
4830: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ack,..
4840: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 TraceCallb
4850: 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 ack traceCallbac
4860: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 k,..
4870: 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 Exception ex
4880: 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 ception,..
4890: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
48a0: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 category..
48b0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 )..
48c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
48e0: 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 (exception != nu
48f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
4900: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
4910: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 DebugAndTrace(tr
4920: 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 acePriority, deb
4930: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 ugCallback,..
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4950: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
4960: 63 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 ck, new StackTra
4970: 63 65 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 ce(exception, tr
4980: 75 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 ue), 0,..
4990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
49a0: 20 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 exception.ToStr
49b0: 69 6e 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 ing(), category)
49c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
49d0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c return null
49e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
49f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4a40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
4a50: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d [MethodImpl(M
4a60: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 ethodImplOptions
4a70: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 .NoInlining)]..
4a80: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
4a90: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 c static string
4aa0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a DebugAndTrace(..
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ac0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 TracePriority tr
4ad0: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 acePriority,..
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
4af0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 aceCallback debu
4b00: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 gCallback,..
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
4b20: 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 eCallback traceC
4b30: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 allback,..
4b40: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
4b50: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 message,..
4b60: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
4b70: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 g category..
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
4b90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
4bb0: 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 turn DebugAndTra
4bc0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ce(..
4bd0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 50 72 tracePr
4be0: 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c iority, debugCal
4bf0: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c lback, traceCall
4c00: 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a back, null, 1,..
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c20: 20 20 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 message, cat
4c30: 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 egory);..
4c40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
4c50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
4c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
4c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
4ca0: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 [Method
4cb0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f Impl(MethodImplO
4cc0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e ptions.NoInlinin
4cd0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 g)]..
4ce0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
4cf0: 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 string DebugAndT
4d00: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 race(..
4d10: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f TracePrio
4d20: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 rity tracePriori
4d30: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ty,..
4d40: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 TraceCallba
4d50: 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b ck debugCallback
4d60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
4d70: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b TraceCallback
4d80: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d traceCallback,.
4d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4da0: 20 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 StackTrace stac
4db0: 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 kTrace,..
4dc0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 int lev
4dd0: 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 el,..
4de0: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 string mess
4df0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 age,..
4e00: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 string cat
4e10: 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 egory..
4e20: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
4e30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
4e40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
4e60: 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 NOTE: Always ski
4e70: 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d p this call fram
4e80: 65 20 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 e if the stack t
4e90: 72 61 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 race is..
4ea0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
4eb0: 20 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 going to be ca
4ec0: 70 74 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 ptured by GetMet
4ed0: 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 hodName...
4ee0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
4f00: 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 (stackTrace ==
4f10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
4f20: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c level
4f30: 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ++;....
4f40: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
4f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f // NO
4f60: 54 45 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d TE: Format the m
4f70: 65 73 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c essage for displ
4f80: 61 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 ay (once)...
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4fb0: 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 string formatted
4fc0: 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 = String.Format
4fd0: 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 ("{0}: {1}",..
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ff0: 20 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 GetMethodName(
5000: 73 74 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 stackTrace, leve
5010: 6c 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d l), message);...
5020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5030: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
5040: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 // NOTE: If
5050: 20 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 the debug callb
5060: 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f ack is invalid o
5070: 72 20 74 68 65 20 74 72 61 63 65 20 70 72 69 6f r the trace prio
5080: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 rity..
5090: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f // o
50a0: 66 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 f this message i
50b0: 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 s less than what
50c0: 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 we currently wa
50d0: 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 nt to..
50e0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
50f0: 64 65 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d debug, skip it..
5100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5110: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
5120: 20 20 20 20 20 69 66 20 28 28 64 65 62 75 67 43 if ((debugC
5130: 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 allback != null)
5140: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 &&..
5150: 20 20 20 20 20 20 20 20 20 28 74 72 61 63 65 50 (traceP
5160: 72 69 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 riority >= Debug
5170: 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 Priority))..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
51a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
51b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f // NO
51c0: 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 TE: Invoke the d
51d0: 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 ebug callback wi
51e0: 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 th the formatted
51f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5200: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d // m
5210: 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 essage and the c
5220: 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 ategory specifie
5230: 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 d by the..
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
5250: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a caller...
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5270: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
5280: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 debu
5290: 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 gCallback(format
52a0: 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d ted, category);.
52b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
52c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
52d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
52e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 // NOT
52f0: 45 3a 20 49 66 20 74 68 65 20 74 72 61 63 65 20 E: If the trace
5300: 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 callback is inva
5310: 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 lid or the trace
5320: 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 priority..
5330: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
5340: 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 of this mess
5350: 61 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e age is less than
5360: 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 what we current
5370: 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 ly want to..
5380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
5390: 20 20 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 trace, skip
53a0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 it...
53b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
53c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 74 if ((t
53d0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 raceCallback !=
53e0: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 null) &&..
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 (t
5400: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 racePriority >=
5410: 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d TracePriority)).
5420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
5440: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5460: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 // NOTE: Invoke
5470: 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 the trace callba
5480: 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d ck with the form
5490: 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 atted..
54a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
54b0: 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 message and
54c0: 74 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 the category spe
54d0: 63 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 cified by the..
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
54f0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c // call
5500: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er...
5510: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5530: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 traceCallback(f
5540: 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f ormatted, catego
5550: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ry);..
5560: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
5570: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
5580: 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 n message;..
5590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
55a0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f #endregio
55b0: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 n.. }..
55c0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
55d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
55e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
55f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5620: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ///.... #
5630: 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 region MockRegis
5640: 74 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 try Class..
5650: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 private seale
5660: 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 d class MockRegi
5670: 73 74 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 stry : IDisposab
5680: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 le.. {..
5690: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 #regi
56a0: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 on Public Constr
56b0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 uctors..
56c0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 public MockR
56d0: 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 egistry()..
56e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
56f0: 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 whatIf
5700: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 = true;..
5710: 20 20 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e readOn
5720: 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 ly = true;..
5730: 20 20 20 20 20 20 20 20 20 20 20 20 73 61 66 65 safe
5740: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 = true;..
5750: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
5760: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
5770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
57a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
57b0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
57c0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a MockRegistry(..
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57e0: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 bool whatIf..
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5810: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 : this()..
5820: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
5830: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 this.wh
5840: 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a atIf = whatIf;..
5850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
5860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
5870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
58a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
58b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
58c0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 public MockRegis
58d0: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 try(..
58e0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
58f0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
5900: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c bool readOnl
5910: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y..
5920: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 )..
5930: 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 : this(wha
5940: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf)..
5950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
5960: 20 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e this.readOn
5970: 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a ly = readOnly;..
5980: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
5990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
59b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
59c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
59d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
59e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
59f0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 public MockRegis
5a00: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 try(..
5a10: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
5a20: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
5a30: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c bool readOnl
5a40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
5a50: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 bool safe..
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 )
5a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5a80: 20 20 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c : this(whatIf,
5a90: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 readOnly)..
5aa0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
5ab0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
5ac0: 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 safe = safe;..
5ad0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
5ae0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 #endreg
5af0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ion....
5b00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
5b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5b40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
5b50: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 #region Pu
5b60: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d blic Properties.
5b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
5b80: 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 vate bool whatIf
5b90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
5ba0: 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 ublic bool WhatI
5bb0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b f.. {
5bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5bd0: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 get { CheckDis
5be0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 posed(); return
5bf0: 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 whatIf; }..
5c00: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
5c10: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 CheckDisposed()
5c20: 3b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 ; whatIf = value
5c30: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
5c40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
5c50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5c90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
5ca0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f private boo
5cb0: 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 l readOnly;..
5cc0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
5cd0: 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 bool ReadOnly..
5ce0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
5cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 ge
5d00: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 t { CheckDispose
5d10: 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 d(); return read
5d20: 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 Only; }..
5d30: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 set { C
5d40: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 heckDisposed();
5d50: 72 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 readOnly = value
5d60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
5d70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
5d80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5dc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
5dd0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f private boo
5de0: 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 l safe;..
5df0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c public bool
5e00: 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 Safe..
5e10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
5e20: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 get { Chec
5e30: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 kDisposed(); ret
5e40: 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 urn safe; }..
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
5e60: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 { CheckDisposed
5e70: 28 29 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 (); safe = value
5e80: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
5e90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
5ea0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
5eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
5ee0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
5ef0: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 private Moc
5f00: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 kRegistryKey cla
5f10: 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 ssesRoot;..
5f20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f public Mo
5f30: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c ckRegistryKey Cl
5f40: 61 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 assesRoot..
5f50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
5f60: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 get..
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
5f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
5f90: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f CheckDispo
5fa0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 sed();....
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
5fc0: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d (classesRoot ==
5fd0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ff0: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 classesRoot = ne
6000: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 w MockRegistryKe
6010: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6030: 52 65 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 Registry.Classes
6040: 52 6f 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 Root, whatIf, re
6050: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a adOnly, safe);..
6060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
6070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 return cla
6080: 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 ssesRoot;..
6090: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
60a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
60b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
60e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
60f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
6100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 .. pr
6110: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 ivate MockRegist
6120: 72 79 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e ryKey currentCon
6130: 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 fig;..
6140: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 public MockReg
6150: 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 istryKey Current
6160: 43 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 Config..
6170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
6180: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 get..
6190: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
61b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 CheckDisposed
61c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ();....
61d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 if (c
61e0: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 urrentConfig ==
61f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
6210: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e urrentConfig = n
6220: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b ew MockRegistryK
6230: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ey(..
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6250: 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e Registry.Curren
6260: 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c tConfig, whatIf,
6270: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 readOnly, safe)
6280: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
6290: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
62a0: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a currentConfig;..
62b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
62c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
62d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
62e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6320: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
6330: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 private MockR
6340: 65 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 egistryKey curre
6350: 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 ntUser;..
6360: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b public Mock
6370: 52 65 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 RegistryKey Curr
6380: 65 6e 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 entUser..
6390: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
63a0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 get..
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
63d0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 CheckDispose
63e0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 d();....
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
6400: 63 75 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e currentUser == n
6410: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 cu
6430: 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 rrentUser = new
6440: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 MockRegistryKey(
6450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
6470: 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 gistry.CurrentUs
6480: 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 er, whatIf, read
6490: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a Only, safe);....
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64b0: 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 return curre
64c0: 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 ntUser;..
64d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
64e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
64f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
6540: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 priv
6550: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 ate MockRegistry
6560: 4b 65 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 Key dynData;..
6570: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
6580: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 MockRegistryKey
6590: 20 44 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 DynData..
65a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
65b0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 get..
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
65d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
65e0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 CheckDispos
65f0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ed();....
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
6610: 28 64 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c (dynData == null
6620: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
6630: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 dynDa
6640: 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 ta = new MockReg
6650: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 istryKey(..
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6670: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e Registry.
6680: 44 79 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c DynData, whatIf,
6690: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 readOnly, safe)
66a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
66b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
66c0: 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 dynData;..
66d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
66e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
66f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
6700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
6740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
6750: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 vate MockRegistr
6760: 79 4b 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e yKey localMachin
6770: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
6780: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 public MockRegis
6790: 74 72 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 tryKey LocalMach
67a0: 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ine..
67b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
67c0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 get..
67d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
67e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
67f0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b CheckDisposed();
6800: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
6810: 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 if (loca
6820: 6c 4d 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c lMachine == null
6830: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
6840: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c local
6850: 4d 61 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f Machine = new Mo
6860: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a ckRegistryKey(..
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6880: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 Regi
6890: 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e stry.LocalMachin
68a0: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f e, whatIf, readO
68b0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 nly, safe);....
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
68d0: 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d return localM
68e0: 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 achine;..
68f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
6900: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
6910: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
6960: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 priv
6970: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 ate MockRegistry
6980: 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 Key performanceD
6990: 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ata;..
69a0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 public MockReg
69b0: 69 73 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d istryKey Perform
69c0: 61 6e 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 anceData..
69d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
69e0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 get..
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
6a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6a10: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 CheckDispos
6a20: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ed();....
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
6a40: 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 (performanceData
6a50: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a70: 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 performanceDa
6a80: 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 ta = new MockReg
6a90: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 istryKey(..
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ab0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e Registry.
6ac0: 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c PerformanceData,
6ad0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c whatIf, readOnl
6ae0: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 y, safe);....
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b00: 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 return performa
6b10: 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 nceData;..
6b20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
6b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
6b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
6b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
6b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
6ba0: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 vate MockRegistr
6bb0: 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 yKey users;..
6bc0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
6bd0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
6be0: 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 Users..
6bf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
6c00: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 get..
6c10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c30: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 CheckDisposed(
6c40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
6c50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73 if (us
6c60: 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 ers == null)..
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c80: 20 20 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 users = ne
6c90: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 w MockRegistryKe
6ca0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
6cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6cc0: 52 65 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 Registry.Users,
6cd0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 whatIf, readOnly
6ce0: 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 , safe);....
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6d00: 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 return users;..
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
6d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
6d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e . #en
6d40: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 dregion....
6d50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
6da0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f #regio
6db0: 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 n Public "Regist
6dc0: 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 ry" Methods..
6dd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
6de0: 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 object GetValue(
6df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
6e00: 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 string keyName
6e10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
6e20: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e string valueN
6e30: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
6e40: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 object def
6e50: 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 aultValue..
6e60: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 )..
6e70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 Che
6e90: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d ckDisposed();...
6ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6eb0: 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 return Registry
6ec0: 2e 47 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d .GetValue(keyNam
6ed0: 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65 e, valueName, de
6ee0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 faultValue);..
6ef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
6f00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
6f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
6f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
6f60: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c blic void SetVal
6f70: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue(..
6f80: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e string keyN
6f90: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
6fa0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c string val
6fb0: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 ueName,..
6fc0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object
6fd0: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 value..
6fe0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
6ff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
7000: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 CheckDi
7010: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 sposed();..
7020: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b Check
7030: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 ReadOnly();....
7040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
7050: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 f (!whatIf)..
7060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7070: 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c Registry.SetVal
7080: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 ue(keyName, valu
7090: 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a eName, value);..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
70b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
70c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
70d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
7110: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 public void SetV
7120: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 alue(..
7130: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 string ke
7140: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 yName,..
7150: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 string v
7160: 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 alueName,..
7170: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec
7180: 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 t value,..
7190: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 Regist
71a0: 72 79 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75 ryValueKind valu
71b0: 65 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 eKind..
71c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
71d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
71e0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 CheckDi
71f0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 sposed();..
7200: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b Check
7210: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 ReadOnly();....
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
7230: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 f (!whatIf)..
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7250: 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c Registry.SetVal
7260: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 ue(keyName, valu
7270: 65 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61 eName, value, va
7280: 6c 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 lueKind);..
7290: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
72a0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
72b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
72c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
72d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
72e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
72f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7300: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
7310: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 #region Priva
7320: 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 te Methods..
7330: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
7340: 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e void CheckReadOn
7350: 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ly()..
7360: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
7370: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
7380: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 // NOTE
7390: 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 : In "read-only"
73a0: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c mode, we disall
73b0: 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 ow all write acc
73c0: 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ess...
73d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
73e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72 if (!r
73f0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 eadOnly)..
7400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
7410: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 turn;....
7420: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e throw n
7430: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 ew InvalidOperat
7440: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d ionException();.
7450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
7460: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 #end
7470: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
7480: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
74c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
74d0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e #region
74e0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 IDisposable "Pa
74f0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a ttern" Members..
7500: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 priv
7510: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 ate bool dispose
7520: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d;..
7530: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 private void Che
7540: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 ckDisposed() /*
7550: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 throw */..
7560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
7570: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 if (!di
7580: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 sposed)..
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
75a0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 urn;....
75b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 throw ne
75c0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 w ObjectDisposed
75d0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 Exception(..
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
75f0: 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 typeof(MockRegis
7600: 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 try).Name);..
7610: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
7620: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
7630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
7670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
7680: 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 vate /* protecte
7690: 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 d virtual */ voi
76a0: 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 d Dispose(..
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
76c0: 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 disposing..
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
76e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
7700: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 (!disposed)..
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
7720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7730: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 if (disposi
7740: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ng)..
7750: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
7760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7770: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 ////////..
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
77b0: 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e // dispose man
77c0: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 aged resources h
77d0: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 ere.....
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
77f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7810: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
7820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7830: 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 if (classesRoot
7840: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 != null)..
7850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7860: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7880: 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f classesRoot.Clo
7890: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 se();..
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
78b0: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d classesRoot =
78c0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 null;..
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
78e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
7900: 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21 (currentConfig !
7910: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7950: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c currentConfig.Cl
7960: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 ose();..
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7980: 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 currentConfi
7990: 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 g = null;..
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
79b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
79d0: 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 if (currentUser
79e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 != null)..
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a20: 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f currentUser.Clo
7a30: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 se();..
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a50: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d currentUser =
7a60: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 null;..
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
7aa0: 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c (dynData != null
7ab0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
7ac0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7ae0: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 dynDat
7af0: 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 a.Close();..
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b10: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 dynData
7b20: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 = null;..
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
7b60: 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21 (localMachine !
7b70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7bb0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f localMachine.Clo
7bc0: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 se();..
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7be0: 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 localMachine
7bf0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 = null;..
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
7c30: 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 (performanceDat
7c40: 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 a != null)..
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c80: 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 performanceDa
7c90: 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 ta.Close();..
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7cb0: 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d perform
7cc0: 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b anceData = null;
7cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7ce0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d00: 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72 73 if (users
7d10: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 != null)..
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d50: 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b users.Close();
7d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 us
7d80: 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 ers = null;..
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7da0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
7dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
7dd0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 ///////////..
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7e10: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 // release unma
7e20: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 naged resources
7e30: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 here.....
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f ///
7e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7e70: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
7e80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7ea0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 // NOTE: This
7eb0: 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 object is now d
7ec0: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 isposed...
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
7ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
7ef0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d disposed =
7f00: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 true;..
7f10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
7f20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
7f30: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
7f40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
7f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
7f90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
7fa0: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 #region IDisp
7fb0: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a osable Members..
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
7fd0: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 ic void Dispose(
7fe0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
7ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8000: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b Dispose(true);
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8020: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e GC.SuppressFin
8030: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 alize(this);..
8040: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
8050: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 #endreg
8060: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ion....
8070: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
8080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
80a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
80b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
80c0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 #region De
80d0: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 structor..
80e0: 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 ~MockRegis
80f0: 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 try()..
8100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
8110: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 Dispose(fa
8120: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 lse);..
8130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
8140: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 #endregion..
8150: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
8160: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 #endregion....
8170: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
8180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
81a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
81c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f .. #regio
81d0: 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 n MockRegistryKe
81e0: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 y Class..
81f0: 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 internal sealed
8200: 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 class MockRegis
8210: 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73 tryKey : IDispos
8220: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d able.. {.
8230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 . #re
8240: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e gion Private Con
8250: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 structors..
8260: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d private M
8270: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 ockRegistryKey()
8280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
8290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
82a0: 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d whatIf = true;.
82b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
82c0: 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 readOnly = true
82d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
82e0: 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d safe = true;.
82f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
8300: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 #end
8310: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
8320: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
8330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
8370: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e #region
8380: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 Public Construc
8390: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 tors..
83a0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 public MockReg
83b0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 istryKey(..
83c0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 Regis
83d0: 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 tryKey key..
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a :
8400: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 this()..
8410: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
8420: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79 this.key
8430: 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 = key;..
8440: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
8450: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
84a0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
84b0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 MockRegistryKey(
84c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
84d0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 RegistryKey ke
84e0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
84f0: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 string subKe
8500: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 yName..
8510: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
8520: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 : this
8530: 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 (key)..
8540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
8550: 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65 this.subKe
8560: 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61 yName = subKeyNa
8570: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me;..
8580: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
8590: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
85a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
85b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
85c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
85d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
85e0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b public Mock
85f0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 RegistryKey(..
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
8610: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a gistryKey key,..
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8630: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d string subKeyNam
8640: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
8650: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d bool whatIf.
8660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8670: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )..
8680: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 : this(key,
8690: 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20 subKeyName)..
86a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 this
86c0: 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 .whatIf = whatIf
86d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
86e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
86f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8730: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
8740: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 public MockRe
8750: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 gistryKey(..
8760: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 Regi
8770: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 stryKey key,..
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
8790: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c ring subKeyName,
87a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
87b0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a bool whatIf,..
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
87d0: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 bool readOnly..
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 )
87f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8800: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75 : this(key, su
8810: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 bKeyName, whatIf
8820: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
8830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8840: 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 this.readOnly
8850: 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 = readOnly;..
8860: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
8870: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
8880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
88c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
88d0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 lic MockRegistry
88e0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 Key(..
88f0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 RegistryKe
8900: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 y key,..
8910: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 string s
8920: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 ubKeyName,..
8930: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
8940: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
8950: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 bool r
8960: 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 eadOnly,..
8970: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 bool s
8980: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 afe..
8990: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 )..
89a0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b : this(k
89b0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 ey, subKeyName,
89c0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 whatIf, readOnly
89d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
89e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
89f0: 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 this.safe = sa
8a00: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 fe;..
8a10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
8a20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
8a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8a60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
8a70: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b public Mock
8a80: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 RegistryKey(..
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
8aa0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a gistryKey key,..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8ac0: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 bool whatIf..
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8af0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c : this(key, null
8b00: 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 , whatIf)..
8b10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
8b20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 // do
8b30: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 nothing...
8b40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
8b50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
8ba0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
8bb0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 MockRegistryKey
8bc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
8bd0: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b RegistryKey k
8be0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ey,..
8bf0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 bool whatIf
8c00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
8c10: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 bool readOnly
8c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8c30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )..
8c40: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c : this(key,
8c50: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 null, whatIf, r
8c60: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 eadOnly)..
8c70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
8c80: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e // do n
8c90: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 othing...
8ca0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
8cb0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
8d00: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
8d10: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 MockRegistryKey(
8d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8d30: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 RegistryKey ke
8d40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
8d50: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c bool whatIf,
8d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8d70: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c bool readOnly,
8d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
8d90: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 bool safe..
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8dc0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c : this(key, null
8dd0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e , whatIf, readOn
8de0: 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20 ly, safe)..
8df0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
8e00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 // do
8e10: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 nothing...
8e20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
8e30: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
8e40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
8e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8e90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
8ea0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 #region Public
8eb0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 Methods..
8ec0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 public voi
8ed0: 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20 d Close()..
8ee0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
8ef0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
8f10: 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73 NOTE: No dispos
8f20: 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62 65 ed check here be
8f30: 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68 cause calling th
8f40: 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 is method..
8f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
8f60: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75 should be ju
8f70: 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20 st like calling
8f80: 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20 Dispose...
8f90: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 Di
8fb0: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 spose(true);..
8fc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
8fd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
8fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
8ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
9020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
9030: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 blic MockRegistr
9040: 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 yKey CreateSubKe
9050: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
9060: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 string subKe
9070: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 yName..
9080: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
9090: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
90a0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 CheckDi
90b0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 sposed();..
90c0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b Check
90d0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 ReadOnly();....
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
90f0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d f (key == null).
9100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9110: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c return null
9120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
9130: 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29 if (whatIf)
9140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9150: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
9160: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9180: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 // HACK: Attemp
9190: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 t to open the sp
91a0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e ecified sub-key.
91b0: 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 If this..
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
91d0: 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77 / fails, w
91e0: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 e will simply re
91f0: 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65 64 turn the wrapped
9200: 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20 root key..
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
9220: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 73 / itself s
9230: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 ince no writes a
9240: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77 re allowed in 'w
9250: 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20 hat-if'..
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
9270: 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f mode anyho
9280: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 w...
9290: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
92b0: 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b RegistryKey subK
92c0: 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 ey = key.OpenSub
92d0: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b Key(subKeyName);
92e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
92f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 return (
9300: 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 subKey != null)
9310: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ?..
9320: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d new M
9330: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d ockRegistryKey(.
9340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9360: 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c subKey, whatIf,
9370: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 readOnly, safe)
9380: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 :..
9390: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 new
93a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 MockRegistryKey(
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93d0: 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d key, subKeyNam
93e0: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f e, whatIf, readO
93f0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 nly, safe);..
9400: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9420: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 else..
9430: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
9450: 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 urn new MockRegi
9460: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 stryKey(..
9470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9480: 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b key.CreateSubK
9490: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 ey(subKeyName),
94a0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 whatIf, readOnly
94b0: 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 , safe);..
94c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
94d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
94e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
9530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
9540: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 lic void DeleteS
9550: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ubKey(..
9560: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 string s
9570: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 ubKeyName,..
9580: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
9590: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d throwOnMissing.
95a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
95b0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )..
95c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
95d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 CheckDisposed
95e0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ();..
95f0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e CheckReadOn
9600: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ly();....
9610: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 if (key
9620: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
9640: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 eturn;....
9650: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 if (!w
9660: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 hatIf)..
9670: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e key.
9680: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 DeleteSubKey(sub
9690: 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e KeyName, throwOn
96a0: 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 Missing);..
96b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
96c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
9710: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
9720: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 c void DeleteSub
9730: 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 KeyTree(..
9740: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
9750: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 subKeyName..
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
9770: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
9790: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d heckDisposed();.
97a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
97b0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 CheckReadOnly()
97c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
97d0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 if (key ==
97e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
97f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
9800: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n;....
9810: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 if (!whatI
9820: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f)..
9830: 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 key.Dele
9840: 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 teSubKeyTree(sub
9850: 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 KeyName);..
9860: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
9870: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
98c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
98d0: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c c void DeleteVal
98e0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue(..
98f0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 string name
9900: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
9910: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d bool throwOnM
9920: 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 issing..
9930: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
9940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
9950: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 CheckD
9960: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 isposed();..
9970: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 Chec
9980: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a kReadOnly();....
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
99a0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 if (key == null)
99b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
99c0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d return;...
99d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
99e0: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 if (!whatIf)..
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a00: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c key.DeleteVal
9a10: 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e ue(name, throwOn
9a20: 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 Missing);..
9a30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
9a40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
9a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
9a90: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
9aa0: 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 c string[] GetSu
9ab0: 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 bKeyNames()..
9ac0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 Chec
9ae0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a kDisposed();....
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9b00: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 if (key == null)
9b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c return nul
9b30: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 l;....
9b40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 return key
9b50: 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 .GetSubKeyNames(
9b60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
9b70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
9b80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
9b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9bc0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
9bd0: 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 public objec
9be0: 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 t GetValue(..
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
9c00: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 ing name,..
9c10: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec
9c20: 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a t defaultValue..
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9c40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
9c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9c60: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 CheckDisposed(
9c70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
9c80: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d if (key ==
9c90: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
9cb0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 rn null;....
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
9cd0: 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 rn key.GetValue(
9ce0: 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c name, defaultVal
9cf0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ue);..
9d00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
9d10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
9d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9d50: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
9d60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 public Moc
9d70: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 kRegistryKey Ope
9d80: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 nSubKey(..
9d90: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
9da0: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 subKeyName..
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
9de0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d heckDisposed();.
9df0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
9e00: 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 return OpenSu
9e10: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c bKey(subKeyName,
9e20: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 false);..
9e30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
9e40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
9e90: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
9ea0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 MockRegistryKey
9eb0: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 OpenSubKey(..
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
9ed0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c ring subKeyName,
9ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
9ef0: 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d bool writable.
9f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9f10: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )..
9f20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
9f30: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 CheckDisposed
9f40: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ();....
9f50: 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74 61 if (writa
9f60: 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ble)..
9f70: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 CheckR
9f80: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 eadOnly();....
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
9fa0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a (key == null)..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9fc0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b return null;
9fd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
9fe0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 RegistryKey
9ff0: 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 subKey = key.Ope
a000: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 nSubKey(..
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 su
a020: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 bKeyName, whatIf
a030: 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 ? false : writa
a040: 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ble);....
a050: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
a060: 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 (subKey != null)
a070: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ?..
a080: 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b new Mock
a090: 52 65 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b RegistryKey(subK
a0a0: 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 ey, whatIf, read
a0b0: 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 Only, safe) : nu
a0c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll;..
a0d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
a0e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a120: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
a130: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 public void
a140: 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 SetValue(..
a150: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
a160: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 ng name,..
a170: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object
a180: 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 value..
a190: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
a1a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
a1b0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 CheckD
a1c0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 isposed();..
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 Chec
a1e0: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a kReadOnly();....
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a200: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 if (key == null)
a210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
a220: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d return;...
a230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a240: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 if (!whatIf)..
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a260: 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 key.SetValue(
a270: 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 name, value);..
a280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
a290: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 #endre
a2a0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 gion....
a2b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
a2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
a300: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 #region P
a310: 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 ublic Properties
a320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
a330: 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 blic string Name
a340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
a350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a360: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 get..
a370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 Che
a390: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d ckDisposed();...
a3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a3b0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 if (key ==
a3c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
a3e0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 eturn null;....
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a400: 20 20 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e return !Strin
a410: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 g.IsNullOrEmpty(
a420: 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 subKeyName) ?..
a430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a440: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f String.Fo
a450: 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c rmat("{0}\\{1}",
a460: 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 key.Name, subKe
a470: 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 yName) :..
a480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a490: 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 key.Name;..
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
a4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
a520: 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72 79 private Registry
a530: 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 Key key;..
a540: 20 20 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 public Reg
a550: 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 istryKey Key..
a560: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 get
a580: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 { CheckDisposed
a590: 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b (); CheckSafe();
a5a0: 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a return key; }..
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
a5c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a610: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
a620: 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 private string s
a630: 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 ubKeyName;..
a640: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 public s
a650: 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 tring SubKeyName
a660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
a670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a680: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 get { CheckDisp
a690: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 osed(); return s
a6a0: 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 ubKeyName; }..
a6b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
a6c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
a710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 .. pr
a720: 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 ivate bool whatI
a730: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f;..
a740: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 public bool What
a750: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 If..
a760: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
a770: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 get { CheckDi
a780: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e sposed(); return
a790: 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 whatIf; }..
a7a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
a7b0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
a800: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 priv
a810: 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c ate bool readOnl
a820: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y;..
a830: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 public bool Read
a840: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 Only..
a850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
a860: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b get { Check
a870: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 Disposed(); retu
a880: 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a rn readOnly; }..
a890: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
a8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a8f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
a900: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 public bool safe
a910: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
a920: 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d ublic bool Safe.
a930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
a940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a950: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f get { CheckDispo
a960: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 sed(); return sa
a970: 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 fe; }..
a980: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
a990: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
a9f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... #
aa00: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d region Private M
aa10: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 ethods..
aa20: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 private void
aa30: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 CheckReadOnly()
aa40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
aa50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
aa60: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
aa70: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e // NOTE: In
aa80: 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 "read-only" mod
aa90: 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 e, we disallow a
aaa0: 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73 73 2e ll write access.
aab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
aac0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
aad0: 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64 4f if (!readO
aae0: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 nly)..
aaf0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
ab00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
ab10: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 throw new I
ab20: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 nvalidOperationE
ab30: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 xception();..
ab40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
ab50: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
ab60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
aba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
abb0: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 vate void CheckS
abc0: 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 afe()..
abd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
abe0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
abf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 // NOT
ac00: 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 E: In "safe" mod
ac10: 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 e, we disallow a
ac20: 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65 73 73 ll direct access
ac30: 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 to the..
ac40: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
ac50: 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 contained regi
ac60: 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 stry key...
ac70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
ac90: 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 f (!safe)..
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
acb0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 eturn;....
acc0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 throw
acd0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 new InvalidOpera
ace0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b tionException();
acf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
ad00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e . #en
ad10: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 dregion....
ad20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
ad70: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f #regio
ad80: 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 n System.Object
ad90: 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 Overrides..
ada0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 public ov
adb0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f erride string To
adc0: 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 String()..
add0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
ade0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 CheckDi
adf0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 sposed();....
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
ae10: 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a urn this.Name;..
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
ae30: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 #endr
ae40: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
ae50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ae90: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
aea0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 #region
aeb0: 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 Implicit Convers
aec0: 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 ion Operators..
aed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
aee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 // BU
aef0: 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f GBUG: Remove me?
af00: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 This should be
af10: 20 73 61 66 65 20 62 65 63 61 75 73 65 20 69 6e safe because in
af20: 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 'what-if'..
af30: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
af40: 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 mode all keys
af50: 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 are opened read
af60: 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 -only...
af70: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
af80: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 public stati
af90: 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 c implicit opera
afa0: 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 tor RegistryKey(
afb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
afc0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 MockRegistryKe
afd0: 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 y key..
afe0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
aff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
b000: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
b010: 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 (key != null) ?
b020: 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d key.Key : null;.
b030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
b040: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 #end
b050: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
b060: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
b0b0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e #region
b0c0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 IDisposable "Pa
b0d0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a ttern" Members..
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 priv
b0f0: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 ate bool dispose
b100: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d;..
b110: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 private void Che
b120: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 ckDisposed() /*
b130: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 throw */..
b140: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
b150: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 if (!di
b160: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 sposed)..
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
b180: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 urn;....
b190: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 throw ne
b1a0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 w ObjectDisposed
b1b0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 Exception(..
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b1d0: 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 typeof(MockRegis
b1e0: 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a tryKey).Name);..
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
b200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
b260: 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 private /* prote
b270: 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 cted virtual */
b280: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 void Dispose(..
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
b2a0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 ool disposing..
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 )
b2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
b2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
b2e0: 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d if (!disposed).
b2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
b300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
b310: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 if (disp
b320: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 osing)..
b330: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b350: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
b360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 ///////////..
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b390: 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 // dispose
b3a0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 managed resource
b3b0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 s here.....
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b3f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b410: 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 if (key != nu
b420: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
b430: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b450: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e key.
b460: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 Close();..
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b480: 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c key = null
b490: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
b4a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b4c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
b4d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
b4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b500: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
b510: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 // releas
b520: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f e unmanaged reso
b530: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 urces here.....
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b550: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b590: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
b5a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 // NOTE
b5b0: 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 : This object is
b5c0: 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a now disposed...
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b5e0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 disp
b600: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 osed = true;..
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
b620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
b630: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 #end
b640: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 region....
b650: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
b6a0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e #region
b6b0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d IDisposable Mem
b6c0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 bers..
b6d0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 public void Di
b6e0: 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 spose()..
b6f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
b700: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 Dispose(
b710: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 true);..
b720: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 GC.Suppr
b730: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 essFinalize(this
b740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
b750: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 }.. #
b760: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 endregion....
b770: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
b780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 #reg
b7d0: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a ion Destructor..
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 ~Moc
b7f0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a kRegistryKey()..
b800: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 D
b820: 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a ispose(false);..
b830: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
b840: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 #endr
b850: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d egion.. }
b860: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 .. #endre
b870: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 gion....
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
b8d0: 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 #region Regis
b8e0: 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d tryHelper Class.
b8f0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 . private
b900: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 static class Re
b910: 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 gistryHelper..
b920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
b930: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 #region Pub
b940: 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 lic Static Prope
b950: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 rties..
b960: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
b970: 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 c int subKeysCre
b980: 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 ated;..
b990: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 public static
b9a0: 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 int SubKeysCrea
b9b0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ted..
b9c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
b9d0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
b9e0: 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b subKeysCreated;
b9f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
ba00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
ba10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
ba20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ba30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ba40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ba50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
ba60: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
ba70: 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 ic int subKeysDe
ba80: 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 leted;..
ba90: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 public stati
baa0: 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c c int SubKeysDel
bab0: 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 eted..
bac0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
bad0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 get { retur
bae0: 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 n subKeysDeleted
baf0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
bb00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
bb10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
bb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bb50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
bb60: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
bb70: 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 tic int keyValue
bb80: 73 53 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 sSet;..
bb90: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 public static
bba0: 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65 int KeyValuesSe
bbb0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b t.. {
bbc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
bbd0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b get { return k
bbe0: 65 79 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a eyValuesSet; }..
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
bc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f . ///
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bc50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
bc60: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 private static i
bc70: 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 nt keyValuesDele
bc80: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ted;..
bc90: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 public static
bca0: 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c int KeyValuesDel
bcb0: 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 eted..
bcc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
bcd0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 get { retur
bce0: 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 n keyValuesDelet
bcf0: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ed; }..
bd00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
bd10: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
bd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
bd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
bd70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... #
bd80: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 region Public St
bd90: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 atic Methods..
bda0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f [Metho
bdb0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c dImpl(MethodImpl
bdc0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 Options.NoInlini
bdd0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ng)]..
bde0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 public static
bdf0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
be00: 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 OpenSubKey(..
be10: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 Moc
be20: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f kRegistryKey roo
be30: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 tKey,..
be40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 string su
be50: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 bKeyName,..
be60: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
be70: 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 writable,..
be80: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
be90: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 whatIf,..
bea0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 bool ve
beb0: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 rbose..
bec0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
bed0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
bee0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f if (roo
bef0: 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 tKey == null)..
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bf10: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d return null;.
bf20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
bf30: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d if (verbose).
bf40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
bf50: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 TraceOps.De
bf60: 62 75 67 41 6e 64 54 72 61 63 65 28 77 72 69 74 bugAndTrace(writ
bf70: 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20 able ?..
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bf90: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 TracePriority.Hi
bfa0: 67 68 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 ghest : TracePri
bfb0: 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 ority.Higher,..
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bfd0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c debugCall
bfe0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 back, traceCallb
bff0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d ack, String.Form
c000: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f "ro
c020: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 otKey = {0}, sub
c030: 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 KeyName = {1}, w
c040: 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d ritable = {2}",.
c050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
c060: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
c070: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f lay(rootKey), Fo
c080: 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e rDisplay(subKeyN
c090: 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 ame),..
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
c0b0: 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74 61 62 orDisplay(writab
c0c0: 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 le)), traceCateg
c0d0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
c0e0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
c100: 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72 HACK: Always for
c110: 62 69 64 20 77 72 69 74 61 62 6c 65 20 61 63 63 bid writable acc
c120: 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69 ess when operati
c130: 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 ng in..
c140: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
c150: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 'what-if' mode..
c160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
c170: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
c180: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 MockRegistr
c190: 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b yKey key = rootK
c1a0: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a ey.OpenSubKey(..
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c1c0: 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 subKeyName,
c1d0: 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a whatIf ? false :
c1e0: 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 writable);....
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
c200: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 eturn (key != nu
c210: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 ll) ?..
c220: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d new M
c230: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b ockRegistryKey(k
c240: 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 ey, whatIf, fals
c250: 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c e, false) : null
c260: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
c270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
c280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
c290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
c2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
c2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
c2c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
c2d0: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d [MethodImpl(M
c2e0: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 ethodImplOptions
c2f0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 .NoInlining)]..
c300: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
c310: 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 c static MockReg
c320: 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 istryKey CreateS
c330: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ubKey(..
c340: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 MockRegi
c350: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c stryKey rootKey,
c360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
c370: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e string subKeyN
c380: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
c390: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
c3a0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
c3b0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 bool verbose
c3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
c3d0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )..
c3e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
c3f0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 if (rootKey
c400: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
c420: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 turn null;....
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
c440: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 (verbose)..
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c460: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
c470: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f dTrace(TracePrio
c480: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 rity.Highest,..
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c4a0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c debugCall
c4b0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 back, traceCallb
c4c0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d ack, String.Form
c4d0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f "ro
c4f0: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 otKey = {0}, sub
c500: 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d KeyName = {1}",.
c510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
c520: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
c530: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f lay(rootKey), Fo
c540: 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e rDisplay(subKeyN
c550: 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ame)),..
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c570: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
c580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
c590: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 try..
c5a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
c5c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
c5d0: 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 // HACK:
c5e0: 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 Always open a ke
c5f0: 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 y, rather than c
c600: 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e reating one when
c610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
c620: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f // o
c630: 70 65 72 61 74 69 6e 67 20 69 6e 20 27 77 68 61 perating in 'wha
c640: 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 t-if' mode...
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c660: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
c670: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68 61 if (wha
c680: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf)..
c690: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c6b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c6d0: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 // HACK: Attemp
c6e0: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 t to open the sp
c6f0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e ecified sub-key.
c700: 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 If..
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
c720: 20 20 20 20 20 20 20 74 68 69 73 20 66 61 69 6c this fail
c730: 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c s, we will simpl
c740: 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f y return the roo
c750: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t..
c760: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
c770: 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73 key itself s
c780: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 ince no writes a
c790: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 re allowed in..
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c7b0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
c7c0: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 61 'what-if' mode a
c7d0: 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 nyhow...
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c7f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
c800: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b Mock
c810: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 RegistryKey key
c820: 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 = rootKey.OpenSu
c830: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 bKey(subKeyName)
c840: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
c860: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c urn (key != null
c870: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ) ?..
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c890: 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 key : new MockR
c8a0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 egistryKey(..
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f roo
c8d0: 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 tKey, subKeyName
c8e0: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c , whatIf, false,
c8f0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 false);..
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
c910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
c920: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 else..
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
c940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
c950: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
c960: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 new MockRegistr
c970: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 yKey(..
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c990: 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74 rootKey.Creat
c9a0: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 eSubKey(subKeyNa
c9b0: 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c me), whatIf, fal
c9c0: 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se,..
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c9e0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 false);..
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
ca00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ca10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
ca20: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 finally..
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca50: 20 20 20 20 73 75 62 4b 65 79 73 43 72 65 61 74 subKeysCreat
ca60: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 ed++;..
ca70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
ca80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
ca90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
caa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
cae0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f [Metho
caf0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c dImpl(MethodImpl
cb00: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 Options.NoInlini
cb10: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ng)]..
cb20: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 public static
cb30: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 void DeleteSubKe
cb40: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
cb50: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 MockRegistry
cb60: 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 Key rootKey,..
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
cb80: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c ring subKeyName,
cb90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
cba0: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 bool throwOnMi
cbb0: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 ssing,..
cbc0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 bool wha
cbd0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf,..
cbe0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f bool verbo
cbf0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se..
cc00: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 )..
cc10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
cc20: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 if (rootKe
cc30: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 y == null)..
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cc50: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 return;....
cc60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 if (v
cc70: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 erbose)..
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
cc90: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 ceOps.DebugAndTr
cca0: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 ace(TracePriorit
ccb0: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 y.Highest,..
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ccd0: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
cce0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
ccf0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
cd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
cd10: 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b "rootK
cd20: 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 ey = {0}, subKey
cd30: 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 Name = {1}",..
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cd50: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
cd60: 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 (rootKey), ForDi
cd70: 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 splay(subKeyName
cd80: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )),..
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
cda0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a ceCategory);....
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cdc0: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 if (!whatIf)..
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cde0: 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 rootKey.Delete
cdf0: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d SubKey(subKeyNam
ce00: 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e e, throwOnMissin
ce10: 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 g);....
ce20: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65 subKeysDe
ce30: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 leted++;..
ce40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
ce50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
ce60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ce80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ce90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
cea0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f [Metho
ceb0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c dImpl(MethodImpl
cec0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 Options.NoInlini
ced0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ng)]..
cee0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 public static
cef0: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 void DeleteSubKe
cf00: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 yTree(..
cf10: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 MockRegi
cf20: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c stryKey rootKey,
cf30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
cf40: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e string subKeyN
cf50: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
cf60: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
cf70: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
cf80: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 bool verbose
cf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
cfa0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )..
cfb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
cfc0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 if (rootKey
cfd0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
cff0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 turn;....
d000: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 if (ver
d010: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 bose)..
d020: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
d030: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 Ops.DebugAndTrac
d040: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e e(TracePriority.
d050: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 Highest,..
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d070: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c debugCallback,
d080: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 traceCallback,
d090: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d0b0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 "rootKey
d0c0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 = {0}, subKeyNa
d0d0: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 me = {1}",..
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d0f0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 ForDisplay(r
d100: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 ootKey), ForDisp
d110: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 lay(subKeyName))
d120: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
d130: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
d140: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 Category);....
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
d160: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 (!whatIf)..
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d180: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 rootKey.DeleteSu
d190: 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e bKeyTree(subKeyN
d1a0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ame);....
d1b0: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 subKeys
d1c0: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 Deleted++;..
d1d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
d1e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
d1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
d230: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 [Met
d240: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d hodImpl(MethodIm
d250: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 plOptions.NoInli
d260: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 ning)]..
d270: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 public stati
d280: 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 c string[] GetSu
d290: 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 bKeyNames(..
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b Mock
d2b0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c RegistryKey key,
d2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d2d0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a bool whatIf,..
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d2f0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 bool verbose..
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d ).
d310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d330: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 if (key == null)
d340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d350: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c return nul
d360: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 l;....
d370: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 if (verbos
d380: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e)..
d390: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
d3a0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 .DebugAndTrace(T
d3b0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 racePriority.Hig
d3c0: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 h,..
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 debu
d3e0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 gCallback, trace
d3f0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 Callback, String
d400: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d420: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46 "key = {0}", F
d430: 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c orDisplay(key)),
d440: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
d450: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
d460: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 return key.G
d470: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b etSubKeyNames();
d480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
d490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
d4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d4e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
d4f0: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 [MethodImpl(Me
d500: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e thodImplOptions.
d510: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 NoInlining)]..
d520: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
d530: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47 static object G
d540: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 etValue(..
d550: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 MockRe
d560: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a gistryKey key,..
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d580: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 string name,..
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob
d5a0: 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 ject defaultValu
d5b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
d5c0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c bool whatIf,
d5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d5e0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a bool verbose..
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d600: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
d610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d620: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c if (key == nul
d630: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
d640: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n
d650: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ull;....
d660: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 if (verb
d670: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ose)..
d680: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f TraceO
d690: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 ps.DebugAndTrace
d6a0: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 (TracePriority.H
d6b0: 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 igh,..
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
d6d0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 bugCallback, tra
d6e0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 ceCallback, Stri
d6f0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d710: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 "key = {0},
d720: 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61 name = {1}, defa
d730: 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c ultValue = {2}",
d740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
d750: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 ForDis
d760: 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 play(key), ForDi
d770: 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20 splay(name),..
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d790: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
d7a0: 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c (defaultValue)),
d7b0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
d7c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
d7d0: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 return key.G
d7e0: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 etValue(name, de
d7f0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 faultValue);..
d800: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
d810: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
d820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
d850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
d860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d .. [M
d870: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 ethodImpl(Method
d880: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e ImplOptions.NoIn
d890: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 lining)]..
d8a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 public sta
d8b0: 74 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 tic void SetValu
d8c0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
d8d0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 MockRegistry
d8e0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 Key key,..
d8f0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
d900: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 name,..
d910: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 object v
d920: 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 alue,..
d930: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 bool what
d940: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If,..
d950: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 bool verbos
d960: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
d970: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 )..
d980: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
d990: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 if (key ==
d9a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
d9b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
d9c0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n;....
d9d0: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 if (verbos
d9e0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e)..
d9f0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
da00: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 .DebugAndTrace(T
da10: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 racePriority.Hig
da20: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 hest,..
da30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
da40: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 ebugCallback, tr
da50: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 aceCallback, Str
da60: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
da80: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c "key = {0},
da90: 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c name = {1}, val
daa0: 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 ue = {2}",..
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dac0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b ForDisplay(k
dad0: 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 ey), ForDisplay(
dae0: 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 name), ForDispla
daf0: 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 y(value)),..
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
db10: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
db20: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
db30: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 if (!what
db40: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If)..
db50: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 key.Set
db60: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 Value(name, valu
db70: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
db80: 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 keyValues
db90: 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 Set++;..
dba0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
dbb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
dbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
dbf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
dc00: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 [MethodI
dc10: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 mpl(MethodImplOp
dc20: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 tions.NoInlining
dc30: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )]..
dc40: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f public static vo
dc50: 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d id DeleteValue(.
dc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
dc70: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 MockRegistryKey
dc80: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 key,..
dc90: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 string na
dca0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me,..
dcb0: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f bool throwO
dcc0: 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 nMissing,..
dcd0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
dce0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 whatIf,..
dcf0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 bool ve
dd00: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 rbose..
dd10: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
dd20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
dd30: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 if (key
dd40: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
dd60: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 eturn;....
dd70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 if (ve
dd80: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 rbose)..
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
dda0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 eOps.DebugAndTra
ddb0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 ce(TracePriority
ddc0: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 .Highest,..
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dde0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b debugCallback
ddf0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c , traceCallback,
de00: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
de10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
de20: 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 "key =
de30: 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 {0}, name = {1}"
de40: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 , ForDisplay(key
de50: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
de60: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
de70: 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74 isplay(name)), t
de80: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
de90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
dea0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a if (!whatIf)..
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dec0: 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 key.DeleteVa
ded0: 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f lue(name, throwO
dee0: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 nMissing);....
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 ke
df00: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b yValuesDeleted++
df10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 .. #e
df30: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 ndregion..
df40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e }.. #en
df50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 dregion....
df60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
df70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
df80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
df90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
dfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
dfb0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 #region St
dfc0: 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a ringList Class..
dfd0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
dfe0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 sealed class Str
dff0: 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 ingList : List<s
e000: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 tring>..
e010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 {.. p
e020: 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 ublic StringList
e030: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ()..
e040: 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 : base()..
e050: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
e070: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 do nothing...
e080: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
e090: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
e0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
e0f0: 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 lic StringList(I
e100: 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e Enumerable<strin
e110: 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a g> collection)..
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e130: 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f : base(collectio
e140: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n)..
e150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
e160: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 // do nothing
e170: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ... }
e180: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
e190: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
e1a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
e1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e1f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 //.... #r
e200: 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 egion StringDict
e210: 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 ionary Class..
e220: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 private se
e230: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e aled class Strin
e240: 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 gDictionary : Di
e250: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c ctionary<string,
e260: 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 string>..
e270: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
e280: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 public StringDi
e290: 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 ctionary()..
e2a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
e2b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f // do
e2c0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 nothing...
e2d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
e2e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e }.. #en
e2f0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 dregion....
e300: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
e310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
e350: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 #region Ve
e360: 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d rsionList Class.
e370: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 . private
e380: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 sealed class Ve
e390: 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 rsionList : List
e3a0: 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 <Version>..
e3b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
e3c0: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e public Version
e3d0: 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 List()..
e3e0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 : base()
e3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
e400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e410: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d // do nothing..
e420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
e430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
e440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e480: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
e490: 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c public VersionL
e4a0: 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c ist(IEnumerable<
e4b0: 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 Version> collect
e4c0: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ion)..
e4d0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c : base(col
e4e0: 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 lection)..
e4f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
e500: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e // do n
e510: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 othing...
e520: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
e530: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 }.. #endr
e540: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
e550: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
e560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e590: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
e5a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 #region Vers
e5b0: 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 ionMap Class..
e5c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 private se
e5d0: 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 aled class Versi
e5e0: 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 onMap : Dictiona
e5f0: 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 ry<string, Versi
e600: 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 onList>..
e610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
e620: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 public VersionMa
e630: 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 p()..
e640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
e650: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e // do nothin
e660: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g...
e670: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }..
e680: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
e690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
e6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e6e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ///.... #
e6f0: 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 region Package C
e700: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e lass.. in
e710: 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c ternal sealed cl
e720: 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 ass Package..
e730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
e740: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c #region Publ
e750: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d ic Constructors.
e760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
e770: 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 lic Package()..
e780: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
e7a0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 do nothing...
e7b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
e7c0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 #endreg
e7d0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ion....
e7e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
e7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e820: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
e830: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 #region Pu
e840: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d blic Properties.
e850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
e860: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d vate AssemblyNam
e870: 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d e assemblyName;.
e880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
e890: 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 lic AssemblyName
e8a0: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 AssemblyName..
e8b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 ge
e8d0: 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d t { return assem
e8e0: 62 6c 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 blyName; }..
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
e900: 7b 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d { assemblyName =
e910: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
e920: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
e930: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
e940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
e970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
e980: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
e990: 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 te bool globalAs
e9a0: 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 semblyCache;..
e9b0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
e9c0: 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 bool GlobalAsse
e9d0: 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 mblyCache..
e9e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
e9f0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
ea00: 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 return globalAss
ea10: 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 emblyCache; }..
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
ea30: 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d et { globalAssem
ea40: 62 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 blyCache = value
ea50: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
ea60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
ea70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
ea80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ea90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
eaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
eab0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
eac0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 private Gui
ead0: 64 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 d packageId;..
eae0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
eaf0: 20 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d Guid PackageId.
eb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eb20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 get { return pac
eb30: 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 kageId; }..
eb40: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
eb50: 20 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c packageId = val
eb60: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
eb70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
eb80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
eb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
eba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ebb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ebc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
ebd0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 private G
ebe0: 75 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a uid serviceId;..
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
ec00: 69 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49 ic Guid ServiceI
ec10: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b d.. {
ec20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
ec30: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 get { return s
ec40: 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 erviceId; }..
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
ec60: 20 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 { serviceId = v
ec70: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
ec80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
ec90: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ecc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ecd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
ece0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
ecf0: 20 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 Guid dataSource
ed00: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 Id;..
ed10: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 public Guid Dat
ed20: 61 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 aSourceId..
ed30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
ed40: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
ed50: 72 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 return dataSourc
ed60: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 eId; }..
ed70: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 set { da
ed80: 74 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c taSourceId = val
ed90: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
eda0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
edb0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
edc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
edd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
ee00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 private G
ee10: 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 uid dataProvider
ee20: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 Id;..
ee30: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 public Guid Dat
ee40: 61 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 aProviderId..
ee50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
ee70: 7b 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f { return dataPro
ee80: 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 viderId; }..
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
eea0: 7b 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 { dataProviderId
eeb0: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
eec0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
eed0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
eee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
eef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ef00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ef10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
ef20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
ef30: 76 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 vate Guid adoNet
ef40: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 TechnologyId;..
ef50: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
ef60: 63 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 c Guid AdoNetTec
ef70: 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 hnologyId..
ef80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
ef90: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
efa0: 72 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 return adoNetTec
efb0: 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 hnologyId; }..
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
efd0: 74 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f t { adoNetTechno
efe0: 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 logyId = value;
eff0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
f000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 .. #e
f010: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 ndregion..
f020: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e }.. #en
f030: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 dregion....
f040: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
f050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
f090: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f #region Co
f0a0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 nfiguration Clas
f0b0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 s.. priva
f0c0: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 te sealed class
f0d0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 Configuration..
f0e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
f0f0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 #region Pr
f100: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d ivate Constants.
f110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
f120: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 vate const char
f130: 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 Switch = '-';..
f140: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
f150: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c te const char Al
f160: 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a tSwitch = '/';..
f170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
f180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f1c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
f1d0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
f1e0: 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 readonly char[]
f1f0: 53 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d SwitchChars = {.
f200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f210: 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 Switch, AltSwit
f220: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ch..
f230: 7d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 };..
f240: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 #endregion....
f250: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
f2a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 . #re
f2b0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e gion Private Con
f2c0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 structors..
f2d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 43 private C
f2e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 onfiguration(..
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 A
f300: 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 ssembly assembly
f310: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
f320: 20 20 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c string logFil
f330: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 eName,..
f340: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 string d
f350: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 irectory,..
f360: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
f370: 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d g coreFileName,.
f380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f390: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 string linqFile
f3a0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 Name,..
f3b0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 string de
f3c0: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d signerFileName,.
f3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f3e0: 20 73 74 72 69 6e 67 20 72 65 67 69 73 74 72 79 string registry
f3f0: 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 Version,..
f400: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
f410: 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 2c 0d configVersion,.
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f430: 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f string vsVersio
f440: 6e 53 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 nSuffix,..
f450: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
f460: 20 64 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a 20 debugFormat,..
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
f480: 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 tring traceForma
f490: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
f4a0: 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 InstallFlags
f4b0: 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a installFlags,..
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f4d0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65 TracePriority de
f4e0: 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 bugPriority,..
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
f500: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 acePriority trac
f510: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 ePriority,..
f520: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
f530: 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 perUser,..
f540: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
f550: 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20 20 20 install,..
f560: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 bool w
f570: 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 ow64,..
f580: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75 bool noRu
f590: 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 ntimeVersion,..
f5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
f5b0: 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a ool noDesktop,..
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f5d0: 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d bool noCompact,.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f5f0: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c bool noNetFx20,
f600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
f610: 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 bool noNetFx35
f620: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
f630: 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 bool noNetFx4
f640: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0,..
f650: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 bool noNetFx
f660: 34 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 45,..
f670: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 bool noVs20
f680: 30 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 05,..
f690: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 bool noVs20
f6a0: 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 08,..
f6b0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 bool noVs20
f6c0: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 10,..
f6d0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 bool noVs20
f6e0: 31 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 12,..
f6f0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 bool noVs20
f700: 31 33 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 13,..
f710: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 bool noTrac
f720: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
f730: 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f bool noConso
f740: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 le,..
f750: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c bool noLog,
f760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
f770: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 bool throwOnMi
f780: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 ssing,..
f790: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 bool wha
f7a0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf,..
f7b0: 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 bool debug
f7c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
f7d0: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c bool verbose,
f7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
f7f0: 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a bool confirm..
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
f820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
f830: 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 this.assembly
f840: 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 = assembly;..
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 thi
f860: 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 s.logFileName =
f870: 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 logFileName;..
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 th
f890: 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64 is.directory = d
f8a0: 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 irectory;..
f8b0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
f8c0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 coreFileName = c
f8d0: 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 oreFileName;..
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 th
f8f0: 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 is.linqFileName
f900: 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d = linqFileName;.
f910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f920: 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69 this.designerFi
f930: 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 leName = designe
f940: 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 rFileName;..
f950: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 this
f960: 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e .registryVersion
f970: 20 3d 20 72 65 67 69 73 74 72 79 56 65 72 73 69 = registryVersi
f980: 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on;..
f990: 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 67 this.config
f9a0: 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 Version = config
f9b0: 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 Version;..
f9c0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 this.v
f9d0: 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d sVersionSuffix =
f9e0: 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 vsVersionSuffix
f9f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
fa00: 20 20 20 74 68 69 73 2e 64 65 62 75 67 46 6f 72 this.debugFor
fa10: 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72 6d 61 mat = debugForma
fa20: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t;..
fa30: 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 46 6f this.traceFo
fa40: 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f 72 6d rmat = traceForm
fa50: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at;..
fa60: 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c this.instal
fa70: 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c lFlags = install
fa80: 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 Flags;..
fa90: 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 this.deb
faa0: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64 65 62 ugPriority = deb
fab0: 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 ugPriority;..
fac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 thi
fad0: 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 s.tracePriority
fae0: 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b = tracePriority;
faf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
fb00: 20 20 74 68 69 73 2e 70 65 72 55 73 65 72 20 3d this.perUser =
fb10: 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20 perUser;..
fb20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
fb30: 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c install = instal
fb40: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l;..
fb50: 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d this.wow64 =
fb60: 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 wow64;..
fb70: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f this.no
fb80: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d RuntimeVersion =
fb90: 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f noRuntimeVersio
fba0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n;..
fbb0: 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74 this.noDeskt
fbc0: 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d op = noDesktop;.
fbd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
fbe0: 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 this.noCompact
fbf0: 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 = noCompact;..
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 th
fc10: 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e is.noNetFx20 = n
fc20: 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 oNetFx20;..
fc30: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
fc40: 6e 6f 4e 65 74 46 78 33 35 20 3d 20 6e 6f 4e 65 noNetFx35 = noNe
fc50: 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20 tFx35;..
fc60: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e this.noN
fc70: 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78 etFx40 = noNetFx
fc80: 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 40;..
fc90: 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 this.noNetF
fca0: 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34 35 3b x45 = noNetFx45;
fcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
fcc0: 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 35 20 this.noVs2005
fcd0: 3d 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 = noVs2005;..
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 thi
fcf0: 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 s.noVs2008 = noV
fd00: 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 s2008;..
fd10: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 this.noV
fd20: 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 s2010 = noVs2010
fd30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
fd40: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 32 this.noVs2012
fd50: 20 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 = noVs2012;..
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 th
fd70: 69 73 2e 6e 6f 56 73 32 30 31 33 20 3d 20 6e 6f is.noVs2013 = no
fd80: 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20 20 Vs2013;..
fd90: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f this.no
fda0: 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65 3b Trace = noTrace;
fdb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
fdc0: 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c 65 this.noConsole
fdd0: 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 = noConsole;..
fde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
fdf0: 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f his.noLog = noLo
fe00: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g;..
fe10: 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77 4f 6e this.throwOn
fe20: 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f 77 4f Missing = throwO
fe30: 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 nMissing;..
fe40: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e this.
fe50: 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b whatIf = whatIf;
fe60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
fe70: 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d 20 64 this.debug = d
fe80: 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 ebug;..
fe90: 20 20 20 20 20 20 20 74 68 69 73 2e 76 65 72 62 this.verb
fea0: 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a ose = verbose;..
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fec0: 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 this.confirm = c
fed0: 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 onfirm;..
fee0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
fef0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a #endregion..
ff00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
ff10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ff20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ff30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ff40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ff50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
ff60: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 #region Private
ff70: 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d Static Methods.
ff80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
ff90: 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 vate static void
ffa0: 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e GetDefaultFileN
ffb0: 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 ames(..
ffc0: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e ref strin
ffd0: 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 g directory,..
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
fff0: 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c f string coreFil
10000 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 eName,..
10010 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 ref stri
10020 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c ng linqFileName,
10030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
10040 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 65 73 ref string des
10050 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 ignerFileName..
10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 )
10070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
10080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
10090 20 69 66 20 28 74 68 69 73 41 73 73 65 6d 62 6c if (thisAssembl
100a0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 y == null)..
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
100c0 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 return;....
100d0 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 direc
100e0 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 tory = Path.GetD
100f0 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 irectoryName(thi
10100 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 sAssembly.Locati
10110 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 on);....
10120 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 if (Stri
10130 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 ng.IsNullOrEmpty
10140 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 (directory))..
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10160 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 return;....
10170 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 cor
10180 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 eFileName = Path
10190 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f .Combine(directo
101a0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ry,..
101b0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c Install
101c0 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 er.CoreFileName)
101d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
101e0 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d linqFileNam
101f0 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 e = Path.Combine
10200 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 (directory,..
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10220 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 Installer.LinqF
10230 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 ileName);....
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 des
10250 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 ignerFileName =
10260 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 Path.Combine(dir
10270 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 ectory,..
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 Ins
10290 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 taller.DesignerF
102a0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 ileName);..
102b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
102c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
102d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
102e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
102f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
10310 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
10320 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 te static bool C
10330 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 heckOption(..
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 ref
10350 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20 20 string arg..
10360 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
10370 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
10390 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 61 tring result = a
103a0 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 rg;....
103b0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 if (!Stri
103c0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 ng.IsNullOrEmpty
103d0 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 (result))..
103e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10400 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
10410 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 // NOT
10420 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 E: Remove all le
10430 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68 61 ading switch cha
10440 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rs...
10450 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
10460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10470 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c 74 result = result
10480 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74 63 .TrimStart(Switc
10490 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 hChars);....
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
104b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
104c0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a // NOTE:
104d0 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73 20 How many chars
104e0 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 were removed?..
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10500 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
10510 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 int c
10520 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74 ount = arg.Lengt
10530 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 h - result.Lengt
10540 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 h;....
10550 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10570 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74 // NOTE: Was t
10580 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f 6e here at least on
10590 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e?..
105a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
105b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
105c0 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a if (count > 0)..
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
105e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
10600 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
10610 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f // NO
10620 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20 TE: Ok, replace
10630 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a their original..
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10650 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
10660 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 argument...
10670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10680 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
10690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
106a0 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d arg = result;...
106b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
106c0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
106e0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 // NOTE: Ye
106f0 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77 69 s, this is a swi
10700 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 tch...
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
10720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
10730 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
10740 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 true;..
10750 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
10770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
10780 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
10790 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
107a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
107b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
107c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
107d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
107e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
107f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
10800 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
10810 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69 c bool MatchOpti
10820 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on(..
10830 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 2c string arg,
10840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
10850 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d string option.
10860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
10870 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )..
10880 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
10890 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20 6e if ((arg == n
108a0 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 ull) || (option
108b0 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 == null))..
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
108d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a eturn false;....
108e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
108f0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f return String.Co
10900 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f 70 mpare(arg, 0, op
10910 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20 tion, 0,..
10920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 ar
10930 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e 67 g.Length, String
10940 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e Comparison.Ordin
10950 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d alIgnoreCase) ==
10960 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 0;..
10970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
10980 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
10990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
109a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
109b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
109c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
109d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
109e0 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42 tic bool? ParseB
109f0 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20 20 oolean(..
10a00 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
10a10 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20 text..
10a20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
10a30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
10a40 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 if (!Str
10a50 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 ing.IsNullOrEmpt
10a60 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 y(text))..
10a70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10a90 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a bool value;....
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10ab0 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79 if (bool.Try
10ac0 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74 20 Parse(text, out
10ad0 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 value))..
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10af0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a return value;..
10b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
10b20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c return null
10b30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
10b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
10b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10b90 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
10ba0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
10bb0 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45 6e c object ParseEn
10bc0 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 um(..
10bd0 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54 79 Type enumTy
10be0 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 pe,..
10bf0 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 string text
10c00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
10c10 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a bool noCase..
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10c30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
10c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
10c50 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65 20 if ((enumType
10c60 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 == null) || !enu
10c70 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 mType.IsEnum)..
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10c90 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d return null;.
10ca0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
10cb0 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 if (!String.I
10cc0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 sNullOrEmpty(tex
10cd0 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t))..
10ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d try.
10d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
10d10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10d30 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73 return Enum.Pars
10d40 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78 74 e(enumType, text
10d50 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20 , noCase);..
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10d70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
10d80 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 catch..
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10da0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
10dc0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 do nothing...
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10de0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
10df0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
10e00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
10e10 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 null;..
10e20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
10e30 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
10e40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
10e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
10e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
10e90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... #
10ea0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 region Public St
10eb0 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 atic Methods..
10ec0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
10ed0 20 73 74 61 74 69 63 20 43 6f 6e 66 69 67 75 72 static Configur
10ee0 61 74 69 6f 6e 20 43 72 65 61 74 65 44 65 66 61 ation CreateDefa
10ef0 75 6c 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 ult()..
10f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
10f10 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 string dir
10f20 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a ectory = null;..
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10f40 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e string coreFileN
10f50 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 ame = null;..
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 str
10f70 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 ing linqFileName
10f80 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 = null;..
10f90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
10fa0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d designerFileNam
10fb0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 e = null;....
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 Get
10fd0 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 DefaultFileNames
10fe0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
10ff0 20 20 20 20 20 20 20 72 65 66 20 64 69 72 65 63 ref direc
11000 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69 tory, ref coreFi
11010 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 leName, ref linq
11020 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 FileName,..
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
11040 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e ef designerFileN
11050 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ame);....
11060 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
11070 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69 6f new Configuratio
11080 6e 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 n(thisAssembly,
11090 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c null, directory,
110a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
110b0 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 coreFileNa
110c0 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 me, linqFileName
110d0 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 , designerFileNa
110e0 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d me, null, null,.
110f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11100 20 20 20 20 20 6e 75 6c 6c 2c 20 54 72 61 63 65 null, Trace
11110 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c Ops.DebugFormat,
11120 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 TraceOps.TraceF
11130 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 ormat,..
11140 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 Inst
11150 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 allFlags.Default
11160 2c 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e , TracePriority.
11170 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20 20 20 20 Default,..
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
11190 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 acePriority.Defa
111a0 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 ult, false, true
111b0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 , false, false,
111c0 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 false,..
111d0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 fals
111e0 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c e, false, false,
111f0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 false, false, f
11200 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c alse, false, fal
11210 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se,..
11220 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 false,
11230 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 false, false, fa
11240 6c 73 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 lse, false, true
11250 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 0d 0a , true, false,..
11260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11270 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 false, false
11280 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
11290 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
112a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
112b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
112c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
112d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
112e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
112f0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 [MethodImpl(
11300 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e MethodImplOption
11310 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a s.NoInlining)]..
11320 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
11330 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 ic static bool F
11340 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20 romArgs(..
11350 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
11360 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 [] args,..
11370 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 bool s
11380 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 trict,..
11390 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66 ref Conf
113a0 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 iguration config
113b0 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 uration,..
113c0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 ref st
113d0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 ring error..
113e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
113f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
11410 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y..
11420 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
11430 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 if (ar
11440 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 gs == null)..
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11460 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true
11470 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
11480 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e if (con
11490 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 figuration == nu
114a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
114c0 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e figuration = Con
114d0 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74 figuration.Creat
114e0 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20 eDefault();....
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11500 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 int length =
11510 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a args.Length;....
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11530 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 for (int ind
11540 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 ex = 0; index <
11550 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 length; index++)
11560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11570 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11590 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72 string arg = ar
115a0 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 gs[index];....
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
115c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
115e0 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 // NOTE: Skip
115f0 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 74 68 61 any argument tha
11600 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f 72 t is null (?) or
11610 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 an empty..
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11630 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69 // stri
11640 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ng...
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d //.
11660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11670 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 if (Str
11680 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 ing.IsNullOrEmpt
11690 79 28 61 72 67 29 29 0d 0a 20 20 20 20 20 20 20 y(arg))..
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
116b0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a continue;..
116c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
116d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
116f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 // NOTE: W
11700 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 6d e are going to m
11710 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67 69 6e odify the origin
11720 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20 al argument..
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11740 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79 // by
11750 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c 65 removing any le
11760 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68 61 ading option cha
11770 72 61 63 74 65 72 73 3b 0d 0a 20 20 20 20 20 20 racters;..
11780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11790 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72 65 // there
117a0 66 6f 72 65 2c 20 77 65 20 75 73 65 20 61 20 6e fore, we use a n
117b0 65 77 20 73 74 72 69 6e 67 20 74 6f 20 68 6f 6c ew string to hol
117c0 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 d the..
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
117e0 2f 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64 / modified
117f0 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 argument...
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11810 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11830 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d 20 string newArg =
11840 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 arg;....
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11860 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
11870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e // N
11880 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 OTE: All the sup
11890 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c ported command l
118a0 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 ine options must
118b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
118c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 //
118d0 20 20 20 62 65 67 69 6e 20 77 69 74 68 20 61 6e begin with an
118e0 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65 option characte
118f0 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73 0d r (e.g. a minus.
11900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11910 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
11920 20 20 6f 72 20 66 6f 72 77 61 72 64 20 73 6c 61 or forward sla
11930 73 68 29 3b 20 61 74 74 65 6d 70 74 20 74 6f 20 sh); attempt to
11940 76 61 6c 69 64 61 74 65 20 74 68 61 74 0d 0a 20 validate that..
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11960 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
11970 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c now. If we fail
11980 20 69 6e 20 73 74 72 69 63 74 20 6d 6f 64 65 2c in strict mode,
11990 20 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a 20 we are done;..
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
119b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
119c0 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20 otherwise, just
119d0 73 6b 69 70 20 74 68 69 73 20 61 72 67 75 6d 65 skip this argume
119e0 6e 74 20 61 6e 64 20 61 64 76 61 6e 63 65 0d 0a nt and advance..
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11a00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
11a10 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e 65 to the next one
11a20 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
11a30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11a50 20 20 20 20 20 20 20 69 66 20 28 21 43 68 65 63 if (!Chec
11a60 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41 kOption(ref newA
11a70 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 rg))..
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
11a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
11ab0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 or = TraceOps.De
11ac0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 bugAndTrace(..
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
11af0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 acePriority.Lowe
11b00 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 st, debugCallbac
11b10 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 k,..
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11b30 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 traceCallbac
11b40 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 k, String.Format
11b50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11b70 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64 20 "Unsupported
11b80 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 command line arg
11b90 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20 ument: {0}",..
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f Fo
11bc0 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 rDisplay(arg)),
11bd0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
11be0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
11bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
11c00 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 f (strict)..
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11c20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
11c30 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 rn false;....
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11c50 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 continu
11c60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
11c70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
11c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
11c90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11cb0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c // NOTE: Al
11cc0 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 l the supported
11cd0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 command line opt
11ce0 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 ions must..
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11d00 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 76 65 // have
11d10 20 61 20 76 61 6c 75 65 3b 20 74 68 65 72 65 66 a value; theref
11d20 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 ore, attempt to
11d30 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 advance..
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11d50 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20 // to it
11d60 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c now. If we fail
11d70 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a , we are done...
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11d90 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11db0 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a index++;....
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11dd0 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 if (inde
11de0 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20 20 x >= length)..
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11e00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11e20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 error = Tra
11e30 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 ceOps.DebugAndTr
11e40 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ace(..
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11e60 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 TracePrior
11e70 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 ity.Lowest, debu
11e80 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 gCallback,..
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
11eb0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
11ec0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11ee0 20 20 20 20 20 20 20 20 20 20 20 22 4d 69 73 73 "Miss
11ef0 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f 70 ing value for op
11f00 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 tion: {0}",..
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 For
11f30 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 Display(arg)), t
11f40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
11f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
11f70 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 (strict)..
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11f90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
11fa0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 n false;....
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11fc0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a break;..
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11fe0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12000 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12020 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 // NOTE: Grab t
12030 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 he textual value
12040 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 of this command
12050 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 line..
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
12070 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 0d / option..
12080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12090 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
120b0 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 string text
120c0 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d = args[index];.
120d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
120e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12100 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 // NOTE:
12110 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68 Figure out which
12120 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 command line op
12130 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20 20 tion this is..
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12150 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 // (
12160 62 61 73 65 64 20 6f 6e 20 61 20 70 61 72 74 69 based on a parti
12170 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29 20 61 al name match) a
12180 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a 20 20 20 nd then try..
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
121a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f // to
121b0 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20 74 interpret the t
121c0 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20 extual value as
121d0 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20 the correct..
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
121f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 79 // ty
12200 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 pe...
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d //.
12220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12230 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61 74 if (Mat
12240 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c chOption(newArg,
12250 20 22 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 "configVersion"
12260 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
12270 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12290 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
122a0 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56 guration.configV
122b0 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a ersion = text;..
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
122d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
122f0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 else if (Matc
12300 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 hOption(newArg,
12310 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20 "confirm"))..
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12330 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12350 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 bool? value
12360 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 = ParseBoolean(t
12370 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ext);....
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12390 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d if (value =
123a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
123c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
123e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
123f0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
12400 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 dTrace(..
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
12430 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 cePriority.Lowes
12440 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b t, debugCallback
12450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12470 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
12480 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
12490 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
124b0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c "Inval
124c0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 id {0} boolean v
124d0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 alue: {1}",..
124e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12500 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 ForDisplay(arg)
12510 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 , ForDisplay(tex
12520 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 t)),..
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12540 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
12550 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
12580 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 (strict)..
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
125b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 turn false;....
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
125e0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 ontinue;..
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12600 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
12610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12620 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 configura
12630 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 tion.confirm = (
12640 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 bool)value;..
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12660 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12680 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 else if (MatchOp
12690 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f tion(newArg, "co
126a0 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 reFileName"))..
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
126c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
126e0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
126f0 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 ion.coreFileName
12700 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 = text;..
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12720 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 els
12740 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f e if (MatchOptio
12750 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 n(newArg, "debug
12760 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 "))..
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12790 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
127a0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 ? value = ParseB
127b0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d oolean(text);...
127c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
127e0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d (value == null).
127f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12830 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 error = TraceOps
12840 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d .DebugAndTrace(.
12850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
12860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12870 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 TracePriori
12880 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 ty.Lowest, debug
12890 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 Callback,..
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
128c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 raceCallback, St
128d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 ring.Format(..
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12900 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 "Invalid {0} b
12910 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 oolean value: {1
12920 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }",..
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12940 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
12950 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 lay(arg), ForDis
12960 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 play(text)),..
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12990 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
129a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
129b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
129c0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 if (strict)
129d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
129e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
129f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
12a00 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 se;....
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12a20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b continue;
12a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
12a50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
12a70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 onfiguration.deb
12a80 75 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 ug = (bool)value
12a90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
12aa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12ac0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d else if (M
12ad0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 atchOption(newAr
12ae0 67 2c 20 22 64 65 62 75 67 46 6f 72 6d 61 74 22 g, "debugFormat"
12af0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
12b00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12b20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
12b30 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f guration.debugFo
12b40 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 rmat = text;..
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12b60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f TraceO
12b70 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d ps.DebugFormat =
12b80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 configuration.d
12b90 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 ebugFormat;..
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12bb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12bd0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 else if (MatchOp
12be0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 tion(newArg, "de
12bf0 62 75 67 50 72 69 6f 72 69 74 79 22 29 29 0d 0a bugPriority"))..
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12c10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12c30 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 object va
12c40 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 lue = ParseEnum(
12c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12c70 20 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 typeof(TracePr
12c80 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 iority), text, t
12c90 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 rue);....
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12cb0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d if (value =
12cc0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12d00 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
12d10 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
12d20 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 dTrace(..
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
12d50 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 cePriority.Lowes
12d60 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b t, debugCallback
12d70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12d90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
12da0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
12db0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12dd0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c "Inval
12de0 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 id {0} value: {1
12df0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }",..
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12e10 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
12e20 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 lay(arg), ForDis
12e30 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 play(text)),..
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12e60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
12e70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12e90 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 if (strict)
12ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12ec0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
12ed0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 se;....
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12ef0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b continue;
12f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
12f20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
12f40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 onfiguration.deb
12f50 75 67 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 ugPriority = (Tr
12f60 61 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 acePriority)valu
12f70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12f90 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 50 72 TraceOps.DebugPr
12fa0 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 iority = configu
12fb0 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f ration.debugPrio
12fc0 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 rity;..
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
12fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
12ff0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 else i
13000 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e f (MatchOption(n
13010 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72 ewArg, "designer
13020 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 FileName"))..
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13060 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
13070 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 n.designerFileNa
13080 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 me = text;..
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
130a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
130c0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 lse if (MatchOpt
130d0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72 ion(newArg, "dir
130e0 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20 ectory"))..
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13100 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13120 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e configuration.
13130 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74 directory = text
13140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13160 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13180 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49 // NOTE: *SPECI
13190 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68 AL* Must refresh
131a0 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d the file names.
131b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
131d0 20 20 20 20 20 20 68 65 72 65 20 62 65 63 61 75 here becau
131e0 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e se the underlyin
131f0 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 g directory..
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13210 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
13220 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a has changed...
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13260 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
13270 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 ng coreFileName
13280 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e = configuration.
13290 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d coreFileName;...
132a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
132c0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f (!String.IsNullO
132d0 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e rEmpty(coreFileN
132e0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ame))..
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13300 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e coreFileN
13310 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 ame = Path.GetFi
13320 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e leName(coreFileN
13330 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ame);....
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13350 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e if (String.
13360 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f IsNullOrEmpty(co
13370 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 reFileName))..
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
133a0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 reFileName = Ins
133b0 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e taller.CoreFileN
133c0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ame;....
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
133f0 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d n.coreFileName =
13400 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a Path.Combine(..
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13430 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 configuration.di
13440 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c rectory, coreFil
13450 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 eName);....
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13470 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 string li
13480 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e nqFileName = con
13490 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 figuration.linqF
134a0 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 ileName;....
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
134c0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 if (!Str
134d0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 ing.IsNullOrEmpt
134e0 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 y(linqFileName))
134f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13510 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d linqFileName =
13520 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d Path.GetFileNam
13530 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b e(linqFileName);
13540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13560 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c if (String.IsNul
13570 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c lOrEmpty(linqFil
13580 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 eName))..
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
135a0 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c linqFil
135b0 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 eName = Installe
135c0 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d r.LinqFileName;.
135d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
135f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e onfiguration.lin
13600 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 qFileName = Path
13610 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 .Combine(..
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13630 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
13640 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f guration.directo
13650 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 ry, linqFileName
13660 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13680 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 string designe
13690 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 rFileName = conf
136a0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e iguration.design
136b0 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 erFileName;....
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
136d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 if (!
136e0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 String.IsNullOrE
136f0 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c mpty(designerFil
13700 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 eName))..
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13720 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 designe
13730 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 rFileName = Path
13740 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73 .GetFileName(des
13750 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d ignerFileName);.
13760 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
13780 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c f (String.IsNull
13790 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 OrEmpty(designer
137a0 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 FileName))..
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
137c0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 desi
137d0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49 gnerFileName = I
137e0 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 nstaller.Designe
137f0 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 rFileName;....
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13810 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 config
13820 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 uration.designer
13830 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e FileName = Path.
13840 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 Combine(..
13850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13860 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 config
13870 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 uration.director
13880 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e y, designerFileN
13890 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 ame);..
138a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
138b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
138c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 else i
138d0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e f (MatchOption(n
138e0 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22 ewArg, "install"
138f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
13900 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13920 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f bool?
13930 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f value = ParseBo
13940 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a olean(text);....
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13960 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
13970 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a value == null)..
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13990 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
139c0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e rror = TraceOps.
139d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a DebugAndTrace(..
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a00 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 TracePriorit
13a10 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 y.Lowest, debugC
13a20 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 allback,..
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
13a50 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 aceCallback, Str
13a60 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a90 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f "Invalid {0} bo
13aa0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d olean value: {1}
13ab0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ad0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
13ae0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 ay(arg), ForDisp
13af0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 lay(text)),..
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
13b30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b50 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d if (strict).
13b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
13b90 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e;....
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13bb0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d continue;.
13bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
13be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
13c00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 nfiguration.inst
13c10 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 all = (bool)valu
13c20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
13c30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13c50 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 else if (
13c60 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 MatchOption(newA
13c70 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67 rg, "installFlag
13c80 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 s"))..
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
13ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a obj
13cc0 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 ect value = Pars
13cd0 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 eEnum(..
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13cf0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 typeof(I
13d00 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 nstallFlags), te
13d10 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 xt, true);....
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13d30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 if (va
13d40 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 lue == null)..
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13d60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
13d90 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 or = TraceOps.De
13da0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 bugAndTrace(..
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13dd0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e TracePriority.
13de0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c Lowest, debugCal
13df0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 lback,..
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
13e20 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
13e30 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
13e60 49 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20 Invalid install
13e70 66 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d flags value: {0}
13e80 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ea0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
13eb0 61 79 28 74 65 78 74 29 29 2c 20 74 72 61 63 65 ay(text)), trace
13ec0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 Category);....
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
13ef0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 (strict)..
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
13f20 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a eturn false;....
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f50 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 continue;..
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f90 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 configur
13fa0 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 ation.installFla
13fb0 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61 gs = (InstallFla
13fc0 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 gs)value;..
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13fe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c el
14000 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 se if (MatchOpti
14010 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71 on(newArg, "linq
14020 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 FileName"))..
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14060 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
14070 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d n.linqFileName =
14080 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 text;..
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
140a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
140b0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 else
140c0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 if (MatchOption(
140d0 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69 6c 65 newArg, "logFile
140e0 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 Name"))..
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14120 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f configuration.lo
14130 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 gFileName = text
14140 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
14150 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14170 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d else if (M
14180 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 atchOption(newAr
14190 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29 g, "noCompact"))
141a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
141b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
141d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 bool? v
141e0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c alue = ParseBool
141f0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 ean(text);....
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14210 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 if (va
14220 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 lue == null)..
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
14270 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 or = TraceOps.De
14280 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 bugAndTrace(..
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
142b0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e TracePriority.
142c0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c Lowest, debugCal
142d0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 lback,..
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
142f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
14300 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
14310 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
14340 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c Invalid {0} bool
14350 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c ean value: {1}",
14360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14380 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
14390 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 (arg), ForDispla
143a0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 y(text)),..
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
143d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
143e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14400 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 if (strict)..
14410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14430 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
14440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14460 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 continue;..
14470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14480 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
144a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 conf
144b0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 iguration.noComp
144c0 61 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 act = (bool)valu
144d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
144e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14500 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 else if (
14510 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 MatchOption(newA
14520 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 rg, "noConsole")
14530 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
14540 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14560 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 bool?
14570 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f value = ParseBoo
14580 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 lean(text);....
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
145a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 if (v
145b0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 alue == null)..
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
145d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
14600 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 ror = TraceOps.D
14610 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 ebugAndTrace(..
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14640 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 TracePriority
14650 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 .Lowest, debugCa
14660 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 llback,..
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
14690 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 ceCallback, Stri
146a0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
146d0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f "Invalid {0} boo
146e0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 lean value: {1}"
146f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14710 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 ForDispla
14720 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c y(arg), ForDispl
14730 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 ay(text)),..
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14760 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
14770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14790 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a if (strict)..
147a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
147c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
147d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
147f0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a continue;..
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14810 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
14820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
14840 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e figuration.noCon
14850 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c sole = (bool)val
14860 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue;..
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14890 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 else if
148a0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 (MatchOption(new
148b0 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22 Arg, "noDesktop"
148c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
148d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
148f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f bool?
14900 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f value = ParseBo
14910 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a olean(text);....
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14930 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
14940 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a value == null)..
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14960 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
14990 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e rror = TraceOps.
149a0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a DebugAndTrace(..
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
149d0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 TracePriorit
149e0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 y.Lowest, debugC
149f0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 allback,..
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
14a20 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 aceCallback, Str
14a30 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14a60 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f "Invalid {0} bo
14a70 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d olean value: {1}
14a80 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14aa0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
14ab0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 ay(arg), ForDisp
14ac0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 lay(text)),..
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14af0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
14b00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14b20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d if (strict).
14b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14b50 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
14b60 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e;....
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14b80 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d continue;.
14b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
14bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
14bd0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 nfiguration.noDe
14be0 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61 sktop = (bool)va
14bf0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lue;..
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
14c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14c20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 else if
14c30 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 (MatchOption(ne
14c40 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d wArg, "noLog")).
14c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14c80 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 bool? va
14c90 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 lue = ParseBoole
14ca0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 an(text);....
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14cc0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c if (val
14cd0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ue == null)..
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14cf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14d10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
14d20 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 r = TraceOps.Deb
14d30 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 ugAndTrace(..
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14d60 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c TracePriority.L
14d70 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c owest, debugCall
14d80 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 back,..
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14da0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
14db0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 Callback, String
14dc0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 "I
14df0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 nvalid {0} boole
14e00 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d an value: {1}",.
14e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14e30 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 ForDisplay(
14e40 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 arg), ForDisplay
14e50 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 (text)),..
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
14e80 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
14e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14eb0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 if (strict)..
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ee0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
14ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14f10 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 continue;..
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14f30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14f50 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
14f60 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d guration.noLog =
14f70 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 (bool)value;..
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14f90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14fb0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 else if (Match
14fc0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 Option(newArg, "
14fd0 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a 20 20 noNetFx20"))..
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15010 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 bool? value
15020 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 = ParseBoolean(
15030 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 text);....
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15050 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 if (value
15060 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15080 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
150a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
150b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
150c0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 ndTrace(..
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
150f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 acePriority.Lowe
15100 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 st, debugCallbac
15110 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 k,..
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15130 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c traceCal
15140 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f lback, String.Fo
15150 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15170 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 "Inva
15180 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 lid {0} boolean
15190 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 value: {1}",..
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
151c0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 ForDisplay(arg
151d0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 ), ForDisplay(te
151e0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 xt)),..
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15200 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
15210 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 Category);....
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
15240 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 (strict)..
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
15270 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a eturn false;....
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
152a0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 continue;..
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
152c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
152e0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 configur
152f0 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 ation.noNetFx20
15300 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a = (bool)value;..
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15320 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15340 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 else if (Matc
15350 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 hOption(newArg,
15360 22 6e 6f 4e 65 74 46 78 33 35 22 29 29 0d 0a 20 "noNetFx35"))..
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15380 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
153a0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 bool? valu
153b0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e e = ParseBoolean
153c0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 (text);....
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
153e0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 if (value
153f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15410 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15430 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
15440 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 = TraceOps.Debug
15450 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 AndTrace(..
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
15480 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 racePriority.Low
15490 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 est, debugCallba
154a0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ck,..
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
154c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
154d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 llback, String.F
154e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15500 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 "Inv
15510 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e alid {0} boolean
15520 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 value: {1}",..
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15550 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 ForDisplay(ar
15560 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 g), ForDisplay(t
15570 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ext)),..
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15590 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
155a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
155d0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 f (strict)..
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15600 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d return false;...
15610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15630 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 continue;..
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15650 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15670 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 configu
15680 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 ration.noNetFx35
15690 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d = (bool)value;.
156a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
156b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
156d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 else if (Mat
156e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c chOption(newArg,
156f0 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a "noNetFx40"))..
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15710 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15730 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c bool? val
15740 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 ue = ParseBoolea
15750 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 n(text);....
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15770 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 if (valu
15780 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 e == null)..
15790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
157a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
157c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
157d0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 = TraceOps.Debu
157e0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 gAndTrace(..
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15810 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f TracePriority.Lo
15820 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 west, debugCallb
15830 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ack,..
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15850 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
15860 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
15870 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15890 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e "In
158a0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 valid {0} boolea
158b0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a n value: {1}",..
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
158e0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 ForDisplay(a
158f0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 rg), ForDisplay(
15900 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 text)),..
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
15930 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a ceCategory);....
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15960 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 if (strict)..
15970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15990 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
159a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
159c0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 continue;..
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
159e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15a00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 config
15a10 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 uration.noNetFx4
15a20 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0 = (bool)value;
15a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
15a40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15a60 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 else if (Ma
15a70 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 tchOption(newArg
15a80 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d , "noNetFx45")).
15a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
15aa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15ac0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 bool? va
15ad0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 lue = ParseBoole
15ae0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 an(text);....
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15b00 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c if (val
15b10 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ue == null)..
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15b30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15b50 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
15b60 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 r = TraceOps.Deb
15b70 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 ugAndTrace(..
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15ba0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c TracePriority.L
15bb0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c owest, debugCall
15bc0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 back,..
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15be0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
15bf0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 Callback, String
15c00 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 "I
15c30 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 nvalid {0} boole
15c40 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d an value: {1}",.
15c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15c70 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 ForDisplay(
15c80 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 arg), ForDisplay
15c90 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 (text)),..
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
15cc0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
15cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15cf0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 if (strict)..
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15d20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
15d30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15d50 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 continue;..
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15d70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15d90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
15da0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 guration.noNetFx
15db0 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 45 = (bool)value
15dc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
15dd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15df0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d else if (M
15e00 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 atchOption(newAr
15e10 67 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72 g, "noRuntimeVer
15e20 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 sion"))..
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15e60 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 bool? value = Pa
15e70 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 rseBoolean(text)
15e80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15ea0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 if (value == nu
15eb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15ed0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15ef0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 error = Trac
15f00 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 eOps.DebugAndTra
15f10 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ce(..
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15f30 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 TracePr
15f40 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 iority.Lowest, d
15f50 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 ebugCallback,..
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15f80 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
15f90 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
15fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15fc0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b "Invalid {
15fd0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0} boolean value
15fe0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 : {1}",..
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 For
16010 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f Display(arg), Fo
16020 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c rDisplay(text)),
16030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16050 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
16060 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16080 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 if (str
16090 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ict)..
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
160b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
160c0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 false;....
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
160e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 conti
160f0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 nue;..
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16110 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16130 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e configuration
16140 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f .noRuntimeVersio
16150 6e 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b n = (bool)value;
16160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
16170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16190 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 else if (Ma
161a0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 tchOption(newArg
161b0 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20 , "noTrace"))..
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
161d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
161f0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 bool? valu
16200 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e e = ParseBoolean
16210 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 (text);....
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16230 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 if (value
16240 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
16250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16260 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16280 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
16290 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 = TraceOps.Debug
162a0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 AndTrace(..
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
162d0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 racePriority.Low
162e0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 est, debugCallba
162f0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ck,..
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16310 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
16320 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 llback, String.F
16330 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16350 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 "Inv
16360 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e alid {0} boolean
16370 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 value: {1}",..
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
163a0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 ForDisplay(ar
163b0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 g), ForDisplay(t
163c0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ext)),..
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
163e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
163f0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
16420 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 f (strict)..
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16450 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d return false;...
16460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16480 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 continue;..
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
164a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
164c0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 configu
164d0 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d ration.noTrace =
164e0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 (bool)value;..
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16500 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16520 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 else if (Match
16530 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 Option(newArg, "
16540 6e 6f 56 73 32 30 30 35 22 29 29 0d 0a 20 20 20 noVs2005"))..
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16560 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16580 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 bool? value
16590 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 = ParseBoolean(t
165a0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ext);....
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
165c0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d if (value =
165d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
165f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16610 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
16620 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
16630 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 dTrace(..
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
16660 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 cePriority.Lowes
16670 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b t, debugCallback
16680 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
166a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c traceCall
166b0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
166c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
166e0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c "Inval
166f0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 id {0} boolean v
16700 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 alue: {1}",..
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16730 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 ForDisplay(arg)
16740 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 , ForDisplay(tex
16750 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 t)),..
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16770 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
16780 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
167b0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 (strict)..
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
167e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 turn false;....
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
16810 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 ontinue;..
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16830 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16850 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 configura
16860 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20 tion.noVs2005 =
16870 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 (bool)value;..
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16890 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
168b0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f else if (MatchO
168c0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e ption(newArg, "n
168d0 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20 oVs2008"))..
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
168f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16910 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d bool? value =
16920 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 ParseBoolean(te
16930 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 xt);....
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16950 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d if (value ==
16960 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
169a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 error = T
169b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
169c0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 Trace(..
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
169e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
169f0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 ePriority.Lowest
16a00 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c , debugCallback,
16a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16a30 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 traceCallb
16a40 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d ack, String.Form
16a50 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16a70 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 "Invali
16a80 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 d {0} boolean va
16a90 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 lue: {1}",..
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ac0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c ForDisplay(arg),
16ad0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 ForDisplay(text
16ae0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )),..
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
16b10 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 tegory);....
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
16b40 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 strict)..
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
16b70 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 urn false;....
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
16ba0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 ntinue;..
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16bc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16be0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
16bf0 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28 ion.noVs2008 = (
16c00 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 bool)value;..
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16c20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16c40 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 else if (MatchOp
16c50 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f tion(newArg, "no
16c60 56 73 32 30 31 30 22 29 29 0d 0a 20 20 20 20 20 Vs2010"))..
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16c80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ca0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 bool? value =
16cb0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 ParseBoolean(tex
16cc0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 t);....
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ce0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 if (value ==
16cf0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16d10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16d30 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 error = Tr
16d40 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
16d50 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 race(..
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16d70 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
16d80 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c Priority.Lowest,
16d90 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d debugCallback,.
16da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16dc0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
16dd0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
16de0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16e00 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 "Invalid
16e10 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c {0} boolean val
16e20 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 ue: {1}",..
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
16e50 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 orDisplay(arg),
16e60 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 ForDisplay(text)
16e70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16e90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
16ea0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ec0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 if (s
16ed0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 trict)..
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ef0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
16f00 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 rn false;....
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
16f30 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 tinue;..
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16f70 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 configurati
16f80 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 62 on.noVs2010 = (b
16f90 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 ool)value;..
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16fb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
16fd0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 lse if (MatchOpt
16fe0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 ion(newArg, "noV
16ff0 73 32 30 31 32 22 29 29 0d 0a 20 20 20 20 20 20 s2012"))..
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17010 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17030 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 bool? value = P
17040 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 arseBoolean(text
17050 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17070 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e if (value == n
17080 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
170a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
170c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 error = Tra
170d0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 ceOps.DebugAndTr
170e0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ace(..
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17100 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 TraceP
17110 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 riority.Lowest,
17120 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a debugCallback,..
17130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17150 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 traceCallbac
17160 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 k, String.Format
17170 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17190 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 "Invalid
171a0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 {0} boolean valu
171b0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 e: {1}",..
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f Fo
171e0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 rDisplay(arg), F
171f0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 orDisplay(text))
17200 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17220 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 traceCate
17230 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 gory);....
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17250 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 if (st
17260 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 rict)..
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17280 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
17290 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 n false;....
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
172b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 cont
172c0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 inue;..
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
172e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17300 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
17310 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 28 62 6f n.noVs2012 = (bo
17320 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 ol)value;..
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17340 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c el
17360 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 se if (MatchOpti
17370 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 on(newArg, "noVs
17380 32 30 31 33 22 29 29 0d 0a 20 20 20 20 20 20 20 2013"))..
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
173a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
173c0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 bool? value = Pa
173d0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 rseBoolean(text)
173e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17400 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 if (value == nu
17410 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17450 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 error = Trac
17460 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 eOps.DebugAndTra
17470 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ce(..
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17490 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 TracePr
174a0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 iority.Lowest, d
174b0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 ebugCallback,..
174c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
174e0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
174f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
17500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17520 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b "Invalid {
17530 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0} boolean value
17540 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 : {1}",..
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 For
17570 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f Display(arg), Fo
17580 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c rDisplay(text)),
17590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
175b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
175c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
175e0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 if (str
175f0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ict)..
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17610 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
17620 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 false;....
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17640 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 conti
17650 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 nue;..
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17670 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17690 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e configuration
176a0 2e 6e 6f 56 73 32 30 31 33 20 3d 20 28 62 6f 6f .noVs2013 = (boo
176b0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 l)value;..
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
176d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 els
176f0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f e if (MatchOptio
17700 6e 28 6e 65 77 41 72 67 2c 20 22 70 65 72 55 73 n(newArg, "perUs
17710 65 72 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 er"))..
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
17730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f bo
17750 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 ol? value = Pars
17760 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d eBoolean(text);.
17770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
17790 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c f (value == null
177a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
177c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
177e0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f error = TraceO
177f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 ps.DebugAndTrace
17800 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17820 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f TracePrio
17830 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 rity.Lowest, deb
17840 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 ugCallback,..
17850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17870 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 traceCallback,
17880 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
178b0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d "Invalid {0}
178c0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 boolean value:
178d0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 {1}",..
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
178f0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 ForDi
17900 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 splay(arg), ForD
17910 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a isplay(text)),..
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17940 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
17950 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17970 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 if (stric
17980 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t)..
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
179a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
179b0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 alse;....
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
179d0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 continu
179e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17a00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17a20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70 configuration.p
17a30 65 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29 76 erUser = (bool)v
17a40 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alue;..
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
17a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
17a70 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 else i
17a80 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e f (MatchOption(n
17a90 65 77 41 72 67 2c 20 22 72 65 67 69 73 74 72 79 ewArg, "registry
17aa0 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 Version"))..
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17ac0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17ae0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e configuration
17af0 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e .registryVersion
17b00 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 = text;..
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17b20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 els
17b40 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f e if (MatchOptio
17b50 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69 63 n(newArg, "stric
17b60 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 t"))..
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
17b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
17ba0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 l? value = Parse
17bb0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a Boolean(text);..
17bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
17be0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 (value == null)
17bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
17c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c30 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 error = TraceOp
17c40 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 s.DebugAndTrace(
17c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c70 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 TracePrior
17c80 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 ity.Lowest, debu
17c90 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 gCallback,..
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17cc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 traceCallback, S
17cd0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 tring.Format(..
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17d00 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 "Invalid {0}
17d10 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b boolean value: {
17d20 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 1}",..
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17d40 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 ForDis
17d50 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 play(arg), ForDi
17d60 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 splay(text)),..
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17d90 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 traceCategory
17da0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17dc0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 if (strict
17dd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17df0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
17e00 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lse;....
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 continue
17e30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
17e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
17e50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e70 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e90 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 // NOTE: Allow t
17ea0 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 he command line
17eb0 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20 arguments to..
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17ed0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 //
17ee0 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 override the
17ef0 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74 "strictness" set
17f00 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 ting..
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17f20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 69 // provi
17f30 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle
17f40 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 r...
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17f60 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17f80 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76 strict = (bool)v
17f90 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alue;..
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
17fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
17fc0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 else i
17fd0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e f (MatchOption(n
17fe0 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d ewArg, "throwOnM
17ff0 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 20 issing"))..
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18010 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18030 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 bool? value =
18040 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 ParseBoolean(tex
18050 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 t);....
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18070 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 if (value ==
18080 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
180a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
180c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 error = Tr
180d0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
180e0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 race(..
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18100 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
18110 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c Priority.Lowest,
18120 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d debugCallback,.
18130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18150 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
18160 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
18170 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18190 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 "Invalid
181a0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c {0} boolean val
181b0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 ue: {1}",..
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
181e0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 orDisplay(arg),
181f0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 ForDisplay(text)
18200 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18220 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
18230 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18250 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 if (s
18260 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 trict)..
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
18290 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 rn false;....
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
182c0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 tinue;..
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
182e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18300 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 configurati
18310 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e on.throwOnMissin
18320 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b g = (bool)value;
18330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
18340 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18360 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 else if (Ma
18370 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 tchOption(newArg
18380 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29 , "traceFormat")
18390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
183a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
183c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 config
183d0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 uration.traceFor
183e0 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 mat = text;..
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18400 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 TraceOp
18410 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 s.TraceFormat =
18420 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 configuration.tr
18430 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 aceFormat;..
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18450 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
18470 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 lse if (MatchOpt
18480 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61 ion(newArg, "tra
18490 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 cePriority"))..
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
184b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
184c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
184d0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c object val
184e0 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d ue = ParseEnum(.
184f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18510 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 typeof(TracePri
18520 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 ority), text, tr
18530 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ue);....
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18550 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d if (value ==
18560 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18580 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
185a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 error = T
185b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
185c0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 Trace(..
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
185e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
185f0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 ePriority.Lowest
18600 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c , debugCallback,
18610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18630 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 traceCallb
18640 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d ack, String.Form
18650 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18670 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 "Invali
18680 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d d {0} value: {1}
18690 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
186b0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
186c0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 ay(arg), ForDisp
186d0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 lay(text)),..
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18700 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
18710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18730 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d if (strict).
18740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18760 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
18770 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e;....
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18790 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d continue;.
187a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
187c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
187e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 nfiguration.trac
187f0 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61 ePriority = (Tra
18800 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65 cePriority)value
18810 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
18830 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69 raceOps.TracePri
18840 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 ority = configur
18850 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 ation.tracePrior
18860 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ity;..
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
18880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
18890 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 else if
188a0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 (MatchOption(ne
188b0 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29 wArg, "verbose")
188c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
188d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
188f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 bool?
18900 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f value = ParseBoo
18910 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 lean(text);....
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18930 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 if (v
18940 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 alue == null)..
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18960 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
18990 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 ror = TraceOps.D
189a0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 ebugAndTrace(..
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
189d0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 TracePriority
189e0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 .Lowest, debugCa
189f0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 llback,..
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
18a20 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 ceCallback, Stri
18a30 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18a60 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f "Invalid {0} boo
18a70 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 lean value: {1}"
18a80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18aa0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 ForDispla
18ab0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c y(arg), ForDispl
18ac0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 ay(text)),..
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18af0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
18b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18b20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a if (strict)..
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18b50 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
18b60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18b80 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a continue;..
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
18bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
18bd0 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f figuration.verbo
18be0 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 se = (bool)value
18bf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
18c00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18c20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d else if (M
18c30 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 atchOption(newAr
18c40 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75 66 g, "vsVersionSuf
18c50 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20 20 fix"))..
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18c70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
18c90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 56 onfiguration.vsV
18ca0 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 74 ersionSuffix = t
18cb0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ext;..
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
18cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
18ce0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 else if
18cf0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 (MatchOption(ne
18d00 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 29 wArg, "whatIf"))
18d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
18d20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18d40 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 bool? v
18d50 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c alue = ParseBool
18d60 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 ean(text);....
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18d80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 if (va
18d90 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 lue == null)..
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18db0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
18de0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 or = TraceOps.De
18df0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 bugAndTrace(..
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e TracePriority.
18e30 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c Lowest, debugCal
18e40 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 lback,..
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18e60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
18e70 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
18e80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
18eb0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c Invalid {0} bool
18ec0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c ean value: {1}",
18ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18ef0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
18f00 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 (arg), ForDispla
18f10 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 y(text)),..
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
18f40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
18f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f70 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 if (strict)..
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18fa0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
18fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18fd0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 continue;..
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18ff0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19010 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 conf
19020 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 iguration.whatIf
19030 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d = (bool)value;.
19040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
19050 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19070 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 else if (Mat
19080 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c chOption(newArg,
19090 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20 "wow64"))..
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
190b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
190d0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d bool? value =
190e0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 ParseBoolean(te
190f0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 xt);....
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19110 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d if (value ==
19120 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19140 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19160 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 error = T
19170 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
19180 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 Trace(..
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
191a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
191b0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 ePriority.Lowest
191c0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c , debugCallback,
191d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
191f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 traceCallb
19200 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d ack, String.Form
19210 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 at(..
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19230 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 "Invali
19240 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 d {0} boolean va
19250 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 lue: {1}",..
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19280 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c ForDisplay(arg),
19290 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 ForDisplay(text
192a0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )),..
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
192c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
192d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 tegory);....
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
192f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
19300 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 strict)..
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
19330 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 urn false;....
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
19360 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 ntinue;..
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19380 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
193a0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
193b0 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f ion.wow64 = (boo
193c0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 l)value;..
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
193e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 els
19400 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
19410 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19430 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
19440 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 = TraceOps.Debug
19450 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 AndTrace(..
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19470 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
19480 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c Priority.Lowest,
19490 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d debugCallback,.
194a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
194c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 traceCallback,
194d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19500 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d "Unsupported com
19510 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e mand line option
19520 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 : {0}",..
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19540 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
19550 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 lay(arg)), trace
19560 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 Category);....
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19580 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 if (st
19590 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 rict)..
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
195b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
195c0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
195e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
195f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
19610 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 turn true;..
19620 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
19640 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 atch (Exception
19650 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e)..
19660 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
19670 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
19680 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 Ops.DebugAndTrac
19690 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e e(TracePriority.
196a0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 Highest,..
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
196c0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c debugCallback,
196d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 traceCallback,
196e0 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 e, traceCategory
196f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
19700 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
19710 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64 = "Failed to mod
19720 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ify configuratio
19730 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 n.";..
19740 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
19750 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
19760 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
19770 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
19780 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
19790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
197a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
197b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
197c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
197d0 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f [Metho
197e0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c dImpl(MethodImpl
197f0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 Options.NoInlini
19800 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ng)]..
19810 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 public static
19820 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20 bool Process(..
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
19840 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 tring[] args,..
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 C
19860 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e onfiguration con
19870 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 figuration,..
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
19890 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 l strict,..
198a0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 ref s
198b0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 tring error..
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a )..
198d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
198f0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ry..
19900 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
19910 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 if (c
19920 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 onfiguration ==
19930 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
19940 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19960 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 error = "I
19970 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 nvalid configura
19980 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 tion.";..
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
199a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
199c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 Ass
199e0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d embly assembly =
199f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61 configuration.a
19a00 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 ssembly;....
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19a20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20 if (assembly ==
19a30 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
19a40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19a60 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 error = "I
19a70 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e nvalid assembly.
19a80 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ";..
19a90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
19aa0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
19ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
19ad0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e if (!con
19ae0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 figuration.noTra
19af0 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ce)..
19b00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19b20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 if (!configu
19b30 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d ration.noLog &&.
19b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 Str
19b60 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 ing.IsNullOrEmpt
19b70 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e y(configuration.
19b80 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 logFileName))..
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19ba0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19bc0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19be0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 // NOTE: U
19bf0 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c se the default l
19c00 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 og file name...
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19c20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
19c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19c40 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
19c50 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 guration.logFile
19c60 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c Name = GetLogFil
19c70 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 eName(..
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19c90 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22 29 "trace")
19ca0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
19cb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19cd0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
19ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
19cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
19d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
19d10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
19d20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 if (!
19d30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f configuration.no
19d40 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20 Console)..
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19d60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19d80 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19da0 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72 // NOTE: In ver
19db0 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67 bose mode, debug
19dc0 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65 output (that me
19dd0 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ets..
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19df0 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f // the co
19e00 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74 nfigured priorit
19e10 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c y criteria) will
19e20 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 be..
19e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19e40 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61 // displa
19e50 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f yed to the conso
19e60 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 le; otherwise, t
19e70 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 race..
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19e90 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75 // outpu
19ea0 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68 t (that meets th
19eb0 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 e configured pri
19ec0 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 ority..
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19ee0 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74 // crit
19ef0 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69 eria) will be di
19f00 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 splayed to the c
19f10 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20 onsole...
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19f30 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19f50 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 if (configu
19f60 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20 ration.debug)..
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19f80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
19fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19fd0 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 // NOTE: Add t
19fe0 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 he console trace
19ff0 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65 listener to the
1a000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a020 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20 // list
1a030 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 of trace listene
1a040 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79 rs maintained by
1a050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a070 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54 // the T
1a080 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69 raceOps class (i
1a090 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 .e. only message
1a0a0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s..
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a0c0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 74 // that
1a0d0 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 20 meet the debug
1a0e0 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 priority will be
1a0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a110 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20 // seen
1a120 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e on the console).
1a130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a150 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a170 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 TraceOps.S
1a180 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65 etupDebugListene
1a190 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 rs();..
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a1b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a1d0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 else..
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a1f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
1a200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a210 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a230 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f // NO
1a240 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 TE: Add the cons
1a250 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e ole trace listen
1a260 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 er to the..
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a280 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
1a290 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c list of buil
1a2a0 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65 t-in trace liste
1a2b0 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20 ners (i.e...
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
1a2e0 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67 only messag
1a2f0 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 65 es that meet the
1a300 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 trace..
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a320 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
1a330 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 priority will b
1a340 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f e seen on the co
1a350 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 nsole)...
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a370 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
1a3a0 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 ce.Listeners.Add
1a3b0 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63 (new ConsoleTrac
1a3c0 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20 eListener());..
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a3e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a400 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
1a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a420 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
1a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1a450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a470 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 if (!confi
1a480 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 guration.noLog &
1a490 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 &..
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 !
1a4b0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 String.IsNullOrE
1a4c0 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 mpty(configurati
1a4d0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 on.logFileName))
1a4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1a4f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
1a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a510 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c Trace.L
1a520 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 isteners.Add(new
1a530 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65 TextWriterTrace
1a540 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20 Listener(..
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a560 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
1a570 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 guration.logFile
1a580 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 Name));....
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a5a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a5c0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 // NOTE:
1a5d0 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20 Technically, we
1a5e0 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20 created the log
1a5f0 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 file...
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a610 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a630 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b filesCreated+
1a640 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 +;..
1a650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a670 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
1a680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a6a0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d // NOTE: Dum
1a6b0 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 p the configurat
1a6c0 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20 ion now in case
1a6d0 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20 we need to..
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a6f0 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65 // trouble
1a700 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73 shoot any issues
1a710 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1a720 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
1a740 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e f (configuration
1a750 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c .debugPriority <
1a760 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e = TracePriority.
1a770 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 Medium)..
1a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a790 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 configuration.D
1a7a0 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63 ump(debugCallbac
1a7b0 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 k);....
1a7c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 if (c
1a7d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 onfiguration.tra
1a7e0 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 cePriority <= Tr
1a7f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 acePriority.Medi
1a800 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 um)..
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
1a820 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 figuration.Dump(
1a830 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d traceCallback);.
1a840 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1a850 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
1a870 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 / NOTE: Show whe
1a880 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e re we are runnin
1a890 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77 g from and how w
1a8a0 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20 e were..
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
1a8c0 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 invoked...
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a8e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
1a8f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
1a900 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73 g location = ass
1a910 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d embly.Location;.
1a920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1a930 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e TraceOps.
1a940 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 DebugAndTrace(Tr
1a950 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 acePriority.Medi
1a960 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 umLow,..
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a980 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 debugCallback, t
1a990 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 raceCallback, St
1a9a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 ring.Format(..
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a9c0 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65 "Running e
1a9d0 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30 xecutable is: {0
1a9e0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c }", ForDisplay(l
1a9f0 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 ocation)),..
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aa10 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1aa20 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1aa30 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 Trace
1aa40 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 Ops.DebugAndTrac
1aa50 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e e(TracePriority.
1aa60 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 MediumLow,..
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aa80 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
1aa90 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
1aaa0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
1aab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1aac0 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 69 "Origi
1aad0 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 nal command line
1aae0 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 is: {0}",..
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ab00 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e Environment.
1ab10 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72 CommandLine), tr
1ab20 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
1ab30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1ab40 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 TraceOps.De
1ab50 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 bugAndTrace(Trac
1ab60 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d ePriority.Medium
1ab70 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 Low,..
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
1ab90 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 bugCallback, tra
1aba0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 ceCallback, Stri
1abb0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1abd0 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f "Running pro
1abe0 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49 cess is {0}.", I
1abf0 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20 s64BitProcess()
1ac00 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ?..
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
1ac20 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69 64-bit" : "32-bi
1ac30 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f t"), traceCatego
1ac40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ry);....
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
1ac60 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 !configuration.w
1ac70 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 hatIf)..
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aca0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1acc0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 // NOTE: If t
1acd0 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61 he debugger is a
1ace0 74 74 61 63 68 65 64 20 61 6e 64 20 57 68 61 74 ttached and What
1acf0 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20 20 -If mode..
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ad10 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b 6e // is [n
1ad20 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73 ow] disabled, is
1ad30 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a sue a warning...
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ad50 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ad70 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65 72 if (Debugger
1ad80 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20 .IsAttached)..
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ada0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f TraceO
1adb0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 ps.DebugAndTrace
1adc0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d (TracePriority.M
1add0 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 ediumHigh,..
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 debu
1ae00 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 gCallback, trace
1ae10 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 Callback,..
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae30 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 "Forc
1ae40 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c 22 ed to disable \"
1ae50 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 77 what-if\" mode w
1ae60 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 ith " +..
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae80 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67 67 "debugg
1ae90 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20 74 er attached.", t
1aea0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aec0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
1aed0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d else.
1aee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1aef0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1af10 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
1af20 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f dTrace(TracePrio
1af30 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c rity.MediumHigh,
1af40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
1af60 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 bugCallback, tra
1af70 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 ceCallback,..
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1af90 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63 74 "No act
1afa0 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c 6c ual changes will
1afb0 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69 73 be made to this
1afc0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 " +..
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1afe0 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75 73 "system becaus
1aff0 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f e \"what-if\" mo
1b000 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c de is enabled.",
1b010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1b030 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 aceCategory);..
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b050 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
1b060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
1b070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b080 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 // NOTE: If
1b090 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line
1b0a0 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61 has not been ma
1b0b0 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 nually..
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
1b0d0 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 28 confirmed (
1b0e0 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78 70 i.e. via the exp
1b0f0 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69 licit command li
1b100 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ne..
1b110 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
1b120 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73 option), then s
1b130 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20 6e top processing n
1b140 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 0d ow. We enforce.
1b150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1b160 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 // th
1b170 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74 20 is rule so that
1b180 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c simply double-cl
1b190 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 icking the..
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b1b0 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 61 // executa
1b1c0 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73 ble will not res
1b1d0 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e 67 ult in any chang
1b1e0 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 es being..
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
1b200 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20 74 made to t
1b210 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 he system...
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b230 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
1b240 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e if (!con
1b250 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 figuration.confi
1b260 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rm)..
1b270 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b290 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61 6e error = "Can
1b2a0 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68 not continue, th
1b2b0 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70 e \"confirm\" op
1b2c0 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20 tion is " +..
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b2e0 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20 65 6e "not en
1b2f0 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20 abled.";....
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b310 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
1b320 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
1b330 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
1b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b350 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 return true;..
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
1b370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1b380 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f catch (Exceptio
1b390 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 n e)..
1b3a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
1b3c0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 ceOps.DebugAndTr
1b3d0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 ace(TracePriorit
1b3e0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 y.Highest,..
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b400 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
1b410 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
1b420 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f , e, traceCatego
1b430 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ry);....
1b440 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
1b450 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 70 r = "Failed to p
1b460 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72 61 rocess configura
1b470 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 tion.";..
1b480 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
1b4a0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
1b4b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
1b4c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
1b4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1b4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1b4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1b500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
1b510 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 . [Me
1b520 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 thodImpl(MethodI
1b530 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c mplOptions.NoInl
1b540 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 ining)]..
1b550 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 public stat
1b560 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e ic bool CheckRun
1b570 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 timeVersion(..
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f Co
1b590 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 nfiguration conf
1b5a0 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 iguration,..
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
1b5c0 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 strict,..
1b5d0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 ref st
1b5e0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 ring error..
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
1b600 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
1b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1b620 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y..
1b630 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
1b640 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f if (co
1b650 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e nfiguration == n
1b660 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
1b670 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b690 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e error = "In
1b6a0 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 valid configurat
1b6b0 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 ion.";..
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b6d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 return false;..
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b6f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
1b700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b720 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61 // NOTE: Wha
1b730 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 t version of the
1b740 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68 65 runtime was the
1b750 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29 0d core (primary).
1b760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1b770 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73 // as
1b780 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 sembly compiled
1b790 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22 76 against (e.g. "v
1b7a0 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20 2.0.50727" or..
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b7c0 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34 2e // "v4.
1b7d0 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20 20 0.30319")...
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b7f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
1b800 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 string c
1b810 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 oreImageRuntimeV
1b820 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67 ersion = GetImag
1b830 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 eRuntimeVersion(
1b840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1b850 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 config
1b860 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 uration.coreFile
1b870 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 Name);....
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
1b890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1b8a0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 // NOTE: W
1b8b0 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74 75 e allow the actu
1b8c0 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 al image runtime
1b8d0 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d checking to be.
1b8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1b8f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79 // by
1b900 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20 22 passed via the "
1b910 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f -noRuntimeVersio
1b920 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d n" command line.
1b930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1b940 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 // op
1b950 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61 tion. The comma
1b960 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69 nd line option i
1b970 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a s intended for..
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b990 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70 // exp
1b9a0 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20 ert use only...
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b9c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
1b9d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 if (c
1b9e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 onfiguration.noR
1b9f0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a untimeVersion)..
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ba10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
1ba30 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
1ba40 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 Trace(TracePrior
1ba50 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 ity.Medium,..
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ba70 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 debugCa
1ba80 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c llback, traceCal
1ba90 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f lback, String.Fo
1baa0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bac0 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20 "Assembly is
1bad0 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 compiled for the
1bae0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 .NET Framework
1baf0 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20 {0}; " +..
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb10 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c 20 "however,
1bb20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73 installation res
1bb30 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64 20 trictions based
1bb40 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 on this " +..
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb60 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20 68 "fact h
1bb70 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c 65 ave been disable
1bb80 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e d via the comman
1bb90 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20 d line.",..
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bbb0 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 coreImage
1bbc0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c RuntimeVersion),
1bbd0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
1bbe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
1bc00 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 rn true;..
1bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
1bc20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1bc30 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
1bc50 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74 / TODO: Restrict
1bc60 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 the configurati
1bc70 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63 on based on whic
1bc80 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20 h image..
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
1bca0 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65 runtime ve
1bcb0 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f rsions (which mo
1bcc0 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65 re-or-less corre
1bcd0 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 spond..
1bce0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
1bcf0 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d to .NET Fram
1bd00 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20 ework versions)
1bd10 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62 79 are supported by
1bd20 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the..
1bd30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 //
1bd40 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56 versions of V
1bd50 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61 isual Studio tha
1bd60 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e t are installed.
1bd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1bd80 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
1bda0 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f (String.IsNullO
1bdb0 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67 65 rEmpty(coreImage
1bdc0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 RuntimeVersion))
1bdd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1bde0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1be00 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 error = "invali
1be10 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 d core file imag
1be20 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f e runtime versio
1be30 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n";..
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
1be50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1be70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
1be80 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 else if (
1be90 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a String.Equals(..
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 core
1bec0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 ImageRuntimeVers
1bed0 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65 52 ion, CLRv2ImageR
1bee0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a untimeVersion,..
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 Stri
1bf10 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 ngComparison.Ord
1bf20 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 inal))..
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bf50 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bf70 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 // NOTE: For
1bf80 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75 6e the CLR v2.0 run
1bf90 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 time, make sure
1bfa0 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 we disable..
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bfc0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 // any
1bfd0 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 attempt to use
1bfe0 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 it for things th
1bff0 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 at require..
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c010 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 // an
1c020 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 assembly compile
1c030 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 d for the CLR v4
1c040 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20 .0. It is..
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c060 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e 63 // unc
1c070 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20 69 ertain if this i
1c080 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72 6f s actually a pro
1c090 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20 blem in..
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c0b0 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74 69 // practi
1c0c0 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76 34 ce as the CLR v4
1c0d0 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20 .0 can load and
1c0e0 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 use an..
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c100 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c // assembl
1c110 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 y compiled with
1c120 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f the CLR v2.0; ho
1c130 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 wever,..
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c150 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20 74 // since t
1c160 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 65 his project offe
1c170 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72 rs both configur
1c180 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 ations,..
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c1a0 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75 72 // we cur
1c1b0 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20 rently disallow
1c1c0 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a this mismatch...
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c1e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c200 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
1c210 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 72 n.noNetFx40 = tr
1c220 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue;..
1c230 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
1c240 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 figuration.noNet
1c250 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 Fx45 = true;..
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c270 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
1c280 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 74 ion.noVs2010 = t
1c290 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 rue;..
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
1c2b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 nfiguration.noVs
1c2c0 32 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a 20 20 2012 = true;..
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c2e0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
1c2f0 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d 20 74 ion.noVs2013 = t
1c300 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 rue;....
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c320 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
1c330 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f dTrace(TracePrio
1c340 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 rity.Medium,..
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c360 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 debugC
1c370 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 allback, traceCa
1c380 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 llback, String.F
1c390 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c3b0 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 "Assembly is
1c3c0 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 compiled for th
1c3d0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b e .NET Framework
1c3e0 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 {0}, " +..
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c400 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20 "support
1c410 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 for the .NET Fra
1c420 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f mework {1} is no
1c430 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 w disabled.",..
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c450 20 20 20 20 20 20 20 20 20 20 20 43 4c 52 76 32 CLRv2
1c460 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 ImageRuntimeVers
1c470 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 ion, CLRv4ImageR
1c480 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d untimeVersion),.
1c490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1c4b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 ceCategory);..
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c4d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
1c4e0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 else if
1c4f0 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 (String.Equals(
1c500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
1c520 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 reImageRuntimeVe
1c530 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 rsion, CLRv4Imag
1c540 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c eRuntimeVersion,
1c550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 St
1c570 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f ringComparison.O
1c580 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 rdinal))..
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
1c5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c5b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c5d0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f // NOTE: Fo
1c5e0 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20 72 r the CLR v4.0 r
1c5f0 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 untime, make sur
1c600 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 e we disable..
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c620 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 // a
1c630 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 ny attempt to us
1c640 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 e it for things
1c650 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 that require..
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c670 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 // a
1c680 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 n assembly compi
1c690 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 led for the CLR
1c6a0 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 v2.0...
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
1c6c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 /..
1c6d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 confi
1c6e0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 guration.noNetFx
1c6f0 32 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 = true;..
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c710 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
1c720 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 74 72 n.noNetFx35 = tr
1c730 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue;..
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e con
1c750 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 figuration.noVs2
1c760 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 005 = true;..
1c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c780 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 configurati
1c790 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 74 72 on.noVs2008 = tr
1c7a0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ue;....
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
1c7c0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
1c7d0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 Trace(TracePrior
1c7e0 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 ity.Medium,..
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c800 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 debugCa
1c810 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c llback, traceCal
1c820 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f lback, String.Fo
1c830 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c850 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20 "Assembly is
1c860 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 compiled for the
1c870 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 .NET Framework
1c880 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 {0}, " +..
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c8a0 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20 66 "support f
1c8b0 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d or the .NET Fram
1c8c0 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 ework {1} is now
1c8d0 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 disabled.",..
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c8f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 ForDis
1c900 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 play(CLRv4ImageR
1c910 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d untimeVersion),.
1c920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 For
1c940 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 Display(CLRv2Ima
1c950 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e geRuntimeVersion
1c960 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 )),..
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c980 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b traceCategory);
1c990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1c9a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 els
1c9c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e..
1c9d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c9f0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 error = String
1ca00 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ca20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72 74 "unsupport
1ca30 65 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 ed core file ima
1ca40 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 ge runtime versi
1ca50 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 on " +..
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ca70 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62 "{0}, must b
1ca80 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a e {1} or {2}",..
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
1cab0 69 73 70 6c 61 79 28 63 6f 72 65 49 6d 61 67 65 isplay(coreImage
1cac0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c RuntimeVersion),
1cad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f Fo
1caf0 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d rDisplay(CLRv2Im
1cb00 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f ageRuntimeVersio
1cb10 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n),..
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cb30 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 ForDisplay(CLRv
1cb40 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 4ImageRuntimeVer
1cb50 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 sion));....
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cb70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
1cb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1cb90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
1cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
1cbb0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 eturn true;..
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cbe0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e catch (Exception
1cbf0 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e)..
1cc00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
1cc20 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 eOps.DebugAndTra
1cc30 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 ce(TracePriority
1cc40 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 .Highest,..
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cc60 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b debugCallback
1cc70 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c , traceCallback,
1cc80 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 e, traceCategor
1cc90 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1cca0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
1ccb0 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63 68 = "Failed to ch
1ccc0 65 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69 6d eck image runtim
1ccd0 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 e version.";..
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
1ccf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
1cd00 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
1cd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
1cd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e . #en
1cd30 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 dregion....
1cd40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
1cd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1cd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1cd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1cd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
1cd90 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f #regio
1cda0 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 n Public Methods
1cdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
1cdc0 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 blic bool HasFla
1cdd0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 gs(..
1cde0 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 InstallFlag
1cdf0 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 s hasFlags,..
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f boo
1ce10 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 l all..
1ce20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
1ce30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
1ce40 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c if (all
1ce50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
1ce60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 return ((
1ce70 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 installFlags & h
1ce80 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 asFlags) == hasF
1ce90 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 lags);..
1cea0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 else..
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cec0 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 return ((insta
1ced0 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 llFlags & hasFla
1cee0 67 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c gs) != InstallFl
1cef0 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 ags.None);..
1cf00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
1cf10 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
1cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1cf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
1cf70 69 63 20 62 6f 6f 6c 20 49 73 4c 69 6e 71 53 75 ic bool IsLinqSu
1cf80 70 70 6f 72 74 65 64 28 29 0d 0a 20 20 20 20 20 pported()..
1cf90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
1cfa0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
1cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
1cfc0 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f NOTE: Return no
1cfd0 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 4c 49 n-zero if the LI
1cfe0 4e 51 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 NQ assembly shou
1cff0 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 ld be..
1d000 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
1d010 70 72 6f 63 65 73 73 65 64 20 64 75 72 69 6e 67 processed during
1d020 20 74 68 65 20 69 6e 73 74 61 6c 6c 2e 20 20 49 the install. I
1d030 66 20 74 68 65 20 74 61 72 67 65 74 20 69 73 0d f the target is.
1d040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1d050 20 2f 2f 20 20 20 20 20 20 20 56 69 73 75 61 6c // Visual
1d060 20 53 74 75 64 69 6f 20 32 30 30 35 2c 20 74 68 Studio 2005, th
1d070 69 73 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e is should return
1d080 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 zero...
1d090 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
1d0b0 72 6e 20 21 6e 6f 4e 65 74 46 78 33 35 20 7c 7c rn !noNetFx35 ||
1d0c0 20 21 6e 6f 4e 65 74 46 78 34 30 20 7c 7c 20 21 !noNetFx40 || !
1d0d0 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 noNetFx45;..
1d0e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
1d0f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
1d100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1d130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
1d140 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
1d150 69 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 ic void Dump(..
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
1d170 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 raceCallback tra
1d180 63 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 ceCallback..
1d190 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
1d1a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
1d1c0 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 (traceCallback
1d1d0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 != null)..
1d1e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d200 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 traceCallback(S
1d210 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d tring.Format(Nam
1d220 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c eAndValueFormat,
1d230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d240 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d "Assem
1d250 62 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 bly", ForDisplay
1d260 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 (assembly)),..
1d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d280 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1d290 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1d2b0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1d2c0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1d2d0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d2f0 20 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 "LogFileNa
1d300 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 me", ForDisplay(
1d310 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a logFileName)),..
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d330 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1d340 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1d360 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 raceCallback(Str
1d370 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 ing.Format(NameA
1d380 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a ndValueFormat,..
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d3a0 20 20 20 20 20 20 20 20 22 44 69 72 65 63 74 6f "Directo
1d3b0 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 ry", ForDisplay(
1d3c0 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 directory)),..
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d3e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1d3f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1d410 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1d420 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1d430 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d450 20 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e "CoreFileN
1d460 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 ame", ForDisplay
1d470 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c (coreFileName)),
1d480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d490 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
1d4a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d4c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 traceCallback(S
1d4d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d tring.Format(Nam
1d4e0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c eAndValueFormat,
1d4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d500 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46 "LinqF
1d510 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 ileName", ForDis
1d520 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d play(linqFileNam
1d530 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 e)),..
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1d550 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
1d560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1d570 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
1d580 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 ck(String.Format
1d590 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 (NameAndValueFor
1d5a0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 mat,..
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 "D
1d5c0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 esignerFileName"
1d5d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 73 , ForDisplay(des
1d5e0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c ignerFileName)),
1d5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d600 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
1d610 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d630 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 traceCallback(S
1d640 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d tring.Format(Nam
1d650 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c eAndValueFormat,
1d660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d670 20 20 20 20 20 20 20 20 20 20 22 52 65 67 69 73 "Regis
1d680 74 72 79 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 tryVersion", For
1d690 44 69 73 70 6c 61 79 28 72 65 67 69 73 74 72 79 Display(registry
1d6a0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 Version)),..
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d6c0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1d6d0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1d6e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1d6f0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1d700 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1d710 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d730 20 20 20 20 22 43 6f 6e 66 69 67 56 65 72 73 69 "ConfigVersi
1d740 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 on", ForDisplay(
1d750 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 29 29 2c configVersion)),
1d760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d770 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
1d780 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d7a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 traceCallback(S
1d7b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d tring.Format(Nam
1d7c0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c eAndValueFormat,
1d7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1d7e0 20 20 20 20 20 20 20 20 20 20 22 56 73 56 65 72 "VsVer
1d7f0 73 69 6f 6e 53 75 66 66 69 78 22 2c 20 46 6f 72 sionSuffix", For
1d800 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f Display(vsVersio
1d810 6e 53 75 66 66 69 78 29 29 2c 0d 0a 20 20 20 20 nSuffix)),..
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d830 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1d840 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1d850 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1d860 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1d870 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1d880 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d8a0 20 20 20 20 22 44 65 62 75 67 46 6f 72 6d 61 74 "DebugFormat
1d8b0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 ", ForDisplay(de
1d8c0 62 75 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 bugFormat)),..
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d8e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1d8f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1d910 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1d920 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1d930 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d950 20 20 20 20 20 20 22 54 72 61 63 65 46 6f 72 6d "TraceForm
1d960 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 at", ForDisplay(
1d970 74 72 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a traceFormat)),..
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d990 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1d9a0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1d9c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 raceCallback(Str
1d9d0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 ing.Format(NameA
1d9e0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a ndValueFormat,..
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1da00 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c "Install
1da10 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c Flags", ForDispl
1da20 61 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 ay(installFlags)
1da30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1da40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1da50 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1da70 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1da80 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1da90 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1daa0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62 "Deb
1dac0 75 67 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 ugPriority", For
1dad0 44 69 73 70 6c 61 79 28 64 65 62 75 67 50 72 69 Display(debugPri
1dae0 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 ority)),..
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1db00 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1db10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1db20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1db30 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1db40 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1db50 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1db70 20 20 22 54 72 61 63 65 50 72 69 6f 72 69 74 79 "TracePriority
1db80 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 ", ForDisplay(tr
1db90 61 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a acePriority)),..
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dbb0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1dbc0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1dbe0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 raceCallback(Str
1dbf0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 ing.Format(NameA
1dc00 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a ndValueFormat,..
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dc20 20 20 20 20 20 20 20 20 22 50 65 72 55 73 65 72 "PerUser
1dc30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 70 65 ", ForDisplay(pe
1dc40 72 55 73 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 rUser)),..
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dc60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1dc70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1dc80 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1dc90 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1dca0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1dcb0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dcd0 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 "Install", For
1dce0 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 Display(install)
1dcf0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1dd10 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dd30 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1dd40 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1dd50 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1dd60 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 77 "Wow
1dd80 36 34 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64", ForDisplay(
1dd90 77 6f 77 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 wow64)),..
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ddb0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1ddc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1ddd0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1dde0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1ddf0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1de00 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1de20 20 20 22 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 "NoRuntimeVers
1de30 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 ion", ForDisplay
1de40 28 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f (noRuntimeVersio
1de50 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 n)),..
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1de70 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
1de80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1de90 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
1dea0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 ck(String.Format
1deb0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 (NameAndValueFor
1dec0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 mat,..
1ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e "N
1dee0 6f 44 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 oDesktop", ForDi
1def0 73 70 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 splay(noDesktop)
1df00 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1df10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1df20 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1df40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1df50 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1df60 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1df70 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1df80 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 "NoC
1df90 6f 6d 70 61 63 74 22 2c 20 46 6f 72 44 69 73 70 ompact", ForDisp
1dfa0 6c 61 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c lay(noCompact)),
1dfb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1dfc0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
1dfd0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dff0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 traceCallback(S
1e000 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d tring.Format(Nam
1e010 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c eAndValueFormat,
1e020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1e030 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 "NoNet
1e040 46 78 32 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 Fx20", ForDispla
1e050 79 28 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a y(noNetFx20)),..
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e070 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1e080 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
1e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1e0a0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 raceCallback(Str
1e0b0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 ing.Format(NameA
1e0c0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a ndValueFormat,..
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e0e0 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 "NoNetFx
1e0f0 33 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 35", ForDisplay(
1e100 6e 6f 4e 65 74 46 78 33 35 29 29 2c 0d 0a 20 20 noNetFx35)),..
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e120 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1e130 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1e150 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1e160 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1e170 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e190 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 "NoNetFx40
1e1a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f ", ForDisplay(no
1e1b0 4e 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 NetFx40)),..
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e1d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1e1e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1e1f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1e200 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1e210 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1e220 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e240 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c "NoNetFx45",
1e250 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 ForDisplay(noNe
1e260 74 46 78 34 35 29 29 2c 0d 0a 20 20 20 20 20 20 tFx45)),..
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e280 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1e290 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1e2a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1e2b0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1e2c0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1e2d0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e2f0 20 20 22 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f "NoVs2005", Fo
1e300 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 rDisplay(noVs200
1e310 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 5)),..
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1e330 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
1e340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1e350 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
1e360 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 ck(String.Format
1e370 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 (NameAndValueFor
1e380 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 mat,..
1e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e "N
1e3a0 6f 56 73 32 30 30 38 22 2c 20 46 6f 72 44 69 73 oVs2008", ForDis
1e3b0 70 6c 61 79 28 6e 6f 56 73 32 30 30 38 29 29 2c play(noVs2008)),
1e3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1e3d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
1e3e0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e400 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 traceCallback(S
1e410 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d tring.Format(Nam
1e420 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c eAndValueFormat,
1e430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1e440 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 "NoVs2
1e450 30 31 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 010", ForDisplay
1e460 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 (noVs2010)),..
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e480 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1e490 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1e4b0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1e4c0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1e4d0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e4f0 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 32 22 "NoVs2012"
1e500 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 , ForDisplay(noV
1e510 73 32 30 31 32 29 29 2c 0d 0a 20 20 20 20 20 20 s2012)),..
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e530 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1e540 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1e550 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1e560 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1e570 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1e580 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e5a0 20 20 22 4e 6f 56 73 32 30 31 33 22 2c 20 46 6f "NoVs2013", Fo
1e5b0 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 rDisplay(noVs201
1e5c0 33 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 3)),..
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
1e5e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d aceCategory);...
1e5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1e600 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 traceCallba
1e610 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 ck(String.Format
1e620 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 (NameAndValueFor
1e630 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 mat,..
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e "N
1e650 6f 54 72 61 63 65 22 2c 20 46 6f 72 44 69 73 70 oTrace", ForDisp
1e660 6c 61 79 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a lay(noTrace)),..
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e680 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
1e690 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
1e6b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 raceCallback(Str
1e6c0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 ing.Format(NameA
1e6d0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a ndValueFormat,..
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e6f0 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f "NoConso
1e700 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 le", ForDisplay(
1e710 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 noConsole)),..
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e730 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1e740 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
1e760 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e ceCallback(Strin
1e770 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 g.Format(NameAnd
1e780 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 ValueFormat,..
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e7a0 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 "NoLog", F
1e7b0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 orDisplay(noLog)
1e7c0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1e7e0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e800 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1e810 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1e820 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1e830 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1e840 20 20 20 20 20 20 20 20 20 20 20 20 22 54 68 72 "Thr
1e850 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 2c 20 46 6f owOnMissing", Fo
1e860 72 44 69 73 70 6c 61 79 28 74 68 72 6f 77 4f 6e rDisplay(throwOn
1e870 4d 69 73 73 69 6e 67 29 29 2c 0d 0a 20 20 20 20 Missing)),..
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e890 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
1e8a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
1e8b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
1e8c0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e Callback(String.
1e8d0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 Format(NameAndVa
1e8e0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 lueFormat,..
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e900 20 20 20 20 22 57 68 61 74 49 66 22 2c 20 46 6f "WhatIf", Fo
1e910 72 44 69 73 70 6c 61 79 28 77 68 61 74 49 66 29 rDisplay(whatIf)
1e920 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1e930 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1e940 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e960 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1e970 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1e980 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1e990 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62 "Deb
1e9b0 75 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 ug", ForDisplay(
1e9c0 64 65 62 75 67 29 29 2c 0d 0a 20 20 20 20 20 20 debug)),..
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e9e0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 traceCategory)
1e9f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
1ea00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 traceCa
1ea10 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f llback(String.Fo
1ea20 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 rmat(NameAndValu
1ea30 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 eFormat,..
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ea50 20 20 22 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 "Verbose", For
1ea60 44 69 73 70 6c 61 79 28 76 65 72 62 6f 73 65 29 Display(verbose)
1ea70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
1ea90 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eab0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b traceCallback
1eac0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e (String.Format(N
1ead0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 ameAndValueForma
1eae0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e "Con
1eb00 66 69 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 firm", ForDispla
1eb10 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 y(confirm)),..
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eb30 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
1eb40 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f ///
1eb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1eb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1eb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1eb90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ebb0 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 if (assembly !=
1ebc0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
1ebd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ebf0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 traceCallb
1ec00 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ack(String.Forma
1ec10 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f t(NameAndValueFo
1ec20 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 rmat,..
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ec40 20 20 20 22 41 73 73 65 6d 62 6c 79 54 69 74 6c "AssemblyTitl
1ec50 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e",..
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ec70 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41 ForDisplay(GetA
1ec80 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 ssemblyTitle(ass
1ec90 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 embly))),..
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ecb0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 traceCate
1ecc0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 gory);....
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ece0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 traceCallback(
1ecf0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 String.Format(Na
1ed00 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 meAndValueFormat
1ed10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
1ed30 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 AssemblyConfigur
1ed40 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 ation",..
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ed60 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 ForDisplay(
1ed70 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 GetAssemblyConfi
1ed80 67 75 72 61 74 69 6f 6e 28 61 73 73 65 6d 62 6c guration(assembl
1ed90 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 y))),..
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1edb0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 traceCategory
1edc0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
1edd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
1ede0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
1edf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
1ee00 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 #endreg
1ee10 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ion....
1ee20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
1ee30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ee40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ee50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ee60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
1ee70 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 #region Pu
1ee80 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d blic Properties.
1ee90 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
1eea0 76 61 74 65 20 41 73 73 65 6d 62 6c 79 20 61 73 vate Assembly as
1eeb0 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 sembly;..
1eec0 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 public Asse
1eed0 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20 mbly Assembly..
1eee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 ge
1ef00 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d t { return assem
1ef10 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 bly; }..
1ef20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 73 set { as
1ef30 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20 sembly = value;
1ef40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
1ef50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
1ef60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ef70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ef80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ef90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1efa0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
1efb0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e private strin
1efc0 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a g logFileName;..
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
1efe0 69 63 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c ic string LogFil
1eff0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName..
1f000 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
1f010 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
1f020 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 rn logFileName;
1f030 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
1f040 20 20 20 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65 set { logFile
1f050 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d Name = value; }.
1f060 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
1f070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
1f080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f0c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
1f0d0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 private string
1f0e0 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 directory;..
1f0f0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 public s
1f100 74 72 69 6e 67 20 44 69 72 65 63 74 6f 72 79 0d tring Directory.
1f110 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
1f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f130 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 69 72 get { return dir
1f140 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 ectory; }..
1f150 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
1f160 20 64 69 72 65 63 74 6f 72 79 20 3d 20 76 61 6c directory = val
1f170 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
1f180 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
1f190 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
1f1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f1d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
1f1e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
1f1f0 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 tring coreFileNa
1f200 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 me;..
1f210 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 public string C
1f220 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 oreFileName..
1f230 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
1f240 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
1f250 7b 20 72 65 74 75 72 6e 20 63 6f 72 65 46 69 6c { return coreFil
1f260 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 eName; }..
1f270 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 set {
1f280 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 coreFileName = v
1f290 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
1f2a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
1f2b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
1f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
1f300 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
1f310 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 string linqFile
1f320 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 Name;..
1f330 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 public string
1f340 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 LinqFileName..
1f350 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 ge
1f370 74 20 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 t { return linqF
1f380 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 ileName; }..
1f390 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
1f3a0 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d { linqFileName =
1f3b0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
1f3c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
1f3d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
1f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1f420 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
1f430 74 65 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e te string design
1f440 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 erFileName;..
1f450 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 public
1f460 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 string DesignerF
1f470 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 ileName..
1f480 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1f490 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
1f4a0 74 75 72 6e 20 64 65 73 69 67 6e 65 72 46 69 6c turn designerFil
1f4b0 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 eName; }..
1f4c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 set {
1f4d0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 designerFileName
1f4e0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
1f4f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
1f500 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
1f510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
1f550 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
1f560 76 61 74 65 20 73 74 72 69 6e 67 20 72 65 67 69 vate string regi
1f570 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 stryVersion;..
1f580 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
1f590 20 73 74 72 69 6e 67 20 52 65 67 69 73 74 72 79 string Registry
1f5a0 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 Version..
1f5b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1f5c0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
1f5d0 74 75 72 6e 20 72 65 67 69 73 74 72 79 56 65 72 turn registryVer
1f5e0 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 sion; }..
1f5f0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 set { r
1f600 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d egistryVersion =
1f610 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
1f620 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
1f630 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
1f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1f680 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
1f690 74 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 te string config
1f6a0 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 Version;..
1f6b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 public str
1f6c0 69 6e 67 20 43 6f 6e 66 69 67 56 65 72 73 69 6f ing ConfigVersio
1f6d0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b n.. {
1f6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1f6f0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 get { return c
1f700 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 20 7d 0d onfigVersion; }.
1f710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1f720 20 73 65 74 20 7b 20 63 6f 6e 66 69 67 56 65 72 set { configVer
1f730 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d sion = value; }.
1f740 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
1f750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
1f760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f7a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
1f7b0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 private string
1f7c0 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b vsVersionSuffix;
1f7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
1f7e0 62 6c 69 63 20 73 74 72 69 6e 67 20 56 73 56 65 blic string VsVe
1f7f0 72 73 69 6f 6e 53 75 66 66 69 78 0d 0a 20 20 20 rsionSuffix..
1f800 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
1f810 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
1f820 7b 20 72 65 74 75 72 6e 20 76 73 56 65 72 73 69 { return vsVersi
1f830 6f 6e 53 75 66 66 69 78 3b 20 7d 0d 0a 20 20 20 onSuffix; }..
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
1f850 20 7b 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 { vsVersionSuff
1f860 69 78 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 ix = value; }..
1f870 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
1f880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
1f890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
1f8d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
1f8e0 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 rivate string de
1f8f0 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 bugFormat;..
1f900 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 public s
1f910 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 tring DebugForma
1f920 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b t.. {
1f930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1f940 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 get { return d
1f950 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 ebugFormat; }..
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
1f970 65 74 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 et { debugFormat
1f980 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
1f990 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
1f9a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
1f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1f9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
1f9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
1fa00 76 61 74 65 20 73 74 72 69 6e 67 20 74 72 61 63 vate string trac
1fa10 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 eFormat;..
1fa20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 public str
1fa30 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d ing TraceFormat.
1fa40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fa60 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 get { return tra
1fa70 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 ceFormat; }..
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
1fa90 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d { traceFormat =
1faa0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
1fab0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
1fac0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
1fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1fb10 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
1fb20 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 te InstallFlags
1fb30 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 installFlags;..
1fb40 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
1fb50 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 49 c InstallFlags I
1fb60 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 nstallFlags..
1fb70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
1fb90 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c { return install
1fba0 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20 20 Flags; }..
1fbb0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 set {
1fbc0 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 76 installFlags = v
1fbd0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
1fbe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
1fbf0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
1fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
1fc40 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
1fc50 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 TracePriority d
1fc60 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 ebugPriority;..
1fc70 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 publi
1fc80 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 c TracePriority
1fc90 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 DebugPriority..
1fca0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 ge
1fcc0 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 t { return debug
1fcd0 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 Priority; }..
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
1fcf0 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 { debugPriority
1fd00 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
1fd10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
1fd20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
1fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
1fd70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
1fd80 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 vate TracePriori
1fd90 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 ty tracePriority
1fda0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
1fdb0 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 ublic TracePrior
1fdc0 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74 ity TracePriorit
1fdd0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b y.. {
1fde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
1fdf0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 get { return t
1fe00 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d racePriority; }.
1fe10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1fe20 20 73 65 74 20 7b 20 74 72 61 63 65 50 72 69 6f set { tracePrio
1fe30 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d rity = value; }.
1fe40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
1fe50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
1fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fe90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1fea0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
1feb0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 private bool pe
1fec0 72 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 rUser;..
1fed0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 public bool
1fee0 50 65 72 55 73 65 72 0d 0a 20 20 20 20 20 20 20 PerUser..
1fef0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
1ff00 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
1ff10 74 75 72 6e 20 70 65 72 55 73 65 72 3b 20 7d 0d turn perUser; }.
1ff20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1ff30 20 73 65 74 20 7b 20 70 65 72 55 73 65 72 20 3d set { perUser =
1ff40 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
1ff50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
1ff60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
1ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
1ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
1ffb0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
1ffc0 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b te bool install;
1ffd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
1ffe0 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c blic bool Instal
1fff0 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b l.. {
20000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
20010 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 get { return i
20020 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 nstall; }..
20030 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
20040 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 install = value
20050 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
20060 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
20070 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
200a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
200b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
200c0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f private boo
200d0 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 l wow64;..
200e0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f public boo
200f0 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 l Wow64..
20100 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
20110 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
20120 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 turn wow64; }..
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
20140 65 74 20 7b 20 77 6f 77 36 34 20 3d 20 76 61 6c et { wow64 = val
20150 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
20160 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
20170 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
20180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
201a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
201b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
201c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 private b
201d0 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 ool noRuntimeVer
201e0 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 sion;..
201f0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e public bool N
20200 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d oRuntimeVersion.
20210 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
20220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20230 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52 get { return noR
20240 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d untimeVersion; }
20250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
20260 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d set { noRuntim
20270 65 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 eVersion = value
20280 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
20290 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
202a0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
202b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
202c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
202d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
202e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
202f0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f private boo
20300 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 l noDesktop;..
20310 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
20320 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d bool NoDesktop.
20330 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20350 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44 get { return noD
20360 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 esktop; }..
20370 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
20380 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c noDesktop = val
20390 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
203a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
203b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
203c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
203d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
203e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
203f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
20400 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 private b
20410 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a ool noCompact;..
20420 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c publ
20430 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 ic bool NoCompac
20440 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b t.. {
20450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
20460 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e get { return n
20470 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20 oCompact; }..
20480 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
20490 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76 { noCompact = v
204a0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
204b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
204c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
204d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
204e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
204f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20500 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
20510 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
20520 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b bool noNetFx20;
20530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
20540 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 blic bool NoNetF
20550 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x20..
20560 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
20570 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
20580 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20 noNetFx20; }..
20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
205a0 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d et { noNetFx20 =
205b0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
205c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
205d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
205e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
205f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
20620 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
20630 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 te bool noNetFx3
20640 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5;..
20650 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 public bool NoNe
20660 74 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20 20 tFx35..
20670 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
20680 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
20690 72 6e 20 6e 6f 4e 65 74 46 78 33 35 3b 20 7d 0d rn noNetFx35; }.
206a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
206b0 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 33 35 set { noNetFx35
206c0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
206d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
206e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
206f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
20730 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
20740 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 vate bool noNetF
20750 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 x40;..
20760 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f public bool No
20770 4e 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 NetFx40..
20780 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
20790 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
207a0 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20 turn noNetFx40;
207b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
207c0 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 set { noNetFx
207d0 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 40 = value; }..
207e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
207f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
20800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
20840 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
20850 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 rivate bool noNe
20860 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20 tFx45;..
20870 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 public bool
20880 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20 20 20 20 NoNetFx45..
20890 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
208a0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
208b0 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 return noNetFx45
208c0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
208d0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 set { noNet
208e0 46 78 34 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d Fx45 = value; }.
208f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
20900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
20910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20950 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
20960 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f private bool no
20970 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 Vs2005;..
20980 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c public bool
20990 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20 20 NoVs2005..
209a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
209b0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
209c0 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b return noVs2005;
209d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
209e0 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 set { noVs20
209f0 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 05 = value; }..
20a00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
20a10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
20a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
20a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ... p
20a70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 rivate bool noVs
20a80 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 2008;..
20a90 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e public bool N
20aa0 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20 oVs2008..
20ab0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
20ac0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 get { re
20ad0 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d turn noVs2008; }
20ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
20af0 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38 set { noVs2008
20b00 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
20b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
20b20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
20b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
20b80 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 vate bool noVs20
20b90 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 10;..
20ba0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 public bool NoV
20bb0 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20 s2010..
20bc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
20bd0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
20be0 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a rn noVs2010; }..
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20c00 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d set { noVs2010 =
20c10 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
20c20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
20c30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
20c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
20c80 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
20c90 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 te bool noVs2012
20ca0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
20cb0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 ublic bool NoVs2
20cc0 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 012..
20cd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
20ce0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
20cf0 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20 noVs2012; }..
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se
20d10 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20 76 t { noVs2012 = v
20d20 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
20d30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
20d40 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
20d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
20d90 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
20da0 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 3b 0d bool noVs2013;.
20db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
20dc0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 lic bool NoVs201
20dd0 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 3.. {
20de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
20df0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e get { return n
20e00 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20 20 20 oVs2013; }..
20e10 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
20e20 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20 76 61 6c { noVs2013 = val
20e30 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
20e40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
20e50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
20e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20e90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
20ea0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 private b
20eb0 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 ool noTrace;..
20ec0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
20ed0 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 bool NoTrace..
20ee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 ge
20f00 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 t { return noTra
20f10 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ce; }..
20f20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 set { noT
20f30 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d race = value; }.
20f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
20f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
20f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
20fa0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
20fb0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f private bool no
20fc0 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 Console;..
20fd0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f public boo
20fe0 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 l NoConsole..
20ff0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
21000 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 get
21010 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f { return noConso
21020 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 le; }..
21030 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 set { noC
21040 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 onsole = value;
21050 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
21060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
21070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
210a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
210b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
210c0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 private bool
210d0 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 noLog;..
210e0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 public bool
210f0 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 NoLog..
21100 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
21110 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
21120 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 rn noLog; }..
21130 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
21140 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 { noLog = value
21150 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
21160 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
21170 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
21180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
211a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
211b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
211c0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f private boo
211d0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 l throwOnMissing
211e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 ;.. p
211f0 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77 ublic bool Throw
21200 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 OnMissing..
21210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
21220 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
21230 72 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69 return throwOnMi
21240 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 ssing; }..
21250 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 set {
21260 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d throwOnMissing =
21270 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 value; }..
21280 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
21290 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
212a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
212b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
212c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
212d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
212e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 priva
212f0 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d te bool whatIf;.
21300 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
21310 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d lic bool WhatIf.
21320 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
21330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21340 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68 61 get { return wha
21350 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 tIf; }..
21360 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 68 set { wh
21370 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d atIf = value; }.
21380 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
21390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f .. //
213a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
213b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
213c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
213d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
213e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
213f0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 65 private bool de
21400 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 bug;..
21410 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65 public bool De
21420 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 bug..
21430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
21440 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
21450 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20 debug; }..
21460 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b set {
21470 20 64 65 62 75 67 20 3d 20 76 61 6c 75 65 3b 20 debug = value;
21480 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
21490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
214a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
214b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
214c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
214d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
214e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
214f0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 private bool
21500 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 verbose;..
21510 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f public boo
21520 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 l Verbose..
21530 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
21540 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 get {
21550 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 return verbose;
21560 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
21570 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65 set { verbose
21580 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 = value; }..
21590 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
215a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f //////
215b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
215c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
215d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
215e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
215f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 . pri
21600 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 vate bool confir
21610 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 m;..
21620 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 public bool Conf
21630 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 irm..
21640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
21650 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e get { return
21660 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 confirm; }..
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set
21680 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c { confirm = val
21690 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 ue; }..
216a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
216b0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 #endregion..
216c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
216d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 #endregion....
216e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
216f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
21730 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f .. #regio
21740 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 n FrameworkList
21750 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 Class.. p
21760 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c rivate sealed cl
21770 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 ass FrameworkLis
21780 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 t.. {..
21790 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f #regio
217a0 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 n Public Constru
217b0 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 ctors..
217c0 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77 public Framew
217d0 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 orkList()..
217e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
217f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 // do
21800 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 nothing...
21810 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
21820 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
21830 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
21840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21880 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
21890 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 #region Public
218a0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 Methods..
218b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f private Mo
218c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
218d0 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 otKey;..
218e0 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 public MockR
218f0 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b egistryKey RootK
21900 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ey..
21910 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
21920 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 get { return
21930 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 rootKey; }..
21940 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
21950 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 { rootKey = valu
21960 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 e; }..
21970 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
21980 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
21990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
219a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
219c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
219d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74 private St
219e0 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d ringList names;.
219f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
21a00 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 4e lic StringList N
21a10 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ames..
21a20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
21a30 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 get { retur
21a40 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 n names; }..
21a50 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
21a60 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b { names = value;
21a70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
21a80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
21a90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21ad0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
21ae0 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73 private Vers
21af0 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b ionMap versions;
21b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 .. pu
21b10 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 blic VersionMap
21b20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 Versions..
21b30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
21b40 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 get { r
21b50 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 eturn versions;
21b60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
21b70 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e set { version
21b80 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 s = value; }..
21b90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
21ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
21bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 .. pr
21c00 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 ivate StringList
21c10 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d platformNames;.
21c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 . pub
21c30 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 50 lic StringList P
21c40 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 latformNames..
21c50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
21c60 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 get
21c70 20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66 6f { return platfo
21c80 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 rmNames; }..
21c90 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set
21ca0 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 { platformNames
21cb0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 = value; }..
21cc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
21cd0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f #endregio
21ce0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 n.. }..
21cf0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
21d00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
21d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21d50 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ///.... #
21d60 72 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c region VsList Cl
21d70 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 ass.. pri
21d80 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 vate sealed clas
21d90 73 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 s VsList..
21da0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
21db0 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 #region Public
21dc0 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 Constructors..
21dd0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 public
21de0 20 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 VsList()..
21df0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
21e00 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 // do
21e10 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 nothing...
21e20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
21e30 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
21e40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f ... /
21e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21e90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 //....
21ea0 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 #region Public
21eb0 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 Properties..
21ec0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
21ed0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 MockRegistryKey
21ee0 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 rootKey;..
21ef0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f public Mo
21f00 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f ckRegistryKey Ro
21f10 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 otKey..
21f20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
21f30 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 get { retu
21f40 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 rn rootKey; }..
21f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
21f60 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 et { rootKey = v
21f70 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 alue; }..
21f80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
21f90 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
21fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
21fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
21fe0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 private
21ff0 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 VersionList ver
22000 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 sions;..
22010 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 public Versi
22020 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d onList Versions.
22030 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22050 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 get { return ver
22060 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 sions; }..
22070 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 set {
22080 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 versions = value
22090 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ; }..
220a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
220b0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 #endregion..
220c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 }.. #
220d0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 endregion..
220e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
220f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
22100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
22150 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 ion Private Cons
22160 74 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20 20 tant Data..
22170 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 private const
22180 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 string CoreFile
22190 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 Name = "System.D
221a0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b ata.SQLite.dll";
221b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 .. privat
221c0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c e const string L
221d0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 inqFileName = "S
221e0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit
221f0 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20 e.Linq.dll";..
22200 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f private co
22210 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73 69 67 nst string Desig
22220 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 nerFileName = "S
22230 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 QLite.Designer.d
22240 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 ll";.. pr
22250 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 ivate const stri
22260 6e 67 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 ng ProviderName
22270 3d 20 22 53 51 4c 69 74 65 20 44 61 74 61 20 50 = "SQLite Data P
22280 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20 20 20 rovider";..
22290 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 private const
222a0 20 73 74 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e string ProjectN
222b0 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 ame = "System.Da
222c0 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 ta.SQLite";..
222d0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e private con
222e0 73 74 20 73 74 72 69 6e 67 20 4c 65 67 61 63 79 st string Legacy
222f0 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 ProjectName = "S
22300 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 QLite";..
22310 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 private const s
22320 74 72 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e tring InvariantN
22330 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 ame = "System.Da
22340 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 ta.SQLite";..
22350 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e private con
22360 73 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72 st string Factor
22370 79 54 79 70 65 4e 61 6d 65 20 3d 20 22 53 79 73 yTypeName = "Sys
22380 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite.
22390 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b 0d SQLiteFactory";.
223a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 . private
223b0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 const string De
223c0 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 2e 4e 45 scription = ".NE
223d0 54 20 46 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 T Framework Data
223e0 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 Provider for SQ
223f0 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 Lite";....
22400 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
22410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22440 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
22450 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e private con
22460 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 32 49 st string CLRv2I
22470 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 mageRuntimeVersi
22480 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30 37 32 37 on = "v2.0.50727
22490 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 ";.. priv
224a0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 ate const string
224b0 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 CLRv4ImageRunti
224c0 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e meVersion = "v4.
224d0 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 0.30319";....
224e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
224f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
22530 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
22540 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d const string Nam
22550 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20 eAndValueFormat
22560 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 = "{0}: {1}";..
22570 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 private c
22580 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46 onst string LogF
22590 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f ileSuffix = ".lo
225a0 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f g";.... /
225b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
225c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
225d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
225e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
225f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
22600 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 private const
22610 73 74 72 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61 string RootKeyNa
22620 6d 65 20 3d 20 22 53 6f 66 74 77 61 72 65 22 3b me = "Software";
22630 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 .. privat
22640 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 57 e const string W
22650 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d ow64SubKeyName =
22660 20 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d "Wow6432Node";.
22670 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
22680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
226a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
226b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
226c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f //.... //
226d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 .. // NOT
226e0 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d E: The .NET Fram
226f0 65 77 6f 72 6b 20 68 61 73 20 62 6f 74 68 20 33 ework has both 3
22700 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 2-bit and 64-bit
22710 20 65 64 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 editions...
22720 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
22730 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 private static r
22740 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74 eadonly bool Net
22750 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 FxIs32BitOnly =
22760 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 false;....
22770 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
22780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
227a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
227b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
227c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
227d0 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f // NOTE: For no
227e0 77 2c 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f w, Visual Studio
227f0 20 69 73 20 61 6c 77 61 79 73 20 61 20 33 32 2d is always a 32-
22800 62 69 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e bit application.
22810 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 .. //..
22820 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
22830 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f atic readonly bo
22840 6f 6c 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 ol VsIs32BitOnly
22850 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 = true;....
22860 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
22870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
228a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
228b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
228c0 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 tatic readonly s
228d0 74 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 tring VsIdFormat
228e0 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 = "B";....
228f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
22900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
22940 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
22950 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 atic readonly st
22960 72 69 6e 67 20 58 50 61 74 68 46 6f 72 41 64 64 ring XPathForAdd
22970 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 Element =..
22980 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 "configur
22990 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 ation/system.dat
229a0 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 a/DbProviderFact
229b0 6f 72 69 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 ories/add[@invar
229c0 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d iant=\"{0}\"]";.
229d0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 ... priva
229e0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e te static readon
229f0 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 ly string XPathF
22a00 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 orRemoveElement
22a10 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 =.. "
22a20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 configuration/sy
22a30 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 stem.data/DbProv
22a40 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f 72 65 iderFactories/re
22a50 6d 6f 76 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d move[@invariant=
22a60 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 \"{0}\"]";..
22a70 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a #endregion..
22a80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f .. //////
22a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22ad0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 /.... #re
22ae0 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 gion Private Sta
22af0 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 tic Data..
22b00 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
22b10 20 41 73 73 65 6d 62 6c 79 20 74 68 69 73 41 73 Assembly thisAs
22b20 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c sembly = Assembl
22b30 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67 41 73 y.GetExecutingAs
22b40 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 sembly();....
22b50 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
22b60 74 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65 tic string trace
22b70 43 61 74 65 67 6f 72 79 20 3d 20 50 61 74 68 2e Category = Path.
22b80 47 65 74 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 GetFileName(..
22b90 20 20 20 20 20 20 20 20 20 20 74 68 69 73 41 73 thisAs
22ba0 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 sembly.Location)
22bb0 3b 20 2f 2a 20 4e 4f 54 45 3a 20 53 61 6d 65 20 ; /* NOTE: Same
22bc0 66 6f 72 20 64 65 62 75 67 20 61 6e 64 20 74 72 for debug and tr
22bd0 61 63 65 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 ace. */....
22be0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
22bf0 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 c TraceCallback
22c00 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 debugCallback =
22c10 41 70 70 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 AppDebug;..
22c20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 private stati
22c30 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 c TraceCallback
22c40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 traceCallback =
22c50 41 70 70 54 72 61 63 65 3b 0d 0a 0d 0a 20 20 20 AppTrace;....
22c60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
22c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
22cb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
22cc0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79 static string sy
22cd0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 stemDirectory =
22ce0 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e null;....#if WIN
22cf0 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 70 72 DOWS.. pr
22d00 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 ivate static str
22d10 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 ing systemDirect
22d20 6f 72 79 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b oryWow64 = null;
22d30 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 ..#endif....
22d40 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
22d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
22d90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
22da0 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 43 tatic int filesC
22db0 72 65 61 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 reated = 0;..
22dc0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
22dd0 74 69 63 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64 tic int filesMod
22de0 69 66 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 ified = 0;..
22df0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
22e00 69 63 20 69 6e 74 20 66 69 6c 65 73 44 65 6c 65 ic int filesDele
22e10 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 ted = 0;..
22e20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
22e30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
22e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
22e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
22e80 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 ... #regi
22e90 6f 6e 20 54 72 61 63 65 20 48 61 6e 64 6c 69 6e on Trace Handlin
22ea0 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 g.. priva
22eb0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 te static string
22ec0 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 GetLogFileName(
22ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
22ee0 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20 ring typeName..
22ef0 20 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 ) /*
22f00 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 throw */..
22f10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
22f20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 string fileName
22f30 20 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70 46 = Path.GetTempF
22f40 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 ileName();..
22f50 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 string d
22f60 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e irectory = Path.
22f70 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 GetDirectoryName
22f80 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 (fileName);..
22f90 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
22fa0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 fileNameOnly = P
22fb0 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 ath.GetFileNameW
22fc0 69 74 68 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 ithoutExtension(
22fd0 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 fileName);....
22fe0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
22ff0 20 6e 65 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50 newFileName = P
23000 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 ath.Combine(dire
23010 63 74 6f 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f ctory, String.Fo
23020 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
23030 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 "{0}{1}{2
23040 7d 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 }", traceCategor
23050 79 2c 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c y, !String.IsNul
23060 6c 4f 72 45 6d 70 74 79 28 74 79 70 65 4e 61 6d lOrEmpty(typeNam
23070 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 e) ?..
23080 20 20 20 20 20 20 20 20 20 20 22 2e 22 20 2b 20 "." +
23090 74 79 70 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e typeName : Strin
230a0 67 2e 45 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66 g.Empty, "." + f
230b0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 ileNameOnly +..
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
230d0 20 20 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 LogFileSuffix
230e0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ));....
230f0 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c File.Move(fil
23100 65 4e 61 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61 eName, newFileNa
23110 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 me);....
23120 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 46 69 return newFi
23130 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 leName;..
23140 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f }.... //
23150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23190 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
231a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
231b0 76 6f 69 64 20 41 70 70 44 65 62 75 67 28 0d 0a void AppDebug(..
231c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
231d0 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 ng message,..
231e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
231f0 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 category..
23200 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
23210 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
23220 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 43 6f TraceOps.DebugCo
23230 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 re(String.Format
23240 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
23250 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 TraceOps.Debu
23260 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 gFormat, TraceOp
23270 73 2e 4e 65 78 74 44 65 62 75 67 49 64 28 29 2c s.NextDebugId(),
23280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
23290 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 TraceOps.TimeS
232a0 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74 tamp(DateTime.Ut
232b0 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c cNow), message),
232c0 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 category);..
232d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
232e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
232f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23320 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
23330 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
23340 74 69 63 20 76 6f 69 64 20 41 70 70 54 72 61 63 tic void AppTrac
23350 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
23360 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d string message,.
23370 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str
23380 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 ing category..
23390 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 )..
233a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
233b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 TraceOps.Tra
233c0 63 65 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f ceCore(String.Fo
233d0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
233e0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e TraceOps.
233f0 54 72 61 63 65 46 6f 72 6d 61 74 2c 20 54 72 61 TraceFormat, Tra
23400 63 65 4f 70 73 2e 4e 65 78 74 54 72 61 63 65 49 ceOps.NextTraceI
23410 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 d(),..
23420 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 TraceOps.T
23430 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d imeStamp(DateTim
23440 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 e.UtcNow), messa
23450 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d ge), category);.
23460 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }..
23470 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a #endregion..
23480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f .. //////
23490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
234a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
234b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
234c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
234d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 /.... #re
234e0 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 50 6c 61 gion Generic Pla
234f0 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a tform Handling..
23500 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
23510 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 36 34 static bool Is64
23520 42 69 74 50 72 6f 63 65 73 73 28 29 0d 0a 20 20 BitProcess()..
23530 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
23540 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 //..
23550 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 // NOTE: Re
23560 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 turns true if th
23570 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 e current proces
23580 73 20 69 73 20 36 34 2d 62 69 74 2e 20 20 49 66 s is 64-bit. If
23590 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 this..
235a0 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 74 // is t
235b0 72 75 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 rue, we *know* t
235c0 68 61 74 20 77 65 20 6d 75 73 74 20 62 65 20 72 hat we must be r
235d0 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 unning on a 64-b
235e0 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 it..
235f0 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 // operati
23600 6e 67 20 73 79 73 74 65 6d 20 61 73 20 77 65 6c ng system as wel
23610 6c 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 l. However, if
23620 74 68 69 73 20 69 73 20 66 61 6c 73 65 2c 20 77 this is false, w
23630 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f e.. /
23640 2f 20 20 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e / do not n
23650 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 ecessarily know
23660 74 68 61 74 20 77 65 20 61 72 65 20 72 75 6e 6e that we are runn
23670 69 6e 67 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d ing on a 32-bit.
23680 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 . //
23690 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 operating
236a0 73 79 73 74 65 6d 2c 20 64 75 65 20 74 6f 20 57 system, due to W
236b0 6f 57 36 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 oW64 (Win32-on-W
236c0 69 6e 36 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20 in64), etc...
236d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
236e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
236f0 28 49 6e 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20 (IntPtr.Size ==
23700 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f sizeof(long)); /
23710 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20 / NOTE: Pointer
23720 69 73 20 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20 is 64-bits?..
23730 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
23740 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23780 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
23790 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 private sta
237a0 74 69 63 20 62 6f 6f 6c 20 49 73 53 75 70 70 6f tic bool IsSuppo
237b0 72 74 65 64 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 rtedRootKey(..
237c0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 MockRe
237d0 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c gistry registry,
237e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f .. Mo
237f0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
23800 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 otKey..
23810 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d ).. {.
23820 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret
23830 75 72 6e 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 urn Object.Refer
23840 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b enceEquals(rootK
23850 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72 ey, registry.Cur
23860 72 65 6e 74 55 73 65 72 29 20 7c 7c 0d 0a 20 20 rentUser) ||..
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 62 Ob
23880 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 ject.ReferenceEq
23890 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 uals(rootKey, re
238a0 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 gistry.LocalMach
238b0 69 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d ine);.. }
238c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
238d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
238e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
238f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23910 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 ///.... p
23920 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 rivate static st
23930 72 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e ring GetRootKeyN
23940 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ame(..
23950 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d bool perUser,.
23960 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f . boo
23970 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 l wow64..
23980 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 )..
23990 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f {.. /
239a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f /.. /
239b0 2f 20 42 55 47 46 49 58 3a 20 41 70 70 61 72 65 / BUGFIX: Appare
239c0 6e 74 6c 79 2c 20 74 68 65 20 70 65 72 2d 75 73 ntly, the per-us
239d0 65 72 20 72 65 67 69 73 74 72 79 20 68 69 76 65 er registry hive
239e0 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 0d 0a 20 does not use..
239f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
23a00 20 20 20 20 20 20 74 68 65 20 22 57 6f 77 36 34 the "Wow64
23a10 33 32 4e 6f 64 65 22 20 6e 6f 64 65 20 74 6f 20 32Node" node to
23a20 73 74 6f 72 65 20 73 65 74 74 69 6e 67 73 20 66 store settings f
23a30 6f 72 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 or 32-bit..
23a40 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
23a50 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 applications r
23a60 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 unning on a 64-b
23a70 69 74 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 it operating sys
23a80 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 tem...
23a90 20 20 2f 2f 20 20 20 20 20 20 20 20 20 54 69 63 // Tic
23aa0 6b 65 74 20 5b 61 30 36 37 37 33 30 39 66 30 5d ket [a0677309f0]
23ab0 20 68 61 73 20 66 75 72 74 68 65 72 20 64 65 74 has further det
23ac0 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 ails...
23ad0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
23ae0 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 return String
23af0 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 .Format("{0}{1}"
23b00 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a , RootKeyName,..
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23b20 21 70 65 72 55 73 65 72 20 26 26 20 77 6f 77 36 !perUser && wow6
23b30 34 20 26 26 20 49 73 36 34 42 69 74 50 72 6f 63 4 && Is64BitProc
23b40 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 ess() ?..
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 5c "\\
23b60 22 20 2b 20 57 6f 77 36 34 53 75 62 4b 65 79 4e " + Wow64SubKeyN
23b70 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 ame : String.Emp
23b80 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d ty);.. }.
23b90 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
23ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23be0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 //.... pr
23bf0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 ivate static str
23c00 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69 72 ing GetSystemDir
23c10 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 ectory(..
23c20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d bool wow64.
23c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a . )..
23c40 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 {..#if W
23c50 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 INDOWS..
23c60 20 20 20 20 69 66 20 28 77 6f 77 36 34 29 0d 0a if (wow64)..
23c70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
23c90 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f f (systemDirecto
23ca0 72 79 57 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29 ryWow64 == null)
23cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
23cc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
23cd0 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 systemD
23ce0 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d irectoryWow64 =.
23cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
23d00 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e UnsafeN
23d10 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 ativeMethods.Get
23d20 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 SystemDirectory(
23d30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
23d40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
23d50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
23d60 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 systemDirectoryW
23d70 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 ow64;..
23d80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
23d90 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a else..#endif..
23da0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
23dc0 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74 6f f (systemDirecto
23dd0 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ry == null)..
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23df0 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 systemDirectory
23e00 20 3d 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 = Environment.S
23e10 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d ystemDirectory;.
23e20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
23e30 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d return system
23e40 44 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 Directory;..
23e50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
23e60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 }.. #e
23e70 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 ndregion....
23e80 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
23e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
23ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
23ed0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47 #region G
23ee0 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20 48 61 eneric String Ha
23ef0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 ndling..
23f00 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 private static s
23f10 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 tring ForDisplay
23f20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f (.. o
23f30 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 bject value..
23f40 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 )..
23f50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
23f60 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 if (value ==
23f70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
23f80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c return "<
23f90 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 null>";....
23fa0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 string re
23fb0 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 sult;..
23fc0 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 76 Type type = v
23fd0 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d alue.GetType();.
23fe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
23ff0 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f f (type == typeo
24000 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a f(XmlElement))..
24010 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 X
24030 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e mlElement elemen
24040 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 t = (XmlElement)
24050 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 value;....
24060 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 result
24070 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 = element.Outer
24080 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 Xml;..
24090 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
240a0 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d else if (type =
240b0 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69 6f 6e = typeof(Version
240c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
240d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
240e0 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72 73 69 Version versi
240f0 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 on = (Version)va
24100 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lue;....
24110 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d result =
24120 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 String.Format("
24130 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b v{0}", version);
24140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
24150 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 . els
24160 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b e.. {
24170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
24180 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65 result = value
24190 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a .ToString();....
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
241b0 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 if (result.Lengt
241c0 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 h == 0)..
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
241e0 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a urn "<empty>";..
241f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
24200 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e result = Strin
24210 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
24230 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f 66 ype.IsSubclassOf
24240 28 74 79 70 65 6f 66 28 56 61 6c 75 65 54 79 70 (typeof(ValueTyp
24250 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a 20 22 5c e)) ? "{0}" : "\
24260 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20 20 20 20 "{0}\"",..
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
24280 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 sult);..
24290 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
242a0 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 return resu
242b0 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a lt;.. }..
242c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 #endregi
242d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f on.... //
242e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
242f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24320 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
24330 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c #region Assembl
24340 79 20 41 74 74 72 69 62 75 74 65 20 48 61 6e 64 y Attribute Hand
24350 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 75 ling.. pu
24360 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 blic static stri
24370 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f ng GetAssemblyCo
24380 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 nfiguration(..
24390 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 Assemb
243a0 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 ly assembly..
243b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 )..
243c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
243d0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 if (assembly
243e0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 != null)..
243f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
24400 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 try..
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
24420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
24430 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c if (assembl
24440 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 y.IsDefined(..
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24460 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 typeof
24470 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 (AssemblyConfigu
24480 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 rationAttribute)
24490 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 , false))..
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
244b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
244c0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 Assemb
244d0 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 lyConfigurationA
244e0 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69 67 75 ttribute configu
244f0 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 ration =..
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24510 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79 43 (AssemblyC
24520 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 onfigurationAttr
24530 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 ibute)..
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24550 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 assembly.Get
24560 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 CustomAttributes
24570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
24580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24590 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 typeof(Assemb
245a0 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 lyConfigurationA
245b0 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20 20 20 ttribute),..
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
245d0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 fals
245e0 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 e)[0];....
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24600 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 75 return configu
24610 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61 ration.Configura
24620 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 tion;..
24630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
24650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
24660 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 catch..
24670 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
24690 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 / do nothing...
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
246b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
246c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 ... r
246d0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 eturn null;..
246e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
246f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
24700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24730 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
24740 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 public stat
24750 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 ic string GetAss
24760 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 emblyTitle(..
24770 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c Assembl
24780 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 y assembly..
24790 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 )..
247a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
247b0 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 if (assembly !
247c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
247d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
247e0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 try..
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24810 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 if (assembly
24820 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 .IsDefined(..
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24840 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 typeof(
24850 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 AssemblyTitleAtt
24860 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 ribute), false))
24870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
24880 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
24890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
248a0 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 AssemblyTitleAt
248b0 74 72 69 62 75 74 65 20 74 69 74 6c 65 20 3d 0d tribute title =.
248c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41 73 (As
248e0 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 semblyTitleAttri
248f0 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 bute)..
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24910 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 assembly.GetC
24920 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 ustomAttributes(
24930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24950 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c typeof(Assembl
24960 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 yTitleAttribute)
24970 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a , false)[0];....
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24990 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t
249a0 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 itle.Title;..
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
249c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
249d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
249e0 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 catch..
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
24a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
24a10 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 // do nothi
24a20 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ng...
24a30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
24a40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
24a50 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c return null
24a60 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ;.. }..
24a70 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e #endregion
24a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
24a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24ad0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ///.... #
24ae0 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d region .NET Fram
24af0 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a ework Handling..
24b00 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
24b10 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 static string Ge
24b20 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 tFrameworkRootKe
24b30 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 yName(..
24b40 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 bool perUser
24b50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 ,.. b
24b60 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 ool wow64..
24b70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
24b80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
24b90 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 return String.F
24ba0 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 ormat("{0}\\Micr
24bb0 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 osoft\\.NETFrame
24bc0 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 work",..
24bd0 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b GetRootK
24be0 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 eyName(perUser,
24bf0 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 wow64));..
24c00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f }.... /
24c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24c50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
24c60 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
24c70 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 string GetFrame
24c80 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 workKeyName(..
24c90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
24ca0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d frameworkName,.
24cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 . Ver
24cc0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 sion frameworkVe
24cd0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 rsion,..
24ce0 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 string platf
24cf0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 ormName,..
24d00 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 bool perUs
24d10 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er,..
24d20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 bool wow64..
24d30 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 )..
24d40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
24d50 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 string format
24d60 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c = !String.IsNul
24d70 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 lOrEmpty(platfor
24d80 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 mName) ?..
24d90 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c "{0}\\
24da0 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c Microsoft\\{1}\\
24db0 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20 20 v{2}\\{3}" :..
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b "{
24dd0 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 0}\\Microsoft\\{
24de0 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 1}\\v{2}";....
24df0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
24e00 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 String.Format(f
24e10 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 ormat, GetRootKe
24e20 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 yName(perUser, w
24e30 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 ow64),..
24e40 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 framewor
24e50 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b kName, framework
24e60 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 Version, platfor
24e70 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 mName);..
24e80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f }.... //
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
24ed0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
24ee0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
24ef0 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67 65 52 string GetImageR
24f00 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a untimeVersion(..
24f10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
24f20 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 ng fileName..
24f30 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 )..
24f40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
24f50 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 try..
24f60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
24f70 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 Assembly
24f80 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20 20 20 20 assembly =..
24f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24fa0 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 Assembly.Reflect
24fb0 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 ionOnlyLoadFrom(
24fc0 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 fileName); /* th
24fd0 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 row */....
24fe0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 if (as
24ff0 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d sembly != null).
25000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
25010 20 20 20 20 20 72 65 74 75 72 6e 20 61 73 73 65 return asse
25020 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d mbly.ImageRuntim
25030 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 eVersion;..
25040 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
25050 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 catch..
25060 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
25070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 // d
25080 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 o nothing...
25090 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
250a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
250b0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d null;.. }
250c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
250d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
250e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
250f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25110 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 ///.... p
25120 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 rivate static st
25130 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 ring GetFramewor
25140 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 kDirectory(..
25150 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 MockReg
25160 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 istryKey rootKey
25170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 ,.. V
25180 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b ersion framework
25190 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 Version,..
251a0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 bool perUs
251b0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er,..
251c0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 bool wow64,..
251d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 bool w
251e0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 hatIf,..
251f0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 bool verbose
25200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d .. ).
25210 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 . {..
25220 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d using (M
25230 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b ockRegistryKey k
25240 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c ey = RegistryHel
25250 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d per.OpenSubKey(.
25260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
25270 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 rootKey, Ge
25280 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 tFrameworkRootKe
25290 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 yName(perUser, w
252a0 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 ow64),..
252b0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 fals
252c0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f e, whatIf, verbo
252d0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 se))..
252e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
252f0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 if (key ==
25300 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
25310 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
25320 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 n null;....
25330 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec
25340 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 t value = Regist
25350 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 ryHelper.GetValu
25360 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
25370 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e key, "In
25380 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c stallRoot", null
25390 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
253a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
253b0 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c if (!(val
253c0 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a ue is string))..
253d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
253e0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b return null;
253f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
25400 20 20 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e return Path.
25410 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 Combine(..
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
25430 74 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 tring)value, Str
25440 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d ing.Format("v{0}
25450 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 ", frameworkVers
25460 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 ion));..
25470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. }
25480 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 .. #endre
25490 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 gion....
254a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
254b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
254c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
254d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
254e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
254f0 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 #region Per-F
25500 72 61 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 ramework/Platfor
25510 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 m Handling..
25520 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
25530 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 ic void Initiali
25540 7a 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 zeFrameworkList(
25550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f .. Mo
25560 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
25570 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 otKey,..
25580 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f Configuratio
25590 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c n configuration,
255a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
255b0 66 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 f FrameworkList
255c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 frameworkList..
255d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 )..
255e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
255f0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f if (framewo
25600 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d rkList == null).
25610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
25620 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d frameworkList =
25630 20 6e 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 new FrameworkLi
25640 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 st();....
25650 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f if (framewo
25660 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d rkList.RootKey =
25670 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
25680 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f framewo
25690 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d rkList.RootKey =
256a0 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 rootKey;....
256b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f ///////
256c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
256d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
256e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
256f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
25700 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
25710 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 frameworkList.Na
25720 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 mes == null)..
25730 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 fra
25750 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 meworkList.Names
25760 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 = new StringLis
25770 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 t();....
25780 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e if ((con
25790 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 figuration == nu
257a0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 ll) || !configur
257b0 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 ation.NoDesktop)
257c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
257d0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c frameworkL
257e0 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e ist.Names.Add(".
257f0 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d NETFramework");.
25800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
25810 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 if ((configur
25820 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c ation == null) |
25830 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e | !configuration
25840 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 .NoCompact)..
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25870 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 frameworkLis
25880 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 t.Names.Add(".NE
25890 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 TCompactFramewor
258a0 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 k");..
258b0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 framew
258c0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 orkList.Names.Ad
258d0 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 d(".NETCompactFr
258e0 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 amework");..
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25900 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 frameworkList.Na
25910 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d mes.Add(".NETCom
25920 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b pactFramework");
25930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
25940 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
25950 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
25960 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////////
25970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
259a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
259b0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f if (framewo
259c0 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 rkList.Versions
259d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
259e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
259f0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f framewo
25a00 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 rkList.Versions
25a10 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 = new VersionMap
25a20 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ();....
25a30 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 if ((conf
25a40 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c iguration == nul
25a50 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 l) || !configura
25a60 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d tion.NoDesktop).
25a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
25a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
25a90 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c VersionL
25aa0 69 73 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 ist desktopVersi
25ab0 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 onList = new Ver
25ac0 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 sionList();....
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25ae0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 if ((configur
25af0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c ation == null) |
25b00 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e | !configuration
25b10 2e 4e 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 .NoNetFx20)..
25b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25b30 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 desktopVers
25b40 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 ionList.Add(new
25b50 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 Version(2, 0, 50
25b60 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 727));....
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
25b80 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ((configuration
25b90 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f == null) || !co
25ba0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 nfiguration.NoNe
25bb0 74 46 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 tFx40)..
25bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25bd0 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 desktopVersionLi
25be0 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 st.Add(new Versi
25bf0 6f 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29 on(4, 0, 30319))
25c00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
25c10 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f if ((co
25c20 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e nfiguration == n
25c30 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 ull) || !configu
25c40 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 ration.NoNetFx45
25c50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
25c60 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 deskt
25c70 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 opVersionList.Ad
25c80 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c d(new Version(4,
25c90 20 35 2c 20 35 30 37 30 39 29 29 3b 0d 0a 0d 0a 5, 50709));....
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25cb0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 frameworkLis
25cc0 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 t.Versions.Add("
25cd0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d .NETFramework",.
25ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
25cf0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 desktop
25d00 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 VersionList);..
25d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
25d20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
25d30 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 if ((configu
25d40 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 ration == null)
25d50 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f || !configuratio
25d60 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 n.NoCompact)..
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
25d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
25d90 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 frameworkLi
25da0 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 st.Versions.Add(
25db0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d ".NETCompactFram
25dc0 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 ework",..
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25de0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 new VersionList
25df0 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b (new Version[] {
25e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
25e10 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 new Ve
25e20 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30 rsion(2, 0, 0, 0
25e30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 ), new Version(3
25e40 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20 , 5, 0, 0)..
25e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25e60 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 }));..
25e70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }..
25e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
25e90 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
25ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
25ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 /////////....
25ee0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 if (fra
25ef0 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 meworkList.Platf
25f00 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c ormNames == null
25f10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
25f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
25f30 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e frameworkList.
25f40 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 PlatformNames =
25f50 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 new StringList()
25f60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
25f70 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 if ((config
25f80 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 uration == null)
25f90 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 || !configurati
25fa0 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 on.NoDesktop)..
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25fc0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 frameworkList
25fd0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 .PlatformNames.A
25fe0 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 dd(null);....
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
26000 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 ((configuration
26010 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e == null) || !con
26020 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d figuration.NoCom
26030 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 pact)..
26040 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 fr
26060 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 ameworkList.Plat
26070 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50 formNames.Add("P
26080 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 ocketPC");..
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
260a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c frameworkList.Pl
260b0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 atformNames.Add(
260c0 22 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a "Smartphone");..
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
260e0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 frameworkLis
260f0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e t.PlatformNames.
26100 41 64 64 28 22 57 69 6e 64 6f 77 73 43 45 22 29 Add("WindowsCE")
26110 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
26120 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
26130 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }..
26140 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f .. //////
26150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26190 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 /.... pri
261a0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c vate static bool
261b0 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 HaveFrameworkDi
261c0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 rectory(..
261d0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 MockRegist
261e0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a ryKey rootKey,..
261f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
26200 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 ng frameworkName
26210 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 ,.. V
26220 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b ersion framework
26230 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 Version,..
26240 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 string pla
26250 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 tformName,..
26260 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 bool per
26270 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 User,..
26280 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a bool wow64,..
26290 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
262a0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
262b0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f bool verbo
262c0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se..
262d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 ).. {..
262e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
262f0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 keyName = GetFr
26300 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d ameworkKeyName(.
26310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
26320 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 frameworkName,
26330 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e frameworkVersion
26340 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 , platformName,
26350 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 perUser,..
26360 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 wow64)
26370 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
26380 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 using (MockRegi
26390 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 stryKey key = Re
263a0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 gistryHelper.Ope
263b0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 nSubKey(..
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f ro
263d0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 otKey, keyName,
263e0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 false, whatIf, v
263f0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 erbose))..
26400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
26410 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 if (key
26420 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
26440 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a eturn false;....
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26460 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 if (platformName
26470 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 != null) // NOT
26480 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b E: Skip non-desk
26490 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 top...
264a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
264b0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 true;....
264c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
264d0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 directory = Get
264e0 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f FrameworkDirecto
264f0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ry(..
26500 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 rootKey
26510 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 , frameworkVersi
26520 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 on, perUser, wow
26530 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 64, whatIf,..
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26550 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 verbose);....
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
26570 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f (String.IsNullO
26580 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 rEmpty(directory
26590 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))..
265a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
265b0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 alse;....
265c0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 if (!Di
265d0 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 rectory.Exists(d
265e0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 irectory))..
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26600 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d return false;...
26610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
26620 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
26630 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 ndTrace(TracePri
26640 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 ority.Lower,..
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26660 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c debugCallback,
26670 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 traceCallback,
26680 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
266a0 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 ".NET Framew
266b0 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 ork {0} found vi
266c0 61 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e a directory {1}.
266d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
266e0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
266f0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 ay(frameworkVers
26700 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 ion), ForDisplay
26710 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 (directory)),..
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26730 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 traceCategory
26740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
26750 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru
26760 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
26770 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }....
26780 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
26790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
267a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
267b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
267c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
267d0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 ... priva
267e0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 te static bool H
267f0 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 aveFrameworkRegi
26800 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 stry(..
26810 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
26820 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 ey rootKey,..
26830 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
26840 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a frameworkName,..
26850 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 Vers
26860 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 ion frameworkVer
26870 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 sion,..
26880 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f string platfo
26890 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 rmName,..
268a0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 bool perUse
268b0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 r,..
268c0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 bool wow64,..
268d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 bool wh
268e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 atIf,..
268f0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d bool verbose.
26900 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a . )..
26910 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
26920 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 string ke
26930 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 yName = GetFrame
26940 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 workKeyName(..
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 fr
26960 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 ameworkName, fra
26970 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 meworkVersion, p
26980 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 latformName, per
26990 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 User,..
269a0 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a wow64);..
269b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 .. us
269c0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 ing (MockRegistr
269d0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 yKey key = Regis
269e0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 tryHelper.OpenSu
269f0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 bKey(..
26a00 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b rootK
26a10 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c ey, keyName, fal
26a20 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 se, whatIf, verb
26a30 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ose))..
26a40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
26a50 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d if (key ==
26a60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
26a70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
26a80 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 rn false;....
26a90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
26aa0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d (platformName !=
26ab0 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 null) // NOTE:
26ac0 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 Skip non-desktop
26ad0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
26ae0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr
26af0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ue;....
26b00 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e TraceOps.
26b10 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 DebugAndTrace(Tr
26b20 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 acePriority.Lowe
26b30 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 r,..
26b40 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c debugCal
26b50 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c lback, traceCall
26b60 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 back, String.For
26b70 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 mat(..
26b80 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 ".NET
26b90 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f Framework {0} fo
26ba0 75 6e 64 20 76 69 61 20 72 65 67 69 73 74 72 79 und via registry
26bb0 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 {1}.",..
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 For
26bd0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 Display(framewor
26be0 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 kVersion), ForDi
26bf0 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c splay(keyName)),
26c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
26c10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 traceCateg
26c20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ory);....
26c30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
26c40 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 true;..
26c50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }.
26c60 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
26c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
26cb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d //.... [M
26cc0 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 ethodImpl(Method
26cd0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e ImplOptions.NoIn
26ce0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 lining)]..
26cf0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
26d00 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 bool ForEachFra
26d10 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 meworkConfig(..
26d20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 MockR
26d30 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 egistry registry
26d40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 ,.. F
26d50 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 rameworkList fra
26d60 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 meworkList,..
26d70 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f Framewo
26d80 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b rkConfigCallback
26d90 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 callback,..
26da0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 string v
26db0 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a ersion, /* NOTE:
26dc0 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 Optional. */..
26dd0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
26de0 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 g invariant,..
26df0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
26e00 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 name,..
26e10 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 string descr
26e20 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 iption,..
26e30 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 string type
26e40 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 Name,..
26e50 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 AssemblyName
26e60 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 assemblyName,..
26e70 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec
26e80 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 t clientData,..
26e90 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
26ea0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 perUser,..
26eb0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 bool wow64
26ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 ,.. b
26ed0 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 ool throwOnMissi
26ee0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ng,..
26ef0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 bool whatIf,..
26f00 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
26f10 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 verbose,..
26f20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 ref bool s
26f30 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 aved,..
26f40 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 ref string er
26f50 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ror..
26f60 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 ).. {..
26f70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 if (r
26f80 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 egistry == null)
26f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
26fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
26fb0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 error = "invali
26fc0 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 d registry";..
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
26fe0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
26ff0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
27000 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 if (fr
27010 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e ameworkList == n
27020 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
27030 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
27040 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e error = "in
27050 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 valid framework
27060 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 list";..
27070 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
27080 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alse;..
27090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
270a0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 MockRegistry
270b0 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 Key rootKey = fr
270c0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 ameworkList.Root
270d0 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 Key;....
270e0 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 if (rootKey
270f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
27100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
27110 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
27120 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b "invalid root k
27130 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ey";..
27140 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
27150 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se;..
27160 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
27170 20 20 69 66 20 28 21 49 73 53 75 70 70 6f 72 74 if (!IsSupport
27180 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 edRootKey(regist
27190 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 ry, rootKey))..
271a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
271b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
271c0 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 ror = "root key
271d0 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 must be per-user
271e0 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 or per-machine"
271f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
27200 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
27210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
27220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
27230 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 f (frameworkList
27240 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d .Names == null).
27250 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
27260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27270 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d error = "no fram
27280 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e ework names foun
27290 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 d";..
272a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
272b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
272c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
272d0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 if (frameworkLi
272e0 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e st.Versions == n
272f0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
27300 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
27310 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f error = "no
27320 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 framework versi
27330 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 ons found";..
27340 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
27350 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
27360 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
27370 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 if (fra
27380 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 meworkList.Platf
27390 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c ormNames == null
273a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
273b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
273c0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c error = "no pl
273d0 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 atform names fou
273e0 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 nd";..
273f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
27400 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se;..
27410 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
27420 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c if (frameworkL
27430 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 ist.Names.Count
27440 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 != frameworkList
27450 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 .PlatformNames.C
27460 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 ount)..
27470 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
27480 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 error = St
27490 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 ring.Format("fra
274a0 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e mework name coun
274b0 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 t {0} does not "
274c0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 +..
274d0 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 "match p
274e0 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 latform name cou
274f0 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f nt {1}", framewo
27500 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 rkList.Names.Cou
27510 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nt,..
27520 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f framewo
27530 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e rkList.PlatformN
27540 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a ames.Count);....
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27560 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 return false;..
27570 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
27580 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 for
27590 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 (int index = 0;
275a0 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 index < framewor
275b0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e kList.Names.Coun
275c0 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 t; index++)..
275d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
275e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
275f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27600 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 // NOTE: Grab th
27610 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 e name of the fr
27620 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e amework (e.g. ".
27630 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a NETFramework")..
27640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27650 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 // and the
27660 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 name of the pla
27670 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e tform (e.g. "Win
27680 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 dowsCE")...
27690 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
276a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s
276b0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e tring frameworkN
276c0 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c ame = frameworkL
276d0 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d ist.Names[index]
276e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
276f0 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f string platfo
27700 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f rmName = framewo
27710 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e rkList.PlatformN
27720 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a ames[index];....
27730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27740 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
27750 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 // NOTE: Ski
27760 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f p all non-deskto
27770 70 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e p frameworks (i.
27780 65 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f e. if the platfo
27790 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rm..
277a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d // nam
277b0 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d e is not null)..
277c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
277d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
277e0 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 if (platfor
277f0 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a mName != null)..
27800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27810 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d continue;...
27820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
27830 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
27840 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 // NOTE: Gr
27850 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 ab the supported
27860 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 versions of thi
27870 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 s particular..
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
27890 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b framework
278a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
278b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
278c0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 VersionLi
278d0 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 st frameworkVers
278e0 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 ionList;....
278f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
27900 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 version != null)
27910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
27920 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
27930 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
27940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27950 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c // NOTE: Manual
27960 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68 65 override of the
27970 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b *ONE* framework
27980 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 version..
27990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
279a0 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73 to proces
279b0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s...
279c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
279d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
279e0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e frameworkVersion
279f0 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 List = new Versi
27a00 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 onList();..
27a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f
27a20 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c rameworkVersionL
27a30 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 ist.Add(new Vers
27a40 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a ion(version));..
27a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27a60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
27a70 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 else..
27a80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27aa0 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 if (!frameworkLi
27ab0 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 st.Versions.TryG
27ac0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 etValue(..
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27ae0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e frameworkN
27af0 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f ame, out framewo
27b00 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c rkVersionList) |
27b10 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |..
27b20 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d (fram
27b30 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 eworkVersionList
27b40 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 == null))..
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27b60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
27b70 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 conti
27b80 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 nue;..
27b90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
27bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
27bc0 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 foreach (Versi
27bd0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 on frameworkVers
27be0 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b ion in framework
27bf0 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 VersionList)..
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
27c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
27c20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 TraceOps.De
27c30 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 bugAndTrace(Trac
27c40 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c ePriority.Lower,
27c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
27c60 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 debugC
27c70 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 allback, traceCa
27c80 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 llback, String.F
27c90 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27cb0 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d "frameworkName =
27cc0 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 {0}, frameworkV
27cd0 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 ersion = {1}, "
27ce0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 +..
27cf0 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 "plat
27d00 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c formName = {2}",
27d10 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d ForDisplay(fram
27d20 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 eworkName),..
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27d40 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 ForDisplay(
27d50 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e frameworkVersion
27d60 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
27d70 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
27d80 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e isplay(platformN
27d90 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 ame)), traceCate
27da0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 gory);....
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
27dc0 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b (!HaveFramework
27dd0 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 Directory(..
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27df0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c rootKey,
27e00 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 frameworkName,
27e10 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e frameworkVersion
27e20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
27e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
27e40 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 latformName, per
27e50 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 User, wow64, wha
27e60 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a tIf, verbose))..
27e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27e80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
27ea0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
27eb0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 Trace(TracePrior
27ec0 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 ity.Low,..
27ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27ee0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 debugCallb
27ef0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 ack, traceCallba
27f00 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
27f10 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
27f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27f30 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 ".NET Framework
27f40 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 6e 6f {0} directory no
27f50 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 t found, " +..
27f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27f70 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 "skipp
27f80 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 ing...", ForDisp
27f90 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 lay(frameworkVer
27fa0 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 sion)),..
27fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27fc0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f traceCatego
27fd0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ry);....
27fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27ff0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 continue;..
28000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
28010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
28020 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c if (call
28030 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 back == null)..
28040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28050 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b continue;
28060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
28070 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 string d
28080 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 irectory = GetFr
28090 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 ameworkDirectory
280a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
280b0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b rootK
280c0 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 ey, frameworkVer
280d0 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20 77 sion, perUser, w
280e0 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 ow64, whatIf,..
280f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28100 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b verbose);
28110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
28120 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 if (Stri
28130 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 ng.IsNullOrEmpty
28140 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 (directory))..
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28160 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
28170 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
28180 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 ceOps.DebugAndTr
28190 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 ace(TracePriorit
281a0 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 y.Low,..
281b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
281c0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
281d0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
281e0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
281f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
28200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e ".
28210 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 NET Framework {0
28220 7d 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 69 } directory is i
28230 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 nvalid, " +..
28240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28250 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 "skippi
28260 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c ng...", ForDispl
28270 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 ay(frameworkVers
28280 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ion)),..
28290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
282a0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
282b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
282c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
282d0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 ontinue;..
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
282f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
28300 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 directory
28310 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 = Path.Combine(
28320 64 69 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 directory, "Conf
28330 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ig");....
28340 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
28350 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 (!Directory.Exis
28360 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a ts(directory))..
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28380 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
28390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
283a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
283b0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 Trace(TracePrior
283c0 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 ity.Low,..
283d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
283e0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 debugCallb
283f0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 ack, traceCallba
28400 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
28410 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28430 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 ".NET Framework
28440 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31 {0} directory {1
28450 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a } does not " +..
28460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28470 20 20 20 20 20 20 20 20 20 20 20 20 22 65 78 69 "exi
28480 73 74 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 st, skipping..."
28490 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 , ForDisplay(fra
284a0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d meworkVersion),.
284b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
284c0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 For
284d0 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 Display(director
284e0 79 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f y)), traceCatego
284f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ry);....
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28510 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 continue;..
28520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d }
28530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
28540 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 string f
28550 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 ileName = Path.C
28560 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 ombine(directory
28570 2c 20 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 , "machine.confi
28580 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 g");....
28590 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
285a0 21 46 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c !File.Exists(fil
285b0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 eName))..
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
285e0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 TraceOps
285f0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 .DebugAndTrace(T
28600 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 racePriority.Low
28610 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
28630 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 ebugCallback, tr
28640 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 aceCallback, Str
28650 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 ing.Format(..
28660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28670 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 ".NET F
28680 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c ramework {0} fil
28690 65 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 e {1} does not e
286a0 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 xist, " +..
286b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
286c0 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 "skipping
286d0 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 ...", ForDisplay
286e0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f (frameworkVersio
286f0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n),..
28700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28710 20 46 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65 ForDisplay(file
28720 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 Name)), traceCat
28730 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28750 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 continue;..
28760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28770 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
28780 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
28790 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c localSaved = fal
287a0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 se;....
287b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 if (!
287c0 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 callback(..
287d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
287e0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c fileName,
287f0 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 invariant, name
28800 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 , description, t
28810 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 ypeName,..
28820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28830 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 assemblyNa
28840 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 me, clientData,
28850 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d perUser, wow64,.
28860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
28870 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 thr
28880 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 owOnMissing, wha
28890 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 tIf, verbose, re
288a0 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 0d 0a 20 f localSaved,..
288b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
288c0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 ref e
288d0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 rror))..
288e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
288f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28900 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
28910 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
28920 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28940 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 else..
28950 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
28960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28970 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 53 if (localS
28980 61 76 65 64 20 26 26 20 21 73 61 76 65 64 29 0d aved && !saved).
28990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
289a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 sav
289b0 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 ed = true;....
289c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
289d0 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 if (verbos
289e0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e)..
289f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28a00 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e TraceOps.DebugAn
28a10 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f dTrace(TracePrio
28a20 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 rity.Lowest,..
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
28a50 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 bugCallback, tra
28a60 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 ceCallback, Stri
28a70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28a90 20 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 "loc
28aa0 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73 alSaved = {0}, s
28ab0 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 aved = {1}",..
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f Fo
28ae0 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61 rDisplay(localSa
28af0 76 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 ved), ForDisplay
28b00 28 73 61 76 65 64 29 29 2c 0d 0a 20 20 20 20 20 (saved)),..
28b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28b20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
28b30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 Category);..
28b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28b50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }..
28b60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }..
28b70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
28b80 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d return true;.
28b90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }....
28ba0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
28bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
28bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
28bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
28be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
28bf0 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 . [Method
28c00 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f Impl(MethodImplO
28c10 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e ptions.NoInlinin
28c20 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 g)].. pri
28c30 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c vate static bool
28c40 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 ForEachFramewor
28c50 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 kRegistry(..
28c60 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 MockRegi
28c70 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a stry registry,..
28c80 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d Fram
28c90 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 eworkList framew
28ca0 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 orkList,..
28cb0 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 52 FrameworkR
28cc0 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 egistryCallback
28cd0 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 callback,..
28ce0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 65 string ve
28cf0 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 rsion, /* NOTE:
28d00 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 Optional. */..
28d10 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object
28d20 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 clientData,..
28d30 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 bool p
28d40 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 erUser,..
28d50 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c bool wow64,
28d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
28d70 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e ol throwOnMissin
28d80 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g,..
28d90 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 bool whatIf,..
28da0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 bool v
28db0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 erbose,..
28dc0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 ref string
28dd0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 error..
28de0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d ).. {.
28df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
28e00 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c (registry == nul
28e10 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
28e20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
28e30 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 error = "inva
28e40 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a lid registry";..
28e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28e60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 return false;..
28e70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
28e80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
28e90 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d frameworkList ==
28ea0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
28eb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
28ec0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 error = "
28ed0 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 invalid framewor
28ee0 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 k list";..
28ef0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
28f00 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
28f10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
28f20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 MockRegist
28f30 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 ryKey rootKey =
28f40 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f frameworkList.Ro
28f50 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 otKey;....
28f60 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 if (rootKe
28f70 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 y == null)..
28f80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
28f90 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
28fa0 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 = "invalid root
28fb0 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 key";..
28fc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
28fd0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alse;..
28fe0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
28ff0 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f if (!IsSuppo
29000 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 rtedRootKey(regi
29010 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d stry, rootKey)).
29020 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
29030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29040 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 error = "root ke
29050 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 y must be per-us
29060 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e er or per-machin
29070 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e";..
29080 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
29090 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
290a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
290b0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 if (frameworkLi
290c0 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c st.Names == null
290d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
290e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
290f0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 error = "no fr
29100 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f amework names fo
29110 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 und";..
29120 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
29130 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
29140 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
29150 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b if (framework
29160 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d List.Versions ==
29170 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
29180 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
29190 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 error = "
291a0 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 no framework ver
291b0 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 sions found";..
291c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
291d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 eturn false;..
291e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
291f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 if (f
29200 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 rameworkList.Pla
29210 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 tformNames == nu
29220 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
29230 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
29240 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 error = "no
29250 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 platform names f
29260 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 ound";..
29270 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
29280 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alse;..
29290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
292a0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 if (framewor
292b0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e kList.Names.Coun
292c0 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 t != frameworkLi
292d0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 st.PlatformNames
292e0 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 .Count)..
292f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
29300 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
29310 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 String.Format("f
29320 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f ramework name co
29330 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 unt {0} does not
29340 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 " +..
29350 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 "match
29360 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 platform name c
29370 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 ount {1}", frame
29380 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 workList.Names.C
29390 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 ount,..
293a0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 frame
293b0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 workList.Platfor
293c0 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a mNames.Count);..
293d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
293e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
293f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
29400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f .. fo
29410 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 r (int index = 0
29420 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 ; index < framew
29430 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f orkList.Names.Co
29440 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 unt; index++)..
29450 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
29470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
29480 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 // NOTE: Grab
29490 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 the name of the
294a0 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 framework (e.g.
294b0 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 ".NETFramework")
294c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
294d0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 // and t
294e0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 he name of the p
294f0 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 latform (e.g. "W
29500 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 indowsCE")...
29510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d //.
29520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
29530 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 string framewor
29540 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 kName = framewor
29550 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 kList.Names[inde
29560 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x];..
29570 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 string plat
29580 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 formName = frame
29590 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 workList.Platfor
295a0 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a mNames[index];..
295b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
295c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
295d0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 // NOTE: G
295e0 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 rab the supporte
295f0 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 d versions of th
29600 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 is particular..
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
29620 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 / framewor
29630 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 k...
29640 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
29650 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c VersionL
29660 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 ist frameworkVer
29670 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 sionList;....
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
29690 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c (version != null
296a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
296b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
296c0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 //..
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
296e0 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 // NOTE: Manua
296f0 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68 l override of th
29700 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 e *ONE* framewor
29710 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 k version..
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
29730 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 / to proce
29740 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ss...
29750 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 //..
29760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29770 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f frameworkVersio
29780 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 nList = new Vers
29790 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 ionList();..
297a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
297b0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e frameworkVersion
297c0 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 List.Add(new Ver
297d0 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d sion(version));.
297e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
297f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
29800 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 else..
29810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
29820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29830 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c if (!frameworkL
29840 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 ist.Versions.Try
29850 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 GetValue(..
29860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29870 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b framework
29880 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 Name, out framew
29890 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 orkVersionList)
298a0 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ||..
298b0 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61 (fra
298c0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 meworkVersionLis
298d0 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 t == null))..
298e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
298f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
29900 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 cont
29910 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 inue;..
29920 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
29930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
29940 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
29950 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 foreach (Vers
29960 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 ion frameworkVer
29970 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 sion in framewor
29980 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 kVersionList)..
29990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
299a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
299b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 TraceOps.D
299c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 ebugAndTrace(Tra
299d0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 cePriority.Lower
299e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
299f0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 debug
29a00 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 Callback, traceC
29a10 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
29a20 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
29a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29a40 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 "frameworkName
29a50 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b = {0}, framework
29a60 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 Version = {1}, "
29a70 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 +..
29a80 20 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 "pla
29a90 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 tformName = {2}"
29aa0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 , ForDisplay(fra
29ab0 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 meworkName),..
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29ad0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 ForDisplay
29ae0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f (frameworkVersio
29af0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n),..
29b00 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 For
29b10 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d Display(platform
29b20 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 Name)), traceCat
29b30 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 egory);....
29b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
29b50 66 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 f (!HaveFramewor
29b60 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 kRegistry(..
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29b80 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c rootKey,
29b90 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 frameworkName,
29ba0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e frameworkVersion
29bb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
29bd0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 latformName, per
29be0 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 User, wow64, wha
29bf0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a tIf, verbose))..
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29c10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
29c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
29c30 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
29c40 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 Trace(TracePrior
29c50 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 ity.Low,..
29c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29c70 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 debugCallb
29c80 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 ack, traceCallba
29c90 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
29ca0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29cc0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 ".NET Framework
29cd0 7b 30 7d 20 72 65 67 69 73 74 72 79 20 6e 6f 74 {0} registry not
29ce0 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20 found, " +..
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29d00 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 "skippi
29d10 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c ng...", ForDispl
29d20 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 ay(frameworkVers
29d30 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ion)),..
29d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29d50 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
29d60 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
29d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
29d80 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 ontinue;..
29d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
29da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
29db0 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 if (callb
29dc0 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 ack == null)..
29dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29de0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d continue;.
29df0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
29e00 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c if (!call
29e10 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 back(..
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29e30 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d rootKey, fram
29e40 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 eworkName, frame
29e50 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 workVersion,..
29e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29e70 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f platfo
29e80 72 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 rmName, clientDa
29e90 74 61 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 ta, perUser, wow
29ea0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 64,..
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29ec0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c throwOnMissing,
29ed0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
29ee0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 , ref error))..
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
29f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
29f20 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
29f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29f40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
29f50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
29f60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
29f70 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b return true;
29f80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }..
29f90 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d #endregion.
29fa0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
29fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
29fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
29fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
29fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
29ff0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 //.... #r
2a000 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c egion Per-Visual
2a010 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 Studio Version
2a020 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 Handling..
2a030 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
2a040 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 void Initialize
2a050 56 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 VsList(..
2a060 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 MockRegistr
2a070 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 yKey rootKey,..
2a080 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 Confi
2a090 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 guration configu
2a0a0 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 ration,..
2a0b0 20 20 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 ref VsList
2a0c0 76 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 vsList..
2a0d0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b ).. {
2a0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
2a0f0 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c (vsList == null
2a100 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
2a110 20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 vsList = new
2a120 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 VsList();....
2a130 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c if (vsL
2a140 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e ist.RootKey == n
2a150 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
2a160 20 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f vsList.Roo
2a170 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d tKey = rootKey;.
2a180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
2a190 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f f (vsList.Versio
2a1a0 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ns == null)..
2a1b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2a1c0 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 vsLi
2a1d0 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 st.Versions = ne
2a1e0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b w VersionList();
2a1f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2a200 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 if ((configu
2a210 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 ration == null)
2a220 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f || !configuratio
2a230 6e 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 n.NoVs2005)..
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a250 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 vsList.Versions
2a260 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e .Add(new Version
2a270 28 38 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 (8, 0)); // 2005
2a280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2a290 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 if ((configu
2a2a0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 ration == null)
2a2b0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f || !configuratio
2a2c0 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 n.NoVs2008)..
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a2e0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 vsList.Versions
2a2f0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e .Add(new Version
2a300 28 39 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 (9, 0)); // 2008
2a310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2a320 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 if ((configu
2a330 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 ration == null)
2a340 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f || !configuratio
2a350 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 n.NoVs2010)..
2a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a370 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 vsList.Versions
2a380 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e .Add(new Version
2a390 28 31 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 (10, 0));// 2010
2a3a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2a3b0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 if ((configu
2a3c0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 ration == null)
2a3d0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f || !configuratio
2a3e0 6e 2e 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 n.NoVs2012)..
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a400 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 vsList.Versions
2a410 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e .Add(new Version
2a420 28 31 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 (11, 0));// 2012
2a430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2a440 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 if ((configu
2a450 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 ration == null)
2a460 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f || !configuratio
2a470 6e 2e 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20 n.NoVs2013)..
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a490 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 vsList.Versions
2a4a0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e .Add(new Version
2a4b0 28 31 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33 (12, 0));// 2013
2a4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
2a4d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }....
2a4e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f //////////
2a4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2a500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2a510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2a520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d /////////////...
2a530 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 . private
2a540 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 static bool Hav
2a550 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 eVsVersion(..
2a560 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 MockReg
2a570 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 istryKey rootKey
2a580 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 ,.. V
2a590 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e ersion vsVersion
2a5a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ,.. s
2a5b0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 tring suffix,..
2a5c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
2a5d0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 perUser,..
2a5e0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 bool wow64
2a5f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 ,.. b
2a600 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 ool whatIf,..
2a610 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 bool ve
2a620 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 rbose..
2a630 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d ).. {.
2a640 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
2a650 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 (vsVersion == nu
2a660 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
2a670 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
2a680 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e;....
2a690 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 string keyName
2a6a0 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 = GetVsKeyName(
2a6b0 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 vsVersion, suffi
2a6c0 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 x, perUser, wow6
2a6d0 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 4);....
2a6e0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 using (MockRe
2a6f0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 gistryKey key =
2a700 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f RegistryHelper.O
2a710 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 penSubKey(..
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a730 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 rootKey, keyName
2a740 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c , false, whatIf,
2a750 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 verbose))..
2a760 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
2a770 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b if (k
2a780 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ey == null)..
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a7a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
2a7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2a7c0 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d object value =
2a7d0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
2a7e0 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 GetValue(..
2a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b k
2a800 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 ey, "InstallDir"
2a810 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 , null, whatIf,
2a820 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 verbose);....
2a830 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
2a840 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 (!(value is stri
2a850 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ng))..
2a860 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
2a870 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 false;....
2a880 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
2a890 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 g directory = (s
2a8a0 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a tring)value;....
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a8c0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c if (String.IsNul
2a8d0 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f lOrEmpty(directo
2a8e0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ry))..
2a8f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
2a900 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 false;....
2a910 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 if (!
2a920 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 Directory.Exists
2a930 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 (directory))..
2a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a950 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
2a960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
2a970 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 TraceOps.Debu
2a980 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 gAndTrace(TraceP
2a990 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a riority.Lower,..
2a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a9b0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
2a9c0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
2a9d0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
2a9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2a9f0 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 "Visual St
2aa00 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69 udio {0} found i
2aa10 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e n directory {1}.
2aa20 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
2aa30 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c ForDispl
2aa40 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46 ay(vsVersion), F
2aa50 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 orDisplay(direct
2aa60 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ory)),..
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 trac
2aa80 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 eCategory);....
2aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2aaa0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 eturn true;..
2aab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }..
2aac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
2aad0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
2aae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2aaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ab00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ab10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
2ab20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 [MethodImpl(
2ab30 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e MethodImplOption
2ab40 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a s.NoInlining)]..
2ab50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 private
2ab60 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 static bool ForE
2ab70 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 achVsVersionRegi
2ab80 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 stry(..
2ab90 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 MockRegistry
2aba0 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 registry,..
2abb0 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 VsList vs
2abc0 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 List,..
2abd0 20 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 VisualStudioR
2abe0 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 egistryCallback
2abf0 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 callback,..
2ac00 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 string su
2ac10 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 ffix,..
2ac20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 Package packa
2ac30 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ge,..
2ac40 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 object clientDa
2ac50 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ta,..
2ac60 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a bool perUser,..
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2ac80 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 wow64,..
2ac90 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f bool throwO
2aca0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 nMissing,..
2acb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 bool what
2acc0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If,..
2acd0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a bool verbose,..
2ace0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 ref
2acf0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 string error..
2ad00 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 )..
2ad10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
2ad20 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 if (registry
2ad30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
2ad40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
2ad50 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
2ad60 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 = "invalid regis
2ad70 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 try";..
2ad80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
2ad90 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
2ada0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
2adb0 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d if (vsList ==
2adc0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
2add0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2ade0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 error = "
2adf0 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 invalid VS list"
2ae00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
2ae10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
2ae20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
2ae30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d ... M
2ae40 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 ockRegistryKey r
2ae50 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e ootKey = vsList.
2ae60 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 RootKey;....
2ae70 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 if (root
2ae80 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 Key == null)..
2ae90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
2aeb0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f or = "invalid ro
2aec0 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 ot key";..
2aed0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
2aee0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
2aef0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
2af00 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 if (!IsSup
2af10 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 portedRootKey(re
2af20 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 gistry, rootKey)
2af30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
2af40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2af50 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 error = "root
2af60 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d key must be per-
2af70 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 user or per-mach
2af80 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 ine";..
2af90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
2afa0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
2afb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
2afc0 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 if (vsList.Ve
2afd0 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d rsions == null).
2afe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
2aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b000 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 error = "no VS v
2b010 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d ersions found";.
2b020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2b030 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a return false;..
2b040 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
2b050 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 . for
2b060 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 each (Version vs
2b070 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 Version in vsLis
2b080 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 t.Versions)..
2b090 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 Trac
2b0b0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 eOps.DebugAndTra
2b0c0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 ce(TracePriority
2b0d0 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 .Lower,..
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 deb
2b0f0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 ugCallback, trac
2b100 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e eCallback, Strin
2b110 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
2b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
2b130 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 vsVersion = {0}"
2b140 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 , ForDisplay(vsV
2b150 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 ersion)),..
2b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
2b170 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a raceCategory);..
2b180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2b190 20 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72 if (!HaveVsVer
2b1a0 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 sion(..
2b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2b1c0 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f ootKey, vsVersio
2b1d0 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 n, suffix, perUs
2b1e0 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 er, wow64, whatI
2b1f0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
2b200 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 verb
2b210 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ose))..
2b220 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
2b240 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
2b250 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 race(TracePriori
2b260 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 ty.Low,..
2b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b280 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 debugCallback,
2b290 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 traceCallback, S
2b2a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 tring.Format(..
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b2c0 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 "Visual S
2b2d0 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 66 6f tudio {0} not fo
2b2e0 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e und, skipping...
2b2f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
2b300 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
2b310 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e isplay(vsVersion
2b320 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 )), traceCategor
2b330 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
2b340 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 conti
2b350 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 nue;..
2b360 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
2b370 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 if (c
2b380 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 allback == null)
2b390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2b3a0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d continue;.
2b3b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
2b3c0 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b if (!callback
2b3d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2b3e0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b rootK
2b3f0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 ey, vsVersion, s
2b400 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 uffix, package,
2b410 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 clientData,..
2b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b430 20 20 20 20 20 70 65 72 55 73 65 72 2c 20 77 6f perUser, wo
2b440 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 w64, throwOnMiss
2b450 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 ing, whatIf, ver
2b460 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 bose,..
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2b480 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 ef error))..
2b490 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b4b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
2b4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2b4d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
2b4e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
2b4f0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a return true;..
2b500 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
2b510 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
2b520 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
2b530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2b570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 .... #reg
2b580 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f ion Configuratio
2b590 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d n File Handling.
2b5a0 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 . [Method
2b5b0 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f Impl(MethodImplO
2b5c0 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e ptions.NoInlinin
2b5d0 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 g)].. pri
2b5e0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c vate static bool
2b5f0 20 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 AddDbProviderFa
2b600 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 ctory(..
2b610 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e string fileN
2b620 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
2b630 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 string invaria
2b640 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nt,..
2b650 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 string name,..
2b660 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
2b670 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a g description,..
2b680 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
2b690 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 ng typeName,..
2b6a0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 Assemb
2b6b0 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e lyName assemblyN
2b6c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
2b6d0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a bool whatIf,..
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2b6f0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 verbose,..
2b700 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 ref bool
2b710 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 saved,..
2b720 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 ref string e
2b730 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 rror..
2b740 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a ).. {..
2b750 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2b760 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d dirty = false;.
2b770 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c . Xml
2b780 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e Document documen
2b790 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d t = new XmlDocum
2b7a0 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 ent();....
2b7b0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 document.P
2b7c0 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63 reserveWhitespac
2b7d0 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 e = true;..
2b7e0 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e document.
2b7f0 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d Load(fileName);.
2b800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 ... X
2b810 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 mlElement addEle
2b820 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e ment = document.
2b830 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 SelectSingleNode
2b840 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2b850 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 String.Format
2b860 28 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d (XPathForAddElem
2b870 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 ent, invariant))
2b880 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d as XmlElement;.
2b890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
2b8a0 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d f (addElement ==
2b8b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
2b8c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2b8d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 string[]
2b8e0 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b elementNames = {
2b8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2b900 20 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 "system.da
2b910 74 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 ta", "DbProvider
2b920 46 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 Factories"..
2b930 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a };..
2b940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2b950 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 XmlElement pre
2b960 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a viousElement =..
2b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b980 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 document.Doc
2b990 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a umentElement; /*
2b9a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a configuration *
2b9b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 /....
2b9c0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 foreach (st
2b9d0 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 ring elementName
2b9e0 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 in elementNames
2b9f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
2ba00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
2ba10 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 addEle
2ba20 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45 ment = previousE
2ba30 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e lement.SelectSin
2ba40 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 gleNode(..
2ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ba60 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 elementName) a
2ba70 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d s XmlElement;...
2ba80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2ba90 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d if (addElem
2baa0 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 ent == null)..
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bac0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
2bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 add
2bae0 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 Element = docume
2baf0 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 nt.CreateElement
2bb00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
2bb20 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 lementName, Stri
2bb30 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 ng.Empty);....
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bb50 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c previousEl
2bb60 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c ement.AppendChil
2bb70 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a d(addElement);..
2bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bb90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 pre
2bbb0 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 viousElement = a
2bbc0 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 ddElement;..
2bbd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
2bbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2bbf0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f addElement = do
2bc00 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 cument.CreateEle
2bc10 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 ment(..
2bc20 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64 22 "add"
2bc30 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b , String.Empty);
2bc40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2bc50 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d previousElem
2bc60 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 ent.AppendChild(
2bc70 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a addElement);....
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2bc90 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 dirty = true;..
2bca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
2bcc0 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 !String.Equals(a
2bcd0 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 ddElement.GetAtt
2bce0 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d ribute("name"),.
2bcf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2bd00 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e name, Strin
2bd10 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 gComparison.Ordi
2bd20 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 nal))..
2bd30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
2bd40 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 addElement
2bd50 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 6e .SetAttribute("n
2bd60 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 ame", name);..
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 di
2bd80 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 rty = true;..
2bd90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
2bda0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 if (!S
2bdb0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 tring.Equals(add
2bdc0 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 Element.GetAttri
2bdd0 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 bute("invariant"
2bde0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
2bdf0 20 20 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e invarian
2be00 74 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 t, StringCompari
2be10 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 son.Ordinal))..
2be20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
2be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 ad
2be40 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 dElement.SetAttr
2be50 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 ibute("invariant
2be60 22 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a ", invariant);..
2be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2be80 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 dirty = true;..
2be90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
2beb0 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 !String.Equals(a
2bec0 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 ddElement.GetAtt
2bed0 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74 ribute("descript
2bee0 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 ion"),..
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 63 desc
2bf00 72 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 ription, StringC
2bf10 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 omparison.Ordina
2bf20 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l))..
2bf30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2bf40 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 addElement.S
2bf50 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 etAttribute("des
2bf60 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 cription", descr
2bf70 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 iption);..
2bf80 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 dirty
2bf90 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 = true;..
2bfa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
2bfb0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c string ful
2bfc0 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 lTypeName = Stri
2bfd0 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 ng.Format("{0},
2bfe0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 {1}",..
2bff0 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c typeName,
2c000 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d assemblyName);.
2c010 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
2c020 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c f (!String.Equal
2c030 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 s(addElement.Get
2c040 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 Attribute("type"
2c050 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ),..
2c060 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65 fullType
2c070 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 Name, StringComp
2c080 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 arison.Ordinal))
2c090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
2c0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2c0b0 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 addElement.SetA
2c0c0 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c ttribute("type",
2c0d0 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d fullTypeName);.
2c0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2c0f0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a dirty = true;..
2c100 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
2c110 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
2c120 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 (dirty || whatIf
2c130 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
2c140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2c150 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a if (verbose)..
2c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c170 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 TraceOps.Deb
2c180 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 ugAndTrace(Trace
2c190 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 Priority.Highest
2c1a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2c1b0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 debug
2c1c0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 Callback, traceC
2c1d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
2c1e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
2c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c200 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b "addElement = {
2c210 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0}", ForDisplay(
2c220 61 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 addElement)),..
2c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c240 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 traceCate
2c250 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 gory);....
2c260 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 if (!w
2c270 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 hatIf)..
2c280 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 docu
2c290 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 ment.Save(fileNa
2c2a0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 me);....
2c2b0 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 filesMod
2c2c0 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 ified++;....
2c2d0 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 save
2c2e0 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 d = true;..
2c2f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
2c300 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t
2c310 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d rue;.. }.
2c320 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f ... /////
2c330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2c370 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d //.... [M
2c380 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 ethodImpl(Method
2c390 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e ImplOptions.NoIn
2c3a0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 lining)]..
2c3b0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
2c3c0 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 bool RemoveDbPr
2c3d0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a oviderFactory(..
2c3e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
2c3f0 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 ng fileName,..
2c400 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
2c410 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 invariant,..
2c420 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 bool wh
2c430 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 atIf,..
2c440 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c bool verbose,
2c450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
2c460 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 f bool saved,..
2c470 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 ref s
2c480 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 tring error..
2c490 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 )..
2c4a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2c4b0 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 bool dirty =
2c4c0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 false;..
2c4d0 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 XmlDocument
2c4e0 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 document = new X
2c4f0 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d mlDocument();...
2c500 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 . doc
2c510 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 ument.PreserveWh
2c520 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b itespace = true;
2c530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f .. do
2c540 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 cument.Load(file
2c550 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 Name);....
2c560 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 XmlElement
2c570 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f addElement = do
2c580 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e cument.SelectSin
2c590 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 gleNode(..
2c5a0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 String
2c5b0 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 .Format(XPathFor
2c5c0 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 AddElement, inva
2c5d0 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c riant)) as XmlEl
2c5e0 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 ement;....
2c5f0 20 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 if (addEle
2c600 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 ment != null)..
2c610 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
2c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 ad
2c630 64 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e dElement.ParentN
2c640 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 ode.RemoveChild(
2c650 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 addElement);..
2c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 di
2c670 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 rty = true;..
2c680 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
2c690 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 XmlEle
2c6a0 6d 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 ment removeEleme
2c6b0 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 nt = document.Se
2c6c0 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d lectSingleNode(.
2c6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2c6e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 String.Format(X
2c6f0 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 PathForRemoveEle
2c700 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 ment, invariant)
2c710 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b ) as XmlElement;
2c720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2c730 69 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e if (removeElemen
2c740 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 t != null)..
2c750 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
2c760 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov
2c770 65 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e eElement.ParentN
2c780 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 ode.RemoveChild(
2c790 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d removeElement);.
2c7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2c7b0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a dirty = true;..
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
2c7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
2c7e0 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 (dirty || whatIf
2c7f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
2c800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2c810 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a if (verbose)..
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c830 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 TraceOps.Deb
2c840 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 ugAndTrace(Trace
2c850 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 Priority.Highest
2c860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2c870 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 debug
2c880 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 Callback, traceC
2c890 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e allback, String.
2c8a0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
2c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c8c0 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b "addElement = {
2c8d0 30 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 0}, removeElemen
2c8e0 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 t = {1}",..
2c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c900 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 ForDisplay(ad
2c910 64 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 dElement), ForDi
2c920 73 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d splay(removeElem
2c930 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ent)),..
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c950 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d traceCategory);.
2c960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
2c970 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d if (!whatIf).
2c980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2c990 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 document.Sa
2c9a0 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d ve(fileName);...
2c9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2c9c0 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b filesModified++
2c9d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
2c9e0 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 saved = tru
2c9f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
2ca00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
2ca10 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 return true;..
2ca20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
2ca30 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////
2ca40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ca50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ca60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 ///////////....
2ca80 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 private s
2ca90 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 tatic bool Proce
2caa0 73 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 ssDbProviderFact
2cab0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ory(..
2cac0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d string fileNam
2cad0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
2cae0 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 string invariant
2caf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ,.. s
2cb00 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 tring name,..
2cb10 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
2cb20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 description,..
2cb30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
2cb40 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 typeName,..
2cb50 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 Assembly
2cb60 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d Name assemblyNam
2cb70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
2cb80 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 object clientDat
2cb90 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 a,..
2cba0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 bool perUser,..
2cbb0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
2cbc0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 wow64,..
2cbd0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e bool throwOn
2cbe0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 Missing,..
2cbf0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
2cc00 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
2cc10 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 bool verbose,..
2cc20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 ref b
2cc30 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 ool saved,..
2cc40 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 ref stri
2cc50 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 ng error..
2cc60 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 )..
2cc70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2cc80 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 AnyPair<string,
2cc90 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 bool> pair = cli
2cca0 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 entData as AnyPa
2ccb0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e ir<string, bool>
2ccc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
2ccd0 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c if (pair == nul
2cce0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
2ccf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
2cd00 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 error = "inva
2cd10 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f lid framework co
2cd20 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 nfig callback da
2cd30 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 ta";..
2cd40 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
2cd50 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se;..
2cd60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
2cd70 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 if (pair.Y)..
2cd80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
2cda0 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f turn RemoveDbPro
2cdb0 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 viderFactory(..
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cdd0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 fileName, inv
2cde0 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 ariant, whatIf,
2cdf0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 verbose, ref sav
2ce00 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ed,..
2ce10 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 ref err
2ce20 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 or) &&..
2ce30 20 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f AddDbPro
2ce40 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 viderFactory(..
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ce60 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 fileName, inv
2ce70 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 ariant, name, de
2ce80 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e scription, typeN
2ce90 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
2cea0 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 assemb
2ceb0 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 lyName, whatIf,
2cec0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 verbose, ref sav
2ced0 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d ed, ref error);.
2cee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2cef0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 else
2cf00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
2cf10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2cf20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 return RemoveDb
2cf30 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 ProviderFactory(
2cf40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2cf50 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 fileName,
2cf60 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 invariant, whatI
2cf70 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 f, verbose, ref
2cf80 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 saved,..
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 ref
2cfa0 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 error);..
2cfb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }..
2cfc0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 }.. #endr
2cfd0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
2cfe0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
2cff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d020 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
2d030 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 #region Asse
2d040 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e mbly Folders Han
2d050 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 dling.. p
2d060 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 rivate static st
2d070 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 ring GetAssembly
2d080 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d FoldersKeyName(.
2d090 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str
2d0a0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d ing frameworkNam
2d0b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
2d0c0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 Version framewor
2d0d0 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 kVersion,..
2d0e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c string pl
2d0f0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 atformName,..
2d100 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 bool pe
2d110 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 rUser,..
2d120 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a bool wow64..
2d130 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
2d140 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
2d150 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
2d160 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 // NOTE: T
2d170 68 69 73 20 72 65 67 69 73 74 72 79 20 6b 65 79 his registry key
2d180 20 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61 appears to alwa
2d190 79 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c ys be 32-bit onl
2d1a0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f y.. /
2d1b0 2f 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72 / (i.e. pr
2d1c0 6f 62 61 62 6c 79 20 62 65 63 61 75 73 65 20 69 obably because i
2d1d0 74 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 t is only used b
2d1e0 79 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 y Visual..
2d1f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 // S
2d200 74 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20 tudio, which is
2d210 63 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 currently always
2d220 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 32-bit only)...
2d230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a //..
2d240 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
2d250 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 ng format = !Str
2d260 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 ing.IsNullOrEmpt
2d270 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 y(platformName)
2d280 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ?..
2d290 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f "{0}\\Microso
2d2a0 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b ft\\{1}\\v{2}\\{
2d2b0 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 3}\\AssemblyFold
2d2c0 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 ersEx" :..
2d2d0 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c "{0}\\
2d2e0 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c Microsoft\\{1}\\
2d2f0 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f v{2}\\AssemblyFo
2d300 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 ldersEx";....
2d310 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
2d320 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f String.Format(fo
2d330 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 rmat, GetRootKey
2d340 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f Name(perUser, wo
2d350 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 w64),..
2d360 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b framework
2d370 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 Name, frameworkV
2d380 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d ersion, platform
2d390 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 Name);..
2d3a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f }.... ///
2d3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2d3f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
2d400 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 private static b
2d410 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c ool AddToAssembl
2d420 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 yFolders(..
2d430 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 MockRegis
2d440 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d tryKey rootKey,.
2d450 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str
2d460 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d ing frameworkNam
2d470 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
2d480 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 Version framewor
2d490 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 kVersion,..
2d4a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c string pl
2d4b0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 atformName,..
2d4c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
2d4d0 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 subKeyName,..
2d4e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
2d4f0 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 directory,..
2d500 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 bool per
2d510 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 User,..
2d520 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a bool wow64,..
2d530 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2d540 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
2d550 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f bool verbo
2d560 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se,..
2d570 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f ref string erro
2d580 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 r.. )
2d590 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 .. {..
2d5a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
2d5b0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 keyName = GetAss
2d5c0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e emblyFoldersKeyN
2d5d0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ame(..
2d5e0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e frameworkN
2d5f0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 ame, frameworkVe
2d600 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e rsion, platformN
2d610 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 ame, perUser,..
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 w
2d630 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 ow64);....
2d640 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 using (Moc
2d650 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 kRegistryKey key
2d660 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 = RegistryHelpe
2d670 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 r.OpenSubKey(..
2d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d690 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e rootKey, keyN
2d6a0 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 ame, true, whatI
2d6b0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 f, verbose))..
2d6c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if
2d6e0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 (key == null)..
2d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
2d700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2d710 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 error = St
2d720 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 ring.Format(..
2d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d740 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 "could not
2d750 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b open registry k
2d760 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a ey: {0}\\{1}",..
2d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d780 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c rootKey,
2d790 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 keyName);....
2d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d7b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
2d7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2d7d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
2d7e0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 using (Moc
2d7f0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 kRegistryKey sub
2d800 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 Key = RegistryHe
2d810 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 lper.CreateSubKe
2d820 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
2d830 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c key,
2d840 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 subKeyName, wha
2d850 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a tIf, verbose))..
2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d870 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
2d880 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 if (subKe
2d890 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 y == null)..
2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d8b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
2d8c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
2d8d0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 = String.Format
2d8e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
2d900 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 could not create
2d910 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b registry key: {
2d920 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 0}\\{1}",..
2d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d940 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b key, subK
2d950 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 eyName);....
2d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d970 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
2d980 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
2d990 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
2d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d9b0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 RegistryHelper.S
2d9c0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 etValue(..
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d9e0 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 subKey, null,
2d9f0 64 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49 directory, whatI
2da00 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 f, verbose);..
2da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
2da20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2da30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
2da40 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 turn true;..
2da50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
2da60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
2da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2da80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2da90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2daa0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
2dab0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
2dac0 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 ic bool RemoveFr
2dad0 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 omAssemblyFolder
2dae0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s(..
2daf0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
2db00 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 rootKey,..
2db10 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 string fra
2db20 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 meworkName,..
2db30 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e Version
2db40 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f frameworkVersio
2db50 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n,..
2db60 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e string platformN
2db70 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
2db80 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e string subKeyN
2db90 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
2dba0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d bool perUser,.
2dbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f . boo
2dbc0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 l wow64,..
2dbd0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 bool throw
2dbe0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 OnMissing,..
2dbf0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 bool wha
2dc00 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf,..
2dc10 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d bool verbose,.
2dc20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 . ref
2dc30 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 string error..
2dc40 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 )..
2dc50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
2dc60 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e string keyN
2dc70 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c ame = GetAssembl
2dc80 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 yFoldersKeyName(
2dc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2dca0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c frameworkName,
2dcb0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f frameworkVersio
2dcc0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c n, platformName,
2dcd0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 perUser,..
2dce0 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 wow64
2dcf0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
2dd00 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 using (MockReg
2dd10 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 istryKey key = R
2dd20 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 egistryHelper.Op
2dd30 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 enSubKey(..
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2dd50 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c ootKey, keyName,
2dd60 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 true, whatIf, v
2dd70 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 erbose))..
2dd80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
2dd90 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 if (key
2dda0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
2ddb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ddd0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 error = String
2dde0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2de00 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 "could not ope
2de10 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 n registry key:
2de20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 {0}\\{1}",..
2de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2de40 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 rootKey, key
2de50 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 Name);....
2de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
2de70 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
2de80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
2de90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2dea0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 RegistryHelper
2deb0 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a .DeleteSubKey(..
2dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ded0 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e key, subKeyN
2dee0 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 ame, throwOnMiss
2def0 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 ing, whatIf, ver
2df00 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 bose);..
2df10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }....
2df20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true
2df30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ;.. }....
2df40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
2df50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2df60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2df70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2df80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
2df90 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 ... priva
2dfa0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 te static bool P
2dfb0 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f rocessAssemblyFo
2dfc0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 lders(..
2dfd0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 MockRegistry
2dfe0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 Key rootKey,..
2dff0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 string
2e000 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d frameworkName,.
2e010 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 . Ver
2e020 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 sion frameworkVe
2e030 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 rsion,..
2e040 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 string platf
2e050 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 ormName,..
2e060 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 object cli
2e070 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 entData,..
2e080 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 bool perUs
2e090 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er,..
2e0a0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 bool wow64,..
2e0b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 bool t
2e0c0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a hrowOnMissing,..
2e0d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
2e0e0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
2e0f0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f bool verbo
2e100 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se,..
2e110 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f ref string erro
2e120 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 r.. )
2e130 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 .. {..
2e140 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 AnyPair
2e150 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 <string, bool> p
2e160 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 air = clientData
2e170 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 as AnyPair<stri
2e180 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 ng, bool>;....
2e190 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 if (pa
2e1a0 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ir == null)..
2e1b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
2e1d0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 r = "invalid fra
2e1e0 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 mework callback
2e1f0 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 data";..
2e200 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
2e210 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alse;..
2e220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
2e230 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d if (pair.Y).
2e240 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
2e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e260 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f return RemoveFro
2e270 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 mAssemblyFolders
2e280 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2e290 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 rootKey,
2e2a0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 frameworkName, f
2e2b0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c rameworkVersion,
2e2c0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a platformName,..
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e2e0 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 LegacyProjec
2e2f0 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 tName, perUser,
2e300 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 77 68 wow64, false, wh
2e310 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a atIf, verbose,..
2e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e330 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 ref error) &
2e340 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 &..
2e350 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 AddToAssembly
2e360 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 Folders(..
2e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f ro
2e380 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b otKey, framework
2e390 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 Name, frameworkV
2e3a0 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d ersion, platform
2e3b0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 Name,..
2e3c0 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 Proje
2e3d0 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 ctName, pair.X,
2e3e0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 perUser, wow64,
2e3f0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c whatIf, verbose,
2e400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2e410 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 ref error)
2e420 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
2e430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c .. el
2e440 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se..
2e450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
2e460 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 return Remove
2e470 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 FromAssemblyFold
2e480 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ers(..
2e490 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 rootKe
2e4a0 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 y, frameworkName
2e4b0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 , frameworkVersi
2e4c0 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 on, platformName
2e4d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2e4e0 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 ProjectNa
2e4f0 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 me, perUser, wow
2e500 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 64, throwOnMissi
2e510 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 ng, whatIf,..
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e530 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 verbose, ref er
2e540 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 ror);..
2e550 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }.
2e560 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 . #endreg
2e570 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f ion.... /
2e580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e5c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
2e5d0 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c #region Visual
2e5e0 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 Studio Handling
2e5f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 .. privat
2e600 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 e static string
2e610 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 GetVsRootKeyName
2e620 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 (.. b
2e630 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 ool perUser,..
2e640 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 bool w
2e650 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 ow64..
2e660 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a ).. {..
2e670 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
2e680 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 rn String.Format
2e690 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 ("{0}\\Microsoft
2e6a0 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c \\VisualStudio",
2e6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2e6c0 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 GetRootKeyName
2e6d0 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 (perUser, wow64)
2e6e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d );.. }...
2e6f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f . ///////
2e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 .... priv
2e750 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e ate static strin
2e760 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d g GetVsKeyName(.
2e770 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 . Ver
2e780 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d sion vsVersion,.
2e790 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str
2e7a0 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 ing suffix,..
2e7b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 bool pe
2e7c0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 rUser,..
2e7d0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a bool wow64..
2e7e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
2e7f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
2e800 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 if (vsVers
2e810 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 ion == null)..
2e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
2e830 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 turn null;....
2e840 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
2e850 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
2e860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2e870 20 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 "{0}\\{1}{2}",
2e880 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 GetVsRootKeyName
2e890 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 (perUser, wow64)
2e8a0 2c 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 , vsVersion,..
2e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 su
2e8c0 66 66 69 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 ffix);..
2e8d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f }.... ///
2e8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2e920 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
2e930 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 #region Visual S
2e940 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63 tudio Data Sourc
2e950 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 e Handling..
2e960 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 private stat
2e970 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 ic bool AddVsDat
2e980 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 aSource(..
2e990 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 MockRegist
2e9a0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a ryKey rootKey,..
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 Vers
2e9c0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a ion vsVersion,..
2e9d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 stri
2e9e0 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 ng suffix,..
2e9f0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 Package
2ea00 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 package,..
2ea10 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 bool perUs
2ea20 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er,..
2ea30 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 bool wow64,..
2ea40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 bool w
2ea50 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 hatIf,..
2ea60 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 bool verbose
2ea70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 ,.. r
2ea80 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d ef string error.
2ea90 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a . )..
2eaa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
2eab0 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 if (vsVer
2eac0 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 sion == null)..
2ead0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
2eaf0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 ror = "invalid V
2eb00 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 S version";..
2eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
2eb20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
2eb30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
2eb40 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 if (pac
2eb50 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 kage == null)..
2eb60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er
2eb80 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 ror = "invalid V
2eb90 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 S package";..
2eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
2ebb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
2ebc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
2ebd0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
2ebe0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b keyName = GetVsK
2ebf0 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e eyName(vsVersion
2ec00 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 , suffix, perUse
2ec10 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 r, wow64);....
2ec20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 using
2ec30 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 (MockRegistryKey
2ec40 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 key = RegistryH
2ec50 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 elper.OpenSubKey
2ec60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2ec70 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 rootKey,
2ec80 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 keyName, false,
2ec90 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 whatIf, verbose)
2eca0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b ).. {
2ecb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2ecc0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c if (key == nul
2ecd0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
2ece0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2ecf0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
2ed00 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 = String.Format
2ed10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
2ed20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c "coul
2ed30 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 d not open regis
2ed40 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 try key: {0}\\{1
2ed50 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }",..
2ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f roo
2ed70 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d tKey, keyName);.
2ed80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
2ed90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
2eda0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
2edb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
2edc0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 using
2edd0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 (MockRegistryKe
2ede0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 y subKey = Regis
2edf0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 tryHelper.OpenSu
2ee00 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 bKey(..
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b k
2ee20 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73 ey, "DataSources
2ee30 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c ", true, whatIf,
2ee40 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 verbose))..
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
2ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ee70 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d if (subKey ==
2ee80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
2ee90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
2eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2eeb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 error = S
2eec0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 tring.Format(..
2eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2eee0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c "coul
2eef0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 d not open regis
2ef00 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 try key: {0}\\Da
2ef10 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 taSources",..
2ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ef30 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a key);..
2ef40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2ef50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
2ef60 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
2ef80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2ef90 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 using (Moc
2efa0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 kRegistryKey dat
2efb0 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20 aSourceKey =..
2efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2efd0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 Regist
2efe0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 ryHelper.CreateS
2eff0 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 ubKey(subKey,..
2f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f010 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 packa
2f020 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e ge.DataSourceId.
2f030 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 ToString(VsIdFor
2f040 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 mat),..
2f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f060 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f whatIf, verbo
2f070 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 se))..
2f080 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
2f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f0a0 20 20 20 20 20 69 66 20 28 64 61 74 61 53 6f 75 if (dataSou
2f0b0 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d rceKey == null).
2f0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2f0d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f0f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
2f100 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
2f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f130 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 "could not creat
2f140 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 e registry key:
2f150 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d {0}\\{1}", key,.
2f160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f180 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 package.DataSou
2f190 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 rceId.ToString(V
2f1a0 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a sIdFormat));....
2f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
2f1d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f1f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f210 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 RegistryHelper.S
2f220 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 etValue(..
2f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f240 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 dataSource
2f250 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e Key, null, Strin
2f260 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
2f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f280 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61 "{0} Data
2f290 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a base File", Proj
2f2a0 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 ectName), whatIf
2f2b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
2f2d0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 erbose);....
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f2f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f310 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 // NOTE: This va
2f320 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66 lue is new as of
2f330 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 1.0.83.0...
2f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f350 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
2f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f370 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 RegistryHelper.S
2f380 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 etValue(..
2f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f3a0 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 dataSource
2f3b0 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 50 72 6f Key, "DefaultPro
2f3c0 76 69 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 vider",..
2f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f3e0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 package.Dat
2f3f0 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 aProviderId.ToSt
2f400 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 ring(VsIdFormat)
2f410 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
2f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 w
2f430 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b hatIf, verbose);
2f440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2f450 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 Regi
2f460 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 stryHelper.Creat
2f470 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72 eSubKey(dataSour
2f480 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 ceKey,..
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f4a0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 String.Forma
2f4b0 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f t("SupportingPro
2f4c0 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 viders\\{0}",..
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f4e0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 packa
2f4f0 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 ge.DataProviderI
2f500 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 d.ToString(VsIdF
2f510 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 ormat)),..
2f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f530 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 whatIf, ve
2f540 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 rbose);..
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f570 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
2f580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
2f590 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 return true;..
2f5a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
2f5b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
2f5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2f5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
2f600 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
2f610 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 atic bool Remove
2f620 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 VsDataSource(..
2f630 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 MockR
2f640 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b egistryKey rootK
2f650 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ey,..
2f660 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 Version vsVersi
2f670 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on,..
2f680 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d string suffix,.
2f690 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 . Pac
2f6a0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 kage package,..
2f6b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
2f6c0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 perUser,..
2f6d0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 bool wow64
2f6e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 ,.. b
2f6f0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 ool whatIf,..
2f700 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 bool ve
2f710 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 rbose,..
2f720 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 ref string e
2f730 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 rror..
2f740 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a ).. {..
2f750 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
2f760 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c vsVersion == nul
2f770 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
2f780 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
2f790 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 error = "inva
2f7a0 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b lid VS version";
2f7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2f7c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
2f7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2f7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
2f7f0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c (package == nul
2f800 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
2f810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
2f820 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 error = "inva
2f830 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b lid VS package";
2f840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2f850 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d return false;.
2f860 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }..
2f870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
2f880 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 ring keyName = G
2f890 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 etVsKeyName(vsVe
2f8a0 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 rsion, suffix, p
2f8b0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d erUser, wow64);.
2f8c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 ... u
2f8d0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 sing (MockRegist
2f8e0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 ryKey key = Regi
2f8f0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 stryHelper.OpenS
2f900 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ubKey(..
2f910 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 root
2f920 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 Key, keyName, fa
2f930 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 lse, whatIf, ver
2f940 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 bose))..
2f950 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2f960 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d if (key =
2f970 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
2f980 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
2f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f9a0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 error = String.F
2f9b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f9d0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 "could not open
2f9e0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 registry key: {0
2f9f0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 }\\{1}",..
2fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fa10 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 rootKey, keyNa
2fa20 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 me);....
2fa30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
2fa40 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
2fa50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
2fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fa70 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 using (MockRegis
2fa80 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 tryKey subKey =
2fa90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f RegistryHelper.O
2faa0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 penSubKey(..
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fac0 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f key, "DataSo
2fad0 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 urces", true, wh
2fae0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d atIf, verbose)).
2faf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2fb00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2fb10 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b if (subK
2fb20 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 ey == null)..
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fb40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
2fb50 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro
2fb60 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 r = String.Forma
2fb70 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
2fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fb90 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 "could not open
2fba0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 registry key: {0
2fbb0 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c }\\DataSources",
2fbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
2fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 ke
2fbe0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
2fc00 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 eturn false;..
2fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fc20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
2fc30 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 Regis
2fc40 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 tryHelper.Delete
2fc50 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 SubKeyTree(..
2fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fc70 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 subKey, pac
2fc80 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 kage.DataSourceI
2fc90 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 d.ToString(VsIdF
2fca0 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 ormat),..
2fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fcc0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
2fcd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
2fce0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
2fcf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
2fd00 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b return true;
2fd10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }....
2fd20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////
2fd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2fd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2fd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
2fd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
2fd70 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 .. privat
2fd80 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 e static bool Pr
2fd90 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 ocessVsDataSourc
2fda0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
2fdb0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
2fdc0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 rootKey,..
2fdd0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 Version vs
2fde0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 Version,..
2fdf0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 string suf
2fe00 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 fix,..
2fe10 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 Package packag
2fe20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e,..
2fe30 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 object clientDat
2fe40 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 a,..
2fe50 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 bool perUser,..
2fe60 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
2fe70 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 wow64,..
2fe80 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e bool throwOn
2fe90 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 Missing,..
2fea0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 bool whatI
2feb0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
2fec0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 bool verbose,..
2fed0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 ref s
2fee0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 tring error..
2fef0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 )..
2ff00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
2ff10 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d if (package =
2ff20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
2ff30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
2ff40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
2ff50 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b "invalid VS pack
2ff60 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 age";..
2ff70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa
2ff80 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 lse;..
2ff90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
2ffa0 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e AnyPair<strin
2ffb0 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 g, bool> pair =
2ffc0 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e clientData as An
2ffd0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f yPair<string, bo
2ffe0 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ol>;....
2fff0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 if (pair ==
30000 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
30010 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
30020 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 error = "i
30030 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 nvalid VS callba
30040 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 ck data";..
30050 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
30060 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
30070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
30080 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e if (pair.
30090 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 Y)..
300a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
300b0 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 return AddVsD
300c0 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 ataSource(..
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
300e0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 rootKey, vsVersi
300f0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b on, suffix, pack
30100 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f age, perUser, wo
30110 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 w64,..
30120 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 whatIf
30130 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 , verbose, ref e
30140 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 rror);..
30150 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
30160 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 else..
30170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
30180 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 return R
30190 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 emoveVsDataSourc
301a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
301b0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c rootKey,
301c0 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 vsVersion, suff
301d0 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65 72 ix, package, per
301e0 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 User, wow64,..
301f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30200 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 whatIf, verbos
30210 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a e, ref error);..
30220 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
30230 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }..
30240 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a #endregion....
30250 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
30260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
30290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d ///////////////.
302a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 ... #regi
302b0 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f on Visual Studio
302c0 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 48 Data Provider H
302d0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 andling..
302e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
302f0 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50 72 bool AddVsDataPr
30300 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 ovider(..
30310 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 MockRegistr
30320 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 yKey rootKey,..
30330 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 Versi
30340 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 on vsVersion,..
30350 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e strin
30360 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 g suffix,..
30370 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 Package p
30380 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 ackage,..
30390 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 string file
303a0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 Name,..
303b0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c bool perUser,
303c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
303d0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 ol wow64,..
303e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 bool what
303f0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If,..
30400 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a bool verbose,..
30410 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 ref
30420 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 string error..
30430 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 )..
30440 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
30450 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f if (vsVersio
30460 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 n == null)..
30470 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
30480 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
30490 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 = "invalid VS v
304a0 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 ersion";..
304b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
304c0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
304d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
304e0 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 if (packag
304f0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 e == null)..
30500 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
30510 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error
30520 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 = "invalid VS p
30530 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 ackage";..
30540 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
30550 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
30560 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
30570 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 string key
30580 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e Name = GetVsKeyN
30590 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 ame(vsVersion, s
305a0 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 uffix, perUser,
305b0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 wow64);....
305c0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f using (Mo
305d0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 ckRegistryKey ke
305e0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 y = RegistryHelp
305f0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a er.OpenSubKey(..
30600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30610 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 rootKey, key
30620 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 Name, false, wha
30630 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a tIf, verbose))..
30640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
30650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
30660 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d f (key == null).
30670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
30680 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
30690 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
306a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
306b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
306c0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e "could n
306d0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 ot open registry
306e0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c key: {0}\\{1}",
306f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
30700 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 rootKe
30710 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a y, keyName);....
30720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30730 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
30740 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
30750 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }....
30760 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d using (M
30770 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 ockRegistryKey s
30780 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 ubKey = Registry
30790 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 Helper.OpenSubKe
307a0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y(..
307b0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c key,
307c0 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 "DataProviders"
307d0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 , true, whatIf,
307e0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 verbose))..
307f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
30800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30810 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 if (subKey ==
30820 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
30830 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
30840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30850 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 error = St
30860 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 ring.Format(..
30870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30880 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 "could
30890 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 not open regist
308a0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 ry key: {0}\\Dat
308b0 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 aProviders",..
308c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
308d0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d key);.
308e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
308f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
30900 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
30910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
30920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
30930 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f using (Mo
30940 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 ckRegistryKey da
30950 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d taProviderKey =.
30960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 Reg
30980 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 istryHelper.Crea
30990 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c teSubKey(subKey,
309a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 pa
309c0 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 ckage.DataProvid
309d0 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 erId.ToString(Vs
309e0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 IdFormat),..
309f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30a00 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 whatIf,
30a10 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 verbose))..
30a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
30a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
30a40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61 if (da
30a50 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d taProviderKey ==
30a60 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 null)..
30a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30a80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {..
30a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e
30aa0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f rror = String.Fo
30ab0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
30ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30ad0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f "could no
30ae0 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 t create registr
30af0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 y key: {0}\\{1}"
30b00 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 , key,..
30b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30b20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e package.
30b30 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 DataProviderId.T
30b40 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d oString(VsIdForm
30b50 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 at));....
30b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30b70 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
30b80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
30b90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
30ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
30bb0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 Registr
30bc0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 yHelper.SetValue
30bd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
30be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
30bf0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 ataProviderKey,
30c00 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69 6f null, Descriptio
30c10 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 n, whatIf,..
30c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30c30 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 verbose)
30c40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
30c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d //.
30c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
30c70 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 // NOTE
30c80 3a 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 : This value is
30c90 6e 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 new as of 1.0.83
30ca0 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20 .0. However,..
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30cc0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
30cd0 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 it should only b
30ce0 65 20 73 65 74 20 69 66 20 74 68 65 20 70 61 63 e set if the pac
30cf0 6b 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 kage assembly..
30d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30d10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
30d20 61 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73 65 and all the asse
30d30 6d 62 6c 69 65 73 20 69 74 20 72 65 66 65 72 73 mblies it refers
30d40 20 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a 20 to are being..
30d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30d60 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
30d70 70 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 20 placed into the
30d80 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20 global assembly
30d90 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20 cache...
30da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30db0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 //..
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
30dd0 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 package.GlobalAs
30de0 73 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20 20 semblyCache)..
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30e00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
30e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30e20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c RegistryHel
30e30 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 per.SetValue(..
30e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
30e60 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 ataProviderKey,
30e70 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20 "Assembly",..
30e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30e90 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 pac
30ea0 6b 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d kage.AssemblyNam
30eb0 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20 e.ToString(),..
30ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 w
30ee0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b hatIf, verbose);
30ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
30f00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
30f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30f20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30f40 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 // NOTE: This
30f50 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73 value is new as
30f60 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 of 1.0.83.0...
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30f80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 //..
30f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30fa0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 RegistryHelpe
30fb0 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 r.SetValue(..
30fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30fd0 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f dataPro
30fe0 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f 63 viderKey, "Assoc
30ff0 69 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a 20 iatedSource",..
31000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31010 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 packa
31020 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e ge.DataSourceId.
31030 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 ToString(VsIdFor
31040 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 mat),..
31050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31060 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f whatIf, verbo
31070 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 se);....
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31090 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 RegistryHelper.S
310a0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 etValue(..
310b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
310c0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 dataProvid
310d0 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e erKey, "Invarian
310e0 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e tName", Invarian
310f0 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 tName,..
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31110 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 whatIf, verb
31120 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ose);....
31130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31140 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
31150 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 SetValue(..
31160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31170 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 dataProvi
31180 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c derKey, "Technol
31190 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 ogy",..
311a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
311b0 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 package.AdoNe
311c0 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f tTechnologyId.To
311d0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 String(VsIdForma
311e0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t),..
311f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31200 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
31210 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
31230 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 gistryHelper.Set
31240 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 Value(..
31250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31260 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 dataProvider
31270 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c Key, "CodeBase",
31280 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 fileName, whatI
31290 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f,..
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
312b0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 verbose);....
312c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
312d0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c RegistryHel
312e0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 per.SetValue(..
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31300 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 dataP
31310 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63 roviderKey, "Fac
31320 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 toryService",..
31330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31340 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 packa
31350 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 ge.ServiceId.ToS
31360 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 tring(VsIdFormat
31370 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 ), whatIf,..
31380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31390 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 verbose)
313a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
313b0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 Reg
313c0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 istryHelper.Crea
313d0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f teSubKey(dataPro
313e0 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 viderKey,..
313f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31400 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 "Supporte
31410 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f dObjects\\DataCo
31420 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f nnectionUIContro
31430 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l",..
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31450 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
31460 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
31480 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 gistryHelper.Cre
31490 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 ateSubKey(dataPr
314a0 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 oviderKey,..
314b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
314c0 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 "Support
314d0 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 edObjects\\DataC
314e0 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 onnectionPropert
314f0 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 ies",..
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31510 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f whatIf, verbo
31520 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 se);....
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31540 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 RegistryHelper.C
31550 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 reateSubKey(data
31560 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 ProviderKey,..
31570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31580 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f "Suppo
31590 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 rtedObjects\\Dat
315a0 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f aConnectionSuppo
315b0 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 rt", whatIf,..
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
315d0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 verbos
315e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
315f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 R
31600 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 egistryHelper.Cr
31610 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 eateSubKey(dataP
31620 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 roviderKey,..
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31640 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 "Suppor
31650 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 tedObjects\\Data
31660 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20 ObjectSupport",
31670 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 whatIf,..
31680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31690 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a verbose);..
316a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
316b0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 Regist
316c0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 ryHelper.CreateS
316d0 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 ubKey(dataProvid
316e0 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 erKey,..
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31700 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 "SupportedOb
31710 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53 jects\\DataViewS
31720 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c upport", whatIf,
31730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
31740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 ve
31750 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 rbose);..
31760 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
31770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31780 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. }
31790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
317a0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 return true;..
317b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
317c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f /////////////
317d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
317e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
317f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
31800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
31810 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 private st
31820 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 atic bool Remove
31830 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d VsDataProvider(.
31840 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 . Moc
31850 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f kRegistryKey roo
31860 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 tKey,..
31870 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 Version vsVer
31880 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 sion,..
31890 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 string suffix
318a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 ,.. P
318b0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d ackage package,.
318c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f . boo
318d0 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 l perUser,..
318e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 bool wow
318f0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 64,..
31900 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 bool whatIf,..
31910 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 bool
31920 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 verbose,..
31930 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 ref string
31940 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 error..
31950 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b ).. {
31960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
31970 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e (vsVersion == n
31980 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ull)..
31990 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
319a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e error = "in
319b0 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e valid VS version
319c0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ";..
319d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
319e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ;.. }
319f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
31a00 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d string keyName =
31a10 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 GetVsKeyName(vs
31a20 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c Version, suffix,
31a30 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 perUser, wow64)
31a40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
31a50 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 using (MockRegi
31a60 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 stryKey key = Re
31a70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 gistryHelper.Ope
31a80 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 nSubKey(..
31a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f ro
31aa0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 otKey, keyName,
31ab0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 false, whatIf, v
31ac0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 erbose))..
31ad0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
31ae0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 if (key
31af0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
31b00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31b20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 error = String
31b30 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31b50 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 "could not ope
31b60 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 n registry key:
31b70 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 {0}\\{1}",..
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31b90 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 rootKey, key
31ba0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 Name);....
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
31bc0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
31be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
31bf0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 using (MockReg
31c00 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 istryKey subKey
31c10 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 = RegistryHelper
31c20 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 .OpenSubKey(..
31c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31c40 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 key, "Data
31c50 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65 Providers", true
31c60 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
31c70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e))..
31c80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
31c90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
31ca0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d subKey == null).
31cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
31cc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31ce0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 error = String.F
31cf0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
31d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31d10 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f "could not o
31d20 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 pen registry key
31d30 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 : {0}\\DataProvi
31d40 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 ders",..
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31d60 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 key);....
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31d80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
31d90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
31da0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
31db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31dc0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
31dd0 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 DeleteSubKeyTree
31de0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
31df0 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 subKe
31e00 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 y, package.DataP
31e10 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 roviderId.ToStri
31e20 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d ng(VsIdFormat),.
31e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
31e40 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c whatIf,
31e50 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 verbose);..
31e60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
31e70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
31e80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
31e90 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 rn true;..
31ea0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f }.... /
31eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
31ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
31ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
31ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
31ef0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 //////....
31f00 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 private static
31f10 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 bool ProcessVsD
31f20 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 ataProvider(..
31f30 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 MockRe
31f40 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 gistryKey rootKe
31f50 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,..
31f60 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f Version vsVersio
31f70 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n,..
31f80 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a string suffix,..
31f90 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b Pack
31fa0 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 age package,..
31fb0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object
31fc0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 clientData,..
31fd0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 bool p
31fe0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 erUser,..
31ff0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c bool wow64,
32000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
32010 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e ol throwOnMissin
32020 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g,..
32030 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 bool whatIf,..
32040 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 bool v
32050 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 erbose,..
32060 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 ref string
32070 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 error..
32080 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d ).. {.
32090 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 . Any
320a0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f Pair<string, boo
320b0 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 l> pair = client
320c0 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c Data as AnyPair<
320d0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a string, bool>;..
320e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if
320f0 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d (pair == null).
32100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
32110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32120 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 error = "invalid
32130 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 VS callback dat
32140 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 a";..
32150 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals
32160 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e;..
32170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
32180 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 if (pair.Y)..
32190 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
321a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
321b0 75 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f urn AddVsDataPro
321c0 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 vider(..
321d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 root
321e0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 Key, vsVersion,
321f0 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c suffix, package,
32200 20 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72 pair.X, perUser
32210 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
32220 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20 77 68 wow64, wh
32230 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 atIf, verbose, r
32240 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 ef error);..
32250 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
32260 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 else..
32270 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
32280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
32290 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 rn RemoveVsDataP
322a0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 rovider(..
322b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f ro
322c0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e otKey, vsVersion
322d0 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 , suffix, packag
322e0 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 e, perUser, wow6
322f0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4,..
32300 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 whatIf,
32310 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 verbose, ref err
32320 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 or);..
32330 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }..
32340 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 #endregi
32350 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f on.... //
32360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
323a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
323b0 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 #region Visual
323c0 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48 Studio Package H
323d0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 andling..
323e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
323f0 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 void InitializeV
32400 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 sPackage(..
32410 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e AssemblyN
32420 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 ame assemblyName
32430 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 ,.. b
32440 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 ool globalAssemb
32450 6c 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 lyCache,..
32460 20 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 ref Packag
32470 65 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 e package..
32480 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 )..
32490 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 {..
324a0 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 if (package ==
324b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
324c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
324d0 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 package =
324e0 6e 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a new Package();..
324f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
32500 20 20 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 package.Assemb
32510 6c 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c lyName = assembl
32520 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 yName;..
32530 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e package.
32540 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 GlobalAssemblyCa
32550 63 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65 che = globalAsse
32560 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20 mblyCache;....
32570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 pa
32580 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 ckage.AdoNetTech
32590 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47 nologyId = new G
325a0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 uid(..
325b0 20 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39 "77AB9
325c0 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31 A9D-78B9-4BA7-91
325d0 41 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22 AC-873F5338F1D2"
325e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
325f0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 package.Pa
32600 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75 ckageId = new Gu
32610 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 id(..
32620 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 "DCBE6C
32630 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 8D-0E57-4099-A18
32640 33 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29 3-98FF74C64D9C")
32650 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
32660 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 package.Ser
32670 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 viceId = new Gui
32680 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d(..
32690 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38 "DCBE6C8
326a0 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33 D-0E57-4099-A183
326b0 2d 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b -98FF74C64D9D");
326c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
326d0 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 package.Data
326e0 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47 SourceId = new G
326f0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 uid(..
32700 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41 "0EBAA
32710 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 B6E-CA80-4B4A-8D
32720 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22 DF-CBE6BF058C71"
32730 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
32740 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 package.Da
32750 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e taProviderId = n
32760 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 ew Guid(..
32770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30 "0
32780 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 EBAAB6E-CA80-4B4
32790 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 A-8DDF-CBE6BF058
327a0 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 C70");..
327b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. }
327c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f .... ////
327d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
327e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
327f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
32810 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 ///.... p
32820 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f rivate static bo
32830 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28 ol AddVsPackage(
32840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f .. Mo
32850 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f ckRegistryKey ro
32860 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 otKey,..
32870 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 Version vsVe
32880 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 rsion,..
32890 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 string suffi
328a0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 x,..
328b0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c Package package,
328c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 .. st
328d0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a ring fileName,..
328e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c bool
328f0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 perUser,..
32900 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 bool wow6
32910 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4,..
32920 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 bool whatIf,..
32930 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 bool v
32940 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 erbose,..
32950 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 ref string
32960 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 error..
32970 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d ).. {.
32980 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if
32990 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 (vsVersion == nu
329a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
329b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
329c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 error = "inv
329d0 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 alid VS version"
329e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
329f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
32a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
32a10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i
32a20 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 f (package == nu
32a30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
32a40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
32a50 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 error = "inv
32a60 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 alid VS package"
32a70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
32a80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
32a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }.
32aa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ... s
32ab0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 tring keyName =
32ac0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 GetVsKeyName(vsV
32ad0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 ersion, suffix,
32ae0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b perUser, wow64);
32af0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
32b00 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 using (MockRegis
32b10 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 tryKey key = Reg
32b20 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e istryHelper.Open
32b30 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 SubKey(..
32b40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f roo
32b50 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 tKey, keyName, f
32b60 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 alse, whatIf, ve
32b70 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 rbose))..
32b80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
32b90 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 if (key
32ba0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
32bb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32bd0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e error = String.
32be0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 Format(..
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32c00 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e "could not open
32c10 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b registry key: {
32c20 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 0}\\{1}",..
32c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32c40 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e rootKey, keyN
32c50 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ame);....
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
32c70 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
32c80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }...
32c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
32ca0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 using (MockRegi
32cb0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d stryKey subKey =
32cc0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
32cd0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 OpenSubKey(..
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32cf0 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 key, "Packa
32d00 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 ges", true, what
32d10 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 If, verbose))..
32d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
32d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
32d40 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 if (subKey
32d50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 == null)..
32d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
32d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
32d80 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
32d90 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 = String.Format(
32da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
32db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 "c
32dc0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 ould not open re
32dd0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c gistry key: {0}\
32de0 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 \Packages",..
32df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
32e00 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a key);..
32e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
32e20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
32e30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
32e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
32e60 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 //..
32e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
32e80 20 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a NOTE: *WARNING*
32e90 20 43 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66 Changing any of
32ea0 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 77 69 these values wi
32eb0 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20 ll likely..
32ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
32ed0 2f 20 20 20 20 20 20 20 72 65 71 75 69 72 65 20 / require
32ee0 61 20 6e 65 77 20 22 70 61 63 6b 61 67 65 20 6c a new "package l
32ef0 6f 61 64 20 6b 65 79 22 20 28 50 4c 4b 29 20 74 oad key" (PLK) t
32f00 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 o be..
32f10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 //
32f20 20 20 20 67 65 6e 65 72 61 74 65 64 20 69 6e 20 generated in
32f30 6f 72 64 65 72 20 74 6f 20 70 72 6f 70 65 72 6c order to properl
32f40 79 20 73 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e y support loadin
32f50 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 g the..
32f60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
32f70 20 20 20 20 70 61 63 6b 61 67 65 20 69 6e 74 6f package into
32f80 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 Visual Studio 2
32f90 30 30 38 20 61 6e 64 20 65 61 72 6c 69 65 72 20 008 and earlier
32fa0 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 without..
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
32fc0 20 20 20 20 20 20 74 68 65 20 6d 61 74 63 68 69 the matchi
32fd0 6e 67 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f ng Visual Studio
32fe0 20 53 44 4b 20 62 65 69 6e 67 20 69 6e 73 74 61 SDK being insta
32ff0 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 lled...
33000 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 //
33010 20 20 20 20 50 6c 65 61 73 65 20 72 65 66 65 72 Please refer
33020 20 74 6f 20 74 68 65 20 22 53 51 4c 69 74 65 2e to the "SQLite.
33030 44 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74 Designer\plk.txt
33040 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 " file..
33050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
33060 20 20 20 20 20 66 6f 72 20 74 68 65 20 65 78 69 for the exi
33070 73 74 69 6e 67 20 6f 66 66 69 63 69 61 6c 20 76 sting official v
33080 61 6c 75 65 73 20 61 6e 64 20 75 70 64 61 74 65 alues and update
33090 20 74 68 65 6d 20 69 66 0d 0a 20 20 20 20 20 20 them if..
330a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
330b0 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 necessary
330c0 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77 . Also, the new
330d0 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 61 63 ly generated pac
330e0 6b 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20 kage load..
330f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
33100 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 73 65 / key itse
33110 6c 66 2c 20 77 68 69 63 68 20 69 73 20 61 20 31 lf, which is a 1
33120 32 38 20 63 68 61 72 61 63 74 65 72 20 61 6c 70 28 character alp
33130 68 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20 20 hanumeric..
33140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
33150 2f 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 / string,
33160 6d 75 73 74 20 62 65 20 70 6c 61 63 65 64 20 69 must be placed i
33170 6e 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 73 n the resource s
33180 74 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20 tring named..
33190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
331a0 20 2f 2f 20 20 20 20 20 20 20 22 34 30 30 22 20 // "400"
331b0 69 6e 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44 in the "SQLite.D
331c0 65 73 69 67 6e 65 72 5c 56 53 50 61 63 6b 61 67 esigner\VSPackag
331d0 65 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a 20 20 e.resx" file..
331e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
331f0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 // and t
33200 68 65 6e 20 74 68 65 20 64 65 73 69 67 6e 65 72 hen the designer
33210 20 61 73 73 65 6d 62 6c 79 20 69 74 73 65 6c 66 assembly itself
33220 20 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20 must be..
33230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
33240 20 20 20 20 20 20 20 72 65 63 6f 6d 70 69 6c 65 recompile
33250 64 2e 20 20 41 73 20 6f 66 20 74 68 69 73 20 77 d. As of this w
33260 72 69 74 69 6e 67 20 28 69 6e 20 46 65 62 72 75 riting (in Febru
33270 61 72 79 20 32 30 31 32 29 2c 0d 0a 20 20 20 20 ary 2012),..
33280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33290 2f 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c // the fol
332a0 6c 6f 77 69 6e 67 20 55 52 4c 20 69 73 20 74 68 lowing URL is th
332b0 65 20 70 72 6f 70 65 72 20 70 6c 61 63 65 20 74 e proper place t
332c0 6f 20 67 65 6e 65 72 61 74 65 0d 0a 20 20 20 20 o generate..
332d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
332e0 2f 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 // package
332f0 20 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20 load keys:..
33300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33310 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 //..
33320 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 //
33330 20 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69 http://msdn.mi
33340 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75 crosoft.com/en-u
33350 73 2f 76 73 74 75 64 69 6f 2f 63 63 36 35 35 37 s/vstudio/cc6557
33360 39 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 95..
33370 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 //..
33380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33390 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 using (MockRegis
333a0 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 tryKey packageKe
333b0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y =..
333c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
333d0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
333e0 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 CreateSubKey(sub
333f0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 Key,..
33400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33410 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 package.Packag
33420 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 eId.ToString(VsI
33430 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 dFormat), whatIf
33440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
33450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
33460 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 erbose))..
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
33480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
33490 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 if (pac
334a0 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 kageKey == null)
334b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
334c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
334d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
334e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
334f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
33500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33520 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 "could not crea
33530 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a te registry key:
33540 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 {0}\\{1}",..
33550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33560 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 key
33570 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 , package.Packag
33580 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 eId.ToString(VsI
33590 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 dFormat));....
335a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
335b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
335c0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
335d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
335e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
335f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
33600 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 gistryHelper.Set
33610 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 Value(packageKey
33620 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 , null,..
33630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33640 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d String.Form
33650 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 at("{0} Designer
33660 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 Package", Proje
33670 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 ctName),..
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33690 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 whatIf, ve
336a0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 rbose);....
336b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
336c0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 RegistryHelpe
336d0 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 r.SetValue(packa
336e0 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d geKey, "Class",.
336f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
33700 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 "SQ
33710 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 Lite.Designer.SQ
33720 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68 LitePackage", wh
33730 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d atIf, verbose);.
33740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
33750 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 Regis
33760 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c tryHelper.SetVal
33770 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 ue(packageKey, "
33780 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 CodeBase",..
33790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
337a0 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName
337b0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
337c0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
337d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 R
337e0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 egistryHelper.Se
337f0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 tValue(packageKe
33800 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68 y, "ID", 400, wh
33810 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 atIf,..
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33830 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a verbose);....
33840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33850 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 string d
33860 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 53 79 irectory = GetSy
33870 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 77 6f stemDirectory(wo
33880 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 w64);....
33890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
338a0 20 69 66 20 28 64 69 72 65 63 74 6f 72 79 20 3d if (directory =
338b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
338c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
338d0 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d directory =
338e0 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a String.Empty;..
338f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
33900 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 Regist
33910 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 ryHelper.SetValu
33920 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 e(packageKey, "I
33930 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d nprocServer32",.
33940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
33950 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74 Pat
33960 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 h.Combine(direct
33970 6f 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c ory, "mscoree.dl
33980 6c 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 l"),..
33990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
339a0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 whatIf, verbos
339b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e);....
339c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 R
339d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 egistryHelper.Se
339e0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 tValue(packageKe
339f0 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 y, "CompanyName"
33a00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
33a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 "
33a20 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 http://system.da
33a30 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c ta.sqlite.org/",
33a40 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
33a50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
33a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
33a70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 gistryHelper.Set
33a80 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 Value(packageKey
33a90 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d , "MinEdition",.
33aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
33ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 74 "st
33ac0 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c andard", whatIf,
33ad0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 verbose);....
33ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33af0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 RegistryHe
33b00 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 lper.SetValue(pa
33b10 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 ckageKey, "Produ
33b20 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 ctName",..
33b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33b40 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 String.For
33b50 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 mat("{0} Designe
33b60 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a r Package", Proj
33b70 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 ectName),..
33b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33b90 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 whatIf, v
33ba0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 erbose);....
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33bc0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 RegistryHelp
33bd0 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b er.SetValue(pack
33be0 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 ageKey, "Product
33bf0 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 Version",..
33c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33c10 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68 "1.0", wh
33c20 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d atIf, verbose);.
33c30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
33c40 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 using
33c50 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 (MockRegistryKe
33c60 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a y toolboxKey =..
33c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33c90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 RegistryHelper.C
33ca0 72 65 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b reateSubKey(pack
33cb0 61 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 ageKey,..
33cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33cd0 20 20 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f "Toolbo
33ce0 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 x", whatIf, verb
33cf0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ose))..
33d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
33d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
33d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
33d30 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 (toolboxKey ==
33d40 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 null)..
33d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33d60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
33d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33d80 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 error = St
33d90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 ring.Format(..
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33dc0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 "could not cre
33dd0 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 ate registry key
33de0 3a 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 : " +..
33df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33e00 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c "{0}\
33e10 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 \Toolbox", packa
33e20 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 geKey);....
33e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33e40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
33e50 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 n false;..
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33e70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
33e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33e90 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 RegistryH
33ea0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d elper.SetValue(.
33eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33ed0 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 toolboxKey, "De
33ee0 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c fault Items", 3,
33ef0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 whatIf,..
33f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33f10 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 verbos
33f20 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e);..
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }..
33f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33f50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }..
33f60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
33f70 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e usin
33f80 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b g (MockRegistryK
33f90 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 ey subKey = Regi
33fa0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 stryHelper.OpenS
33fb0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 ubKey(..
33fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33fd0 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 key, "Menus", tr
33fe0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 ue, whatIf, verb
33ff0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 ose))..
34000 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
34010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
34020 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c (subKey == null
34030 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
34040 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
34050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34060 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 error = String
34070 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 .Format(..
34080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34090 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 "could not
340a0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b open registry k
340b0 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c ey: {0}\\Menus",
340c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
340d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 ke
340e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 y);....
340f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r
34100 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 eturn false;..
34110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34120 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
34130 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 Regis
34140 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c tryHelper.SetVal
34150 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue(..
34160 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 sub
34170 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 Key, package.Pac
34180 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 kageId.ToString(
34190 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 VsIdFormat),..
341a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
341b0 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33 ", 1000, 3
341c0 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f ", whatIf, verbo
341d0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 se);..
341e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
341f0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 using
34200 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 (MockRegistryKe
34210 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 y subKey = Regis
34220 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 tryHelper.OpenSu
34230 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 bKey(..
34240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b k
34250 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 ey, "Services",
34260 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 true, whatIf, ve
34270 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 rbose))..
34280 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
34290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
342a0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 if (subKey == nu
342b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll)..
342c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
342d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
342e0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 error = Stri
342f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
34300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34310 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e "could n
34320 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 ot open registry
34330 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 key: {0}\\Servi
34340 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 ces",..
34350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34360 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 key);....
34370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34380 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false
34390 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ;..
343a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
343b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
343c0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 using (MockRegis
343d0 74 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65 tryKey serviceKe
343e0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y =..
343f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34400 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e RegistryHelper.
34410 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 CreateSubKey(sub
34420 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 Key,..
34430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34440 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 package.Servic
34450 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 eId.ToString(VsI
34460 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 dFormat), whatIf
34470 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
34480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v
34490 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 erbose))..
344a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
344b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
344c0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 65 72 if (ser
344d0 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 viceKey == null)
344e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
344f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
34500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34510 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
34520 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
34530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34550 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 "could not crea
34560 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a te registry key:
34570 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 {0}\\{1}",..
34580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34590 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 key
345a0 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 , package.Servic
345b0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 eId.ToString(VsI
345c0 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 dFormat));....
345d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
345e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
345f0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 false;..
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }....
34620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re
34630 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 gistryHelper.Set
34640 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 Value(serviceKey
34650 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 , null,..
34660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34670 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 package.Pac
34680 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 kageId.ToString(
34690 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 VsIdFormat), wha
346a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf,..
346b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
346c0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 verbose);....
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
346e0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 RegistryH
346f0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 elper.SetValue(s
34700 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 erviceKey, "Name
34710 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
34720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34730 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b String.Format("{
34740 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65 72 76 0} Designer Serv
34750 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d ice", ProjectNam
34760 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e),..
34770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34780 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 whatIf, verbose
34790 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 );..
347a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
347b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }..
347c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
347d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
347e0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 n true;..
347f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f }.... //
34800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
34810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
34820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
34830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
34840 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 /////....
34850 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
34860 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 bool RemoveVsPac
34870 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 kage(..
34880 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
34890 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 ey rootKey,..
348a0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e Version
348b0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 vsVersion,..
348c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
348d0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 suffix,..
348e0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 Package pac
348f0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 kage,..
34900 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c bool perUser,
34910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
34920 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 ol wow64,..
34930 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f bool thro
34940 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 wOnMissing,..
34950 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 bool wh
34960 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 atIf,..
34970 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c bool verbose,
34980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
34990 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a f string error..
349a0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
349b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
349c0 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 if (vsVers
349d0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 ion == null)..
349e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
349f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
34a00 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 or = "invalid VS
34a10 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 version";..
34a20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
34a30 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
34a40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
34a50 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b if (pack
34a60 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 age == null)..
34a70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
34a80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err
34a90 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 or = "invalid VS
34aa0 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 package";..
34ab0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
34ac0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 rn false;..
34ad0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
34ae0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b string k
34af0 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 eyName = GetVsKe
34b00 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c yName(vsVersion,
34b10 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 suffix, perUser
34b20 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 , wow64);....
34b30 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 using (
34b40 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 MockRegistryKey
34b50 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 key = RegistryHe
34b60 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 lper.OpenSubKey(
34b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
34b80 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b rootKey, k
34b90 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 eyName, false, w
34ba0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 hatIf, verbose))
34bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d .. {.
34bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
34bd0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c if (key == null
34be0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
34bf0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
34c00 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error
34c10 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 = String.Format(
34c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
34c30 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 "could
34c40 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 not open regist
34c50 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d ry key: {0}\\{1}
34c60 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ",..
34c70 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 root
34c80 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a Key, keyName);..
34c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
34ca0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal
34cb0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se;..
34cc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
34cd0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 using
34ce0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 (MockRegistryKey
34cf0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 subKey = Regist
34d00 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 ryHelper.OpenSub
34d10 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 Key(..
34d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 ke
34d30 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 y, "Packages", t
34d40 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 rue, whatIf, ver
34d50 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 bose))..
34d60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
34d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
34d80 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c f (subKey == nul
34d90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 l)..
34da0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
34db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34dc0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e error = Strin
34dd0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 g.Format(..
34de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34df0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f "could no
34e00 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 t open registry
34e10 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 key: {0}\\Packag
34e20 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 es",..
34e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34e40 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 key);....
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34e60 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b return false;
34e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
34e80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }....
34e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 R
34ea0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 egistryHelper.De
34eb0 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d leteSubKeyTree(.
34ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
34ed0 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c subKey,
34ee0 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 package.Package
34ef0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 Id.ToString(VsId
34f00 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 Format),..
34f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34f20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 whatIf, verbos
34f30 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e);..
34f40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }....
34f50 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 using
34f60 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 (MockRegistryKey
34f70 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 subKey = Regist
34f80 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 ryHelper.OpenSub
34f90 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 Key(..
34fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 ke
34fb0 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 y, "Menus", true
34fc0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
34fd0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e))..
34fe0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 if (
35000 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d subKey == null).
35010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
35020 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
35030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35040 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 error = String.F
35050 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 ormat(..
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35070 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f "could not o
35080 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 pen registry key
35090 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a : {0}\\Menus",..
350a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
350b0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 key)
350c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
350d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret
350e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 urn false;..
350f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35100 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }....
35110 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 Registr
35120 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61 yHelper.DeleteVa
35130 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 lue(..
35140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 su
35150 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 bKey, package.Pa
35160 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 ckageId.ToString
35170 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 (VsIdFormat),..
35180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35190 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 throwOnMi
351a0 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 ssing, whatIf, v
351b0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 erbose);..
351c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 u
351e0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 sing (MockRegist
351f0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 ryKey subKey = R
35200 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 egistryHelper.Op
35210 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 enSubKey(..
35220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35230 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 key, "Service
35240 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 s", true, whatIf
35250 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 , verbose))..
35260 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
35270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35280 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d if (subKey =
35290 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 = null)..
352a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a {..
352b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
352c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 error =
352d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a String.Format(..
352e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
352f0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 "cou
35300 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 ld not open regi
35310 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 stry key: {0}\\S
35320 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 ervices",..
35330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35340 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a key);....
35350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35360 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f
35370 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 alse;..
35380 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }....
35390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
353a0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 RegistryHelp
353b0 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 er.DeleteSubKeyT
353c0 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ree(..
353d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 su
353e0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 bKey, package.Se
353f0 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 rviceId.ToString
35400 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 (VsIdFormat),..
35410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35420 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 whatIf, v
35430 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 erbose);..
35440 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
35450 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
35460 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return
35470 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 true;..
35480 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f }.... ///
35490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
354a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
354b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
354c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
354d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ////....
354e0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 private static b
354f0 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63 ool ProcessVsPac
35500 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 kage(..
35510 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b MockRegistryK
35520 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 ey rootKey,..
35530 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e Version
35540 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 vsVersion,..
35550 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 string
35560 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 suffix,..
35570 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 Package pac
35580 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 kage,..
35590 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 object client
355a0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 Data,..
355b0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c bool perUser,
355c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f .. bo
355d0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 ol wow64,..
355e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f bool thro
355f0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 wOnMissing,..
35600 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 bool wh
35610 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 atIf,..
35620 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c bool verbose,
35630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re
35640 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a f string error..
35650 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 )..
35660 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 {..
35670 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 AnyPair<st
35680 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 ring, bool> pair
35690 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 = clientData as
356a0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c AnyPair<string,
356b0 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 bool>;....
356c0 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 if (pair
356d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 == null)..
356e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 {..
356f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d error =
35700 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c "invalid VS cal
35710 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 lback data";..
35720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re
35730 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 turn false;..
35740 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }....
35750 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 if (pa
35760 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 ir.Y)..
35770 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
35780 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 return Add
35790 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 VsPackage(..
357a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
357b0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 rootKey, vsVersi
357c0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b on, suffix, pack
357d0 61 67 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 age, pair.X, per
357e0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 User,..
357f0 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 wow64
35800 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 , whatIf, verbos
35810 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a e, ref error);..
35820 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
35830 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d else.
35840 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
35850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35860 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 return RemoveVsP
35870 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 ackage(..
35880 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f roo
35890 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c tKey, vsVersion,
358a0 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 suffix, package
358b0 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 , perUser, wow64
358c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
358d0 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 throwOnMi
358e0 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 ssing, whatIf, v
358f0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f erbose, ref erro
35900 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 r);..
35910 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }..
35920 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f #endregio
35930 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 n.. #endr
35940 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
35950 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
35960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35990 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
359a0 20 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c #region Appl
359b0 69 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f ication Entry Po
359c0 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 int.. [Me
359d0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 thodImpl(MethodI
359e0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c mplOptions.NoInl
359f0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 ining)]..
35a00 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 private static
35a10 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 int Main(..
35a20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 string[]
35a30 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 args..
35a40 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a ).. {..
35a50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d try.
35a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a . {..
35a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35a80 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f Configuration co
35a90 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 nfiguration = nu
35aa0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ll;..
35ab0 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f string erro
35ac0 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 r = null;....
35ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f ///
35ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35b30 23 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65 72 #region Debugger
35b40 20 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 Hook..
35b50 20 20 20 20 20 20 20 69 66 20 28 45 6e 76 69 72 if (Envir
35b60 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f onment.GetEnviro
35b70 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22 42 nmentVariable("B
35b80 72 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d reak") != null).
35b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
35ba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {..
35bb0 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e Console.
35bc0 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 WriteLine(..
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35be0 20 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65 "Attach a de
35bf0 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 bugger to proces
35c00 73 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 s {0} and " +..
35c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35c20 20 20 20 20 20 20 20 22 70 72 65 73 73 20 61 6e "press an
35c30 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 y key to continu
35c40 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 e.",..
35c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 Pr
35c60 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 ocess.GetCurrent
35c70 50 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a Process().Id);..
35c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
35c90 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 try..
35ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
35cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
35cc0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c Consol
35cd0 65 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b e.ReadKey(true);
35ce0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 /* throw */..
35cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35d00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }..
35d10 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 catch (
35d20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e InvalidOperation
35d30 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f Exception) // Co
35d40 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 nsole.ReadKey..
35d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35d60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 {..
35d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
35d80 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 do nothing...
35d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35da0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }....
35db0 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 Debug
35dc0 67 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 ger.Break();..
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }.
35de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
35df0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 #endregion....
35e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
35e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
35e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a //////////////..
35e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
35e60 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e #region Comman
35e70 64 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e d Line Processin
35e80 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 g..
35e90 20 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72 if (!Configur
35ea0 61 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d ation.FromArgs(.
35eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
35ec0 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74 args, t
35ed0 72 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 rue, ref configu
35ee0 72 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f ration, ref erro
35ef0 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 r) ||..
35f00 20 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 !Conf
35f10 69 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 iguration.Proces
35f20 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s(..
35f30 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 args
35f40 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c , configuration,
35f50 20 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 true, ref error
35f60 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 ) ||..
35f70 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 !Confi
35f80 67 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 guration.CheckRu
35f90 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 ntimeVersion(..
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35fb0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 configura
35fc0 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 tion, true, ref
35fd0 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 error))..
35fe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
35ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36000 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 TraceOps.ShowMes
36010 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 sage(TracePriori
36020 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 ty.Highest,..
36030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36040 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 debugCallba
36050 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 ck, traceCallbac
36060 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c k, thisAssembly,
36070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
36080 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c error,
36090 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 traceCategory,
360a0 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e MessageBoxButton
360b0 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 s.OK,..
360c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d M
360d0 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 essageBoxIcon.Er
360e0 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 ror);....
360f0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 Tra
36100 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 ceOps.DebugAndTr
36110 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 ace(TracePriorit
36120 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 y.MediumHigh,..
36130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36140 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c debugCall
36150 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 back, traceCallb
36160 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c ack, "Failure.",
36170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
36180 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
36190 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 ategory);....
361a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
361b0 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 return 1; /* FA
361c0 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 ILURE */..
361d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }..
361e0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e #en
361f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 dregion....
36200 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f /////
36210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 //////////....
36250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 us
36260 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 ing (MockRegistr
36270 79 20 72 65 67 69 73 74 72 79 20 3d 20 6e 65 77 y registry = new
36280 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a MockRegistry(..
36290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
362a0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 configur
362b0 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61 ation.WhatIf, fa
362c0 6c 73 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 lse, false))..
362d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d {.
362e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
362f0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 72 #region Cor
36300 65 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d 65 20 e Assembly Name
36310 43 68 65 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 Check..
36320 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
36330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36340 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 74 // NOTE: Do t
36350 68 69 73 20 66 69 72 73 74 2c 20 62 65 66 6f 72 his first, befor
36360 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63 68 61 e making any cha
36370 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 nges to the..
36380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36390 20 2f 2f 20 20 20 20 20 20 20 73 79 73 74 65 6d // system
363a0 2c 20 62 65 63 61 75 73 65 20 69 74 20 77 69 6c , because it wil
363b0 6c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 l throw an excep
363c0 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20 20 20 tion if the..
363d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
363e0 20 2f 2f 20 20 20 20 20 20 20 66 69 6c 65 20 6e // file n
363f0 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 70 ame does not rep
36400 72 65 73 65 6e 74 20 61 20 76 61 6c 69 64 20 6d resent a valid m
36410 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 anaged..
36420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
36430 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 0d 0a assembly...
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36450 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
36460 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 Asse
36470 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 mblyName coreAss
36480 65 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 emblyName =..
36490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
364a0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d AssemblyNam
364b0 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d e.GetAssemblyNam
364c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e(..
364d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
364e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f configuration.Co
364f0 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 reFileName); /*
36500 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 throw */....
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36520 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73 AssemblyName des
36530 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d ignerAssemblyNam
36540 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e =..
36550 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 Ass
36560 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 emblyName.GetAss
36570 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 emblyName(..
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36590 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 configur
365a0 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 ation.DesignerFi
365b0 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f leName); /* thro
365c0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 w */..
365d0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 #endre
365e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 gion....
365f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
36600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36630 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
36640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 #
36650 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 20 44 69 region System Di
36660 72 65 63 74 6f 72 79 20 43 68 65 63 6b 0d 0a 20 rectory Check..
36670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36680 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 //..
36690 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f // NO
366a0 54 45 3a 20 47 65 74 74 69 6e 67 20 74 68 65 20 TE: Getting the
366b0 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 system directory
366c0 20 76 61 6c 75 65 20 68 65 72 65 20 73 65 72 76 value here serv
366d0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 es..
366e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 //
366f0 20 74 77 6f 20 70 75 72 70 6f 73 65 73 3a 0d 0a two purposes:..
36700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36710 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 //..
36720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 //
36730 20 20 20 20 20 31 2e 20 49 74 20 65 6e 61 62 6c 1. It enabl
36740 65 73 20 75 73 20 74 6f 20 6c 6f 67 20 74 68 65 es us to log the
36750 20 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 system director
36760 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y..
36770 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 //
36780 20 20 20 76 61 6c 75 65 20 76 65 72 79 20 65 61 value very ea
36790 72 6c 79 20 69 6e 20 74 68 65 20 69 6e 73 74 61 rly in the insta
367a0 6c 6c 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 0d llation process.
367b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
367c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 //
367d0 20 28 69 2e 65 2e 20 65 76 65 6e 20 74 68 6f 75 (i.e. even thou
367e0 67 68 20 74 68 65 20 76 61 6c 75 65 20 69 74 73 gh the value its
367f0 65 6c 66 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 elf is not..
36800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36810 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 65 65 64 // need
36820 65 64 20 75 6e 74 69 6c 20 6d 75 63 68 20 6c 61 ed until much la
36830 74 65 72 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 ter)...
36840 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 //..
36850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36860 20 20 20 2f 2f 20 20 20 20 20 20 20 32 2e 20 53 // 2. S
36870 69 6e 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 ince the value i
36880 73 20 63 61 63 68 65 64 2c 20 69 74 20 70 72 65 s cached, it pre
36890 76 65 6e 74 73 20 61 6e 0d 0a 20 20 20 20 20 20 vents an..
368a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f //
368b0 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70 74 except
368c0 69 6f 6e 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 ion from being t
368d0 68 72 6f 77 6e 20 6d 75 63 68 20 6c 61 74 65 72 hrown much later
368e0 20 64 75 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 during..
368f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 //
36900 20 20 20 20 20 20 20 20 20 74 68 65 20 69 6e 73 the ins
36910 74 61 6c 6c 20 77 68 65 6e 20 74 68 65 20 76 61 tall when the va
36920 6c 75 65 20 69 73 20 71 75 65 72 69 65 64 20 61 lue is queried a
36930 67 61 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 gain..
36940 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 //
36950 20 20 20 20 20 20 28 69 2e 65 2e 20 77 69 74 68 (i.e. with
36960 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 the same value
36970 66 6f 72 20 74 68 65 20 22 77 6f 77 36 34 22 0d for the "wow64".
36980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
36990 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 //
369a0 20 70 61 72 61 6d 65 74 65 72 29 2e 0d 0a 20 20 parameter)...
369b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
369c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 //..
369d0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f TraceO
369e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 ps.DebugAndTrace
369f0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d (TracePriority.M
36a00 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 ediumLow,..
36a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36a20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b debugCallback
36a30 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c , traceCallback,
36a40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d String.Format(.
36a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
36a60 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d "System
36a70 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 7b 30 directory is {0
36a80 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 }.", ForDisplay(
36a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
36aa0 20 20 20 20 20 20 20 20 20 20 47 65 74 53 79 73 GetSys
36ab0 74 65 6d 44 69 72 65 63 74 6f 72 79 28 63 6f 6e temDirectory(con
36ac0 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 figuration.Wow64
36ad0 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ))),..
36ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr
36af0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 20 2f 2a aceCategory); /*
36b00 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 throw */..
36b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 #
36b20 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 endregion....
36b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36b40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
36b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
36b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36b90 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 #region .NET
36ba0 20 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 Framework / Vis
36bb0 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d ual Studio Data.
36bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
36bd0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 Package pac
36be0 6b 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 kage = null;..
36bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36c00 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 FrameworkList
36c10 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 frameworkList =
36c20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 null;..
36c30 20 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 VsLis
36c40 74 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b t vsList = null;
36c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
36c60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f ////////
36c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36ca0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ///....
36cb0 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 Initi
36cc0 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 64 alizeVsPackage(d
36cd0 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e esignerAssemblyN
36ce0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ame,..
36cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
36d00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 nfiguration.HasF
36d10 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 lags(..
36d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36d30 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e InstallFlags.
36d40 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 GlobalAssemblyCa
36d50 63 68 65 2c 20 74 72 75 65 29 20 26 26 0d 0a 20 che, true) &&..
36d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36d70 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 configura
36d80 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a tion.HasFlags(..
36d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36da0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 Inst
36db0 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 allFlags.VsPacka
36dc0 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 geGlobalAssembly
36dd0 43 61 63 68 65 2c 20 74 72 75 65 29 2c 0d 0a 20 Cache, true),..
36de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36df0 20 20 20 20 20 20 20 72 65 66 20 70 61 63 6b 61 ref packa
36e00 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ge);....
36e10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f ////
36e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
36e50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 ///////....
36e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 I
36e70 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f nitializeFramewo
36e80 72 6b 4c 69 73 74 28 63 6f 6e 66 69 67 75 72 61 rkList(configura
36e90 74 69 6f 6e 2e 50 65 72 55 73 65 72 20 3f 0d 0a tion.PerUser ?..
36ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36eb0 20 20 20 20 20 20 20 20 72 65 67 69 73 74 72 79 registry
36ec0 2e 43 75 72 72 65 6e 74 55 73 65 72 20 3a 20 72 .CurrentUser : r
36ed0 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 egistry.LocalMac
36ee0 68 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 hine,..
36ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
36f00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 onfiguration, re
36f10 66 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29 f frameworkList)
36f20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
36f30 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c Initial
36f40 69 7a 65 56 73 4c 69 73 74 28 63 6f 6e 66 69 67 izeVsList(config
36f50 75 72 61 74 69 6f 6e 2e 50 65 72 55 73 65 72 20 uration.PerUser
36f60 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ?..
36f70 20 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73 regis
36f80 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 20 try.CurrentUser
36f90 3a 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c : registry.Local
36fa0 4d 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20 20 20 Machine,..
36fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36fc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c configuration,
36fd0 20 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 ref vsList);..
36fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36ff0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d #endregion...
37000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
37010 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////
37020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37050 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ....
37060 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 #region
37070 53 68 61 72 65 64 20 43 6c 69 65 6e 74 20 44 61 Shared Client Da
37080 74 61 20 43 72 65 61 74 69 6f 6e 0d 0a 20 20 20 ta Creation..
37090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
370a0 20 6f 62 6a 65 63 74 20 64 69 72 65 63 74 6f 72 object director
370b0 79 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 yData = new AnyP
370c0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c air<string, bool
370d0 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 >(..
370e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 conf
370f0 69 67 75 72 61 74 69 6f 6e 2e 44 69 72 65 63 74 iguration.Direct
37100 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 ory, configurati
37110 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a on.Install);....
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37130 20 20 20 20 6f 62 6a 65 63 74 20 66 69 6c 65 4e object fileN
37140 61 6d 65 44 61 74 61 20 3d 20 6e 65 77 20 41 6e ameData = new An
37150 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f yPair<string, bo
37160 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 ol>(..
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f co
37180 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 nfiguration.Desi
37190 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f gnerFileName, co
371a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 nfiguration.Inst
371b0 61 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 all);..
371c0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 #endr
371d0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 egion....
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f ///
371f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
37220 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 ////////....
37230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37240 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43 #region .NET GAC
37250 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d Install/Remove.
37260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
37270 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 if (configu
37280 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 ration.HasFlags(
37290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
372a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e In
372b0 73 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f 62 61 stallFlags.Globa
372c0 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 lAssemblyCache,
372d0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 true))..
372e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
372f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37300 20 20 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 Publish p
37310 75 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a ublish = null;..
37320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
37330 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 if (!c
37340 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 onfiguration.Wha
37350 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 tIf)..
37360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37370 20 20 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 publish = new
37380 50 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 Publish();....
37390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
373a0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 if (config
373b0 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 uration.Install)
373c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
373d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 {..
373e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
373f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f if (!co
37400 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 nfiguration.What
37410 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 If)..
37420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37430 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f /* throw */
37440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
37450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37460 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 publish.GacIns
37470 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 tall(configurati
37480 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 on.CoreFileName)
37490 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ;....
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
374b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
374c0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 ndTrace(TracePri
374d0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a ority.Highest,..
374e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37500 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 debugCallback, t
37510 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 raceCallback, St
37520 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 ring.Format(..
37530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 "G
37550 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d acInstall: assem
37560 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d blyPath = {0}",.
37570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37590 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 ForDisplay(conf
375a0 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 iguration.CoreFi
375b0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 leName)),..
375c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
375d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
375e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 Category);....
375f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37600 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f if (co
37610 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 73 4c 69 nfiguration.IsLi
37620 6e 71 53 75 70 70 6f 72 74 65 64 28 29 29 0d 0a nqSupported())..
37630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 {..
37650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i
37670 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f f (!configuratio
37680 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 n.WhatIf)..
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
376a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
376b0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 * throw */..
376c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
376e0 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 publish.GacInsta
376f0 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ll(configuration
37700 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d .LinqFileName);.
37710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
37720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37730 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 TraceOps.Debu
37740 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 gAndTrace(TraceP
37750 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c riority.Highest,
37760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
37770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37780 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 debugCallb
37790 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 ack, traceCallba
377a0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 ck, String.Forma
377b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t(..
377c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
377d0 20 20 20 20 20 20 20 20 22 47 61 63 49 6e 73 74 "GacInst
377e0 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 all: assemblyPat
377f0 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 h = {0}",..
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 F
37820 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 orDisplay(config
37830 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 uration.LinqFile
37840 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 Name)),..
37850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37860 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 tra
37870 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 ceCategory);..
37880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37890 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }....
378a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
378b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 if (c
378c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 onfiguration.Has
378d0 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 Flags(..
378e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
378f0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 Inst
37900 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 allFlags.VsPacka
37910 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 geGlobalAssembly
37920 43 61 63 68 65 2c 20 74 72 75 65 29 29 0d 0a 20 Cache, true))..
37930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37940 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
37950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
37970 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e (!configuration
37980 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 .WhatIf)..
37990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
379a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a /*
379b0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 throw */..
379c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
379d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
379e0 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c ublish.GacInstal
379f0 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e l(configuration.
37a00 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 DesignerFileName
37a10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 );....
37a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37a30 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 TraceOps.D
37a40 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 ebugAndTrace(Tra
37a50 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 cePriority.Highe
37a60 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 st,..
37a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37a80 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 debugCa
37a90 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c llback, traceCal
37aa0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f lback, String.Fo
37ab0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 rmat(..
37ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37ad0 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49 "GacI
37ae0 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 nstall: assembly
37af0 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 Path = {0}",..
37b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37b20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e ForDisplay(con
37b30 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 figuration.Desig
37b40 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a nerFileName)),..
37b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37b70 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 traceCategor
37b80 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y);..
37b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37ba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
37bb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }..
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37bd0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 else..
37be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37bf0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 {..
37c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37c10 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 if (configur
37c20 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d ation.HasFlags(.
37c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
37c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37c50 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 InstallFlag
37c60 73 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 s.VsPackageGloba
37c70 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 lAssemblyCache,
37c80 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 true))..
37c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37ca0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 {..
37cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37cc0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 if (!conf
37cd0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 iguration.WhatIf
37ce0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )..
37cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37d00 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 /* throw
37d10 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 */..
37d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37d30 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e publish.
37d40 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 GacRemove(config
37d50 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 uration.Designer
37d60 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 FileName);....
37d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 Tr
37d90 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 aceOps.DebugAndT
37da0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 race(TracePriori
37db0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 ty.Highest,..
37dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37de0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 debugCallback,
37df0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 traceCallback, S
37e00 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 tring.Format(..
37e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37e30 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 "GacRemove: a
37e40 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 ssemblyPath = {0
37e50 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }",..
37e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37e70 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 ForDisp
37e80 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f lay(configuratio
37e90 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 n.DesignerFileNa
37ea0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 me)),..
37eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37ec0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 trace
37ed0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 Category);..
37ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37ef0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }....
37f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37f10 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e if (con
37f20 66 69 67 75 72 61 74 69 6f 6e 2e 49 73 4c 69 6e figuration.IsLin
37f30 71 53 75 70 70 6f 72 74 65 64 28 29 29 0d 0a 20 qSupported())..
37f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37f50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 {..
37f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if
37f80 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e (!configuration
37f90 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 .WhatIf)..
37fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a /*
37fc0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 throw */..
37fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
37ff0 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 ublish.GacRemove
38000 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c (configuration.L
38010 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d inqFileName);...
38020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
38030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38040 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 TraceOps.DebugA
38050 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 ndTrace(TracePri
38060 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a ority.Highest,..
38070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38090 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
380a0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
380b0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 , String.Format(
380c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
380e0 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65 "GacRemove
380f0 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d : assemblyPath =
38100 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 {0}",..
38110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38120 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 ForD
38130 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 isplay(configura
38140 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d tion.LinqFileNam
38150 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 e)),..
38160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38170 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 traceC
38180 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 ategory);..
38190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
381a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }....
381b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
381c0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e if (!con
381d0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 figuration.WhatI
381e0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 f)..
381f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38200 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d /* throw */.
38210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
38220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38230 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f publish.GacRemo
38240 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ve(configuration
38250 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d .CoreFileName);.
38260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 T
38280 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 raceOps.DebugAnd
38290 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 Trace(TracePrior
382a0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 ity.Highest,..
382b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
382c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
382d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 bugCallback, tra
382e0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 ceCallback, Stri
382f0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 ng.Format(..
38300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38310 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63 "Gac
38320 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79 Remove: assembly
38330 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 Path = {0}",..
38340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f Fo
38360 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 rDisplay(configu
38370 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e ration.CoreFileN
38380 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 ame)),..
38390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
383a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 traceCat
383b0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 egory);..
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
383d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }..
383e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }..
383f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 #
38400 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 endregion....
38410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38420 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ///////////////
38430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
38450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a ////////////....
38460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38470 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 #region .NET
38480 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 AssemblyFolders
38490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
384a0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 if (config
384b0 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 uration.HasFlags
384c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 (..
384d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 I
384e0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73 73 65 nstallFlags.Asse
384f0 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74 72 75 mblyFolders, tru
38500 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e))..
38510 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 {..
38520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38530 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 if (!ForEach
38540 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 FrameworkRegistr
38550 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 y(registry,..
38560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38570 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 fra
38580 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 meworkList, Proc
38590 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 essAssemblyFolde
385a0 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rs,..
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
385c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 configurati
385d0 6f 6e 2e 52 65 67 69 73 74 72 79 56 65 72 73 69 on.RegistryVersi
385e0 6f 6e 2c 20 64 69 72 65 63 74 6f 72 79 44 61 74 on, directoryDat
385f0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 a,..
38600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38610 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio
38620 6e 2e 50 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 n.PerUser,..
38630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38640 20 20 20 20 20 20 20 20 20 20 20 20 4e 65 74 46 NetF
38650 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 xIs32BitOnly ||
38660 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f configuration.Wo
38670 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 w64,..
38680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38690 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat
386a0 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 ion.ThrowOnMissi
386b0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ng,..
386c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
386d0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 configurati
386e0 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 on.WhatIf, confi
386f0 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 guration.Verbose
38700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,..
38710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38720 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a ref error))..
38730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38740 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 {..
38750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38760 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e TraceOps.
38770 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 ShowMessage(Trac
38780 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 ePriority.Highes
38790 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t,..
387a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
387b0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 debugCallbac
387c0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b k, traceCallback
387d0 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d , thisAssembly,.
387e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
387f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38800 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 error, traceCat
38810 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f egory, MessageBo
38820 78 42 75 74 74