<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.wintellect.com/CS/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>John Robbins' Blog</title><link>http://www.wintellect.com/CS/blogs/jrobbins/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>A Cool WinDBG/SOS Hidden Feature</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/07/14/a-cool-windbg-sos-hidden-feature.aspx</link><pubDate>Wed, 14 Jul 2010 14:03:25 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:16991</guid><dc:creator>jrobbins</dc:creator><slash:comments>5</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/16991.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=16991</wfw:commentRss><description>&lt;p&gt;Every once in a while you run across an undocumented trick that totally and completely makes your day. A great example of that is the ability to debug &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/07/08/super-cool-msbuild-debugging-in-the-vs-ide.aspx"&gt;MSBuild scripts&lt;/a&gt; in Visual Studio. Today I ran across another amazingly useful feature in WinDBG and SOS for .NET 4.0 that will save you countless hours of typing when analyzing minidumps. If you thought using &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/09/17/windbg-cmdtree-file-that-eases-some-sos-pain.aspx"&gt;.cmdtree&lt;/a&gt; to click your way to SOS happiness was amazing, you're going to love this one.
&lt;/p&gt;&lt;p&gt;The next time you start a WinDBG debugging session with SOS 4.0, issue the following undocumented command before you run any SOS commands:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;.prefer_dml 1
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If you've been using WinDBG for a while, you might have heard of DML (Debugger Mark Up Language). It's a feature of WinDBG where you can get hyperlinks in specific command output, such as &lt;span style="font-family:Courier New;"&gt;LM&lt;/span&gt; (Loaded Modules) where you can click on a module to get more information about that module. To see DML in action, execute the &lt;span style="font-family:Courier New;"&gt;lm /D&lt;/span&gt; command and you'll see the hyperlinks in the Command window like the following:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/071410_1402_ACoolWinDBG1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Clicking on one of the links will execute the &lt;span style="font-family:Courier New;"&gt;lmDvm&amp;lt;module&amp;gt;&lt;/span&gt; command which not only shows the version, but allows you to dump all the native symbols using the X command.
&lt;/p&gt;&lt;p&gt;So what does DML have to do with SOS? It turns out everything! Once you've issued the &lt;span style="font-family:Courier New;"&gt;.prefer_dml 1&lt;/span&gt; command some serious magic happens. For example, here's the output of the &lt;span style="font-family:Courier New;"&gt;!dso&lt;/span&gt; (Dump Stack Objects) command:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/071410_1402_ACoolWinDBG2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;You've never seen &lt;span style="font-family:Courier New;"&gt;!dso&lt;/span&gt; look so sexy, have you? If you click on one of those object addresses, that will issue the &lt;span style="font-family:Courier New;"&gt;!dumpobj /d &amp;lt;address&amp;gt;&lt;/span&gt; command for that address:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/071410_1402_ACoolWinDBG3.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;With SOS 4.0 Microsoft has implemented DML in most of the commands! If you want the clickable output on an SOS command, add the &lt;span style="font-family:Courier New;"&gt;/d&lt;/span&gt; command line option. Here's an example with &lt;span style="font-family:Courier New;"&gt;!threads /d&lt;/span&gt;:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/071410_1402_ACoolWinDBG4.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Even the most useful command, &lt;span style="font-family:Courier New;"&gt;!dumpheap&lt;/span&gt;, supports the &lt;span style="font-family:Courier New;"&gt;/d&lt;/span&gt; option:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/071410_1402_ACoolWinDBG5.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Get in the habit of adding &lt;span style="font-family:Courier New;"&gt;/d&lt;/span&gt; to SOS 4.0 commands so you can debug faster by clicking your way to happiness. As I mentioned, not all commands support &lt;span style="font-family:Courier New;"&gt;/d&lt;/span&gt;, but most do. Note that I'm using the latest WinDBG, 6.12.002.633, from the Windows SDK. I haven't checked if the SOS DML works in previous versions of the debugger but suspect it will.
&lt;/p&gt;&lt;p&gt;A huge part of the joy of our business is discovering new features even if they haven't been fully supported that make your life easier. It's like the developers were anticipating your needs and thinking about what would make your life better. The SOS 4.0 developers deserve a ton of credit for bringing a huge smile to my face and everyone who needs to debug those tough to solve problems!&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=16991" width="1" height="1"&gt;</description></item><item><title>A Wonderful WinDBG/SOS Hidden Feature</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/07/14/a-wonderful-windbg-sos-hidden-feature.aspx</link><pubDate>Wed, 14 Jul 2010 05:12:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:16972</guid><dc:creator>jrobbins</dc:creator><slash:comments>4</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/16972.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=16972</wfw:commentRss><description>&lt;P&gt;See the corrected entry with pictures &lt;A href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/07/14/a-cool-windbg-sos-hidden-feature.aspx"&gt;http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/07/14/a-cool-windbg-sos-hidden-feature.aspx&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=16972" width="1" height="1"&gt;</description></item><item><title>Paraffin 3.13 and an Ask for Help</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/07/09/paraffin-3-13-and-an-ask-for-help.aspx</link><pubDate>Fri, 09 Jul 2010 01:39:46 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:16882</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/16882.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=16882</wfw:commentRss><description>&lt;p&gt;Before I get into the quick new features for Paraffin 3.13 (&lt;a href="http://www.wintellect.com/CS/files/folders/8198/download.aspx"&gt;download here&lt;/a&gt;), I need to ask for your help. Pretty much from the first day I released Paraffin, I've been consistently getting the following question: 
&lt;/p&gt;&lt;p style="margin-left:36pt;"&gt;&lt;em&gt;I want to be able to uninstall obsolete components during minor upgrades.
&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-left:36pt;"&gt;&lt;em&gt;For this I would like to have an additional option, which does not remove missing/deleted files from the .Paraffin file. Instead it should generate the code according to &lt;a href="http://geekswithblogs.net/Vagmi.Mudumbai/archive/2006/06/11/81426.aspx"&gt;http://geekswithblogs.net/Vagmi.Mudumbai/archive/2006/06/11/81426.aspx&lt;/a&gt;.
&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-left:36pt;"&gt;&lt;em&gt;Paraffin should set component to transitive and use a false condition. If a file does not exist it should use a 0-byte dummy file.
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I think that's a great feature, but being mostly a Windows Installer neophyte, I have no idea what that's supposed to look like in actual WiX format. If one of you WiX ninjas can give me a functioning sample of an installer with a functioning patch using the above trick in WiX, I'll get that feature worked into Paraffin. 
&lt;/p&gt;&lt;p&gt;While I think major upgrades are the way to go because they are easier to manage, I know there are some of you using Paraffin where patching is a requirement. Shoot that sample to john @ this company's domain. 
&lt;/p&gt;&lt;p&gt;Paraffin 3.13 now supports a new command line option –regExExclude. Now you can exclude files and directories based on regular expressions to give you much more control. The new switch works for both creating files as well as when updating files to add new exclusions after you've already created your initial file. The –ext switch still excludes by file extension and –direXclude continues to exclude directories based on a value contained in the string. How the implementation work is that for both files and directories, I process the –ext and –direXclude switches before I process the –regExExclude. I thought that would be better for backwards compatibility.
&lt;/p&gt;&lt;p&gt;In the Paraffin download, I updated the example installer to show using the new switch when building the WiX fragment for the output Debug directory. All you want included from the compiled output is the .EXE and .PDB files, but Visual Studio has a bunch of other files like Paraffin.VSHOST.EXE and with Code Analysis turned on, those *.CodeAnalysisLog.xml and *.lastcodeanalysissucceeded files. With the new –regExExclude switch, you can specify the following on the command line to avoid those files
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;-rex ".*\.vshost\.exe.*" -rex ".*codeanalysis.*"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If you're not familiar with regular expressions, now you have a real reason to &lt;a href="http://msdn.microsoft.com/en-us/library/hs600312.aspx"&gt;learn&lt;/a&gt; them. One final note is that for files the regular expression is tested against just the filename. For directories, your regular expression is tested against the complete drive and path. This new trick should make Paraffin easier to control for many of you.
&lt;/p&gt;&lt;p&gt;The second thing I did for version 3.13 was remove something, the file creation node in the comment section. Many people wanted to be able to do automatic diffs on a .WXS and the updated .PARAFFIN file and the creation node messed those up. Removing the node means you can automate running Paraffin with the –update switch as part of your build and if your diff tool reports a difference, you can halt the build until the installer gets properly fixed.
&lt;/p&gt;&lt;p&gt;My plan is to have another release of Paraffin soon that adds some major features. Hisham Zreiq sent me some awesome extensions to Paraffin that incorporates COM registration, by using the same code Heat does. I'll make this an optional flag to ensure it works with existing Paraffin uses. In addition to the above mentioned possible patching support, I also want to incorporate the latest WiX 3.5 &lt;a href="http://www.joyofsetup.com/2009/12/31/simplifying-wix-component-authoring/"&gt;language changes&lt;/a&gt; for the Component element, which will make my code drastically simpler.
&lt;/p&gt;&lt;p&gt;As always, please don't hesitate to let me know you have ideas for Paraffin because I'd love to hear about them.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=16882" width="1" height="1"&gt;</description></item><item><title>Super Cool MSBuild Debugging In the VS IDE!</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/07/08/super-cool-msbuild-debugging-in-the-vs-ide.aspx</link><pubDate>Thu, 08 Jul 2010 05:33:15 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:16858</guid><dc:creator>jrobbins</dc:creator><slash:comments>3</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/16858.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=16858</wfw:commentRss><description>&lt;p&gt;Have you ever tried to figure out why your MSBuild-based build is failing? While the diagnostic output is OK, it really isn't an each task (no pun intended) to debug what's going on in an MSBuild file with the traditional means of &amp;lt;Message&amp;gt; tasks. Fortunately, Dan Mosely, one of the MSBuild developers, had some time on vacation and got MSBuild debugging working in the IDE! This is a secret feature is in the VS 2010 IDE, but not enabled for the RTM bits. Dan has finally &lt;a href="http://blogs.msdn.com/b/visualstudio/archive/2010/07/06/debugging-msbuild-script-with-visual-studio.aspx"&gt;blogged&lt;/a&gt; about how to enable the awesomeness he wrote on his own time. When Dan first showed me how easy it was to debug an MSBuild file, I shouted with joy because this is the one thing that's stopped people from taking the MSBuild automation approach to the next level. The only problem with my shout of joy is that I had to keep quiet about it until Dan &lt;a href="http://blogs.msdn.com/b/visualstudio/archive/2010/07/06/debugging-msbuild-script-with-visual-studio.aspx"&gt;shared&lt;/a&gt; it with the world. I've been debugging my custom MSBuild files with the IDE for a while and it works like a dream.
&lt;/p&gt;&lt;p&gt;Remember, this is an unsupported feature, but for those of us doing more than just straight project files, meaning everyone that does real software development builds, Dan's debugging engine is a super nice treat. Maybe we should ask Microsoft to let Dan go on vacation more often!&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=16858" width="1" height="1"&gt;</description></item><item><title>Updated PowerShell Script for Setting Your Symbol Paths</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/07/06/updated-powershell-script-for-setting-your-symbol-paths.aspx</link><pubDate>Wed, 07 Jul 2010 00:24:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:16786</guid><dc:creator>jrobbins</dc:creator><slash:comments>3</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/16786.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=16786</wfw:commentRss><description>&lt;p class="MsoNormal"&gt;Here’s my latest script for setting up a user’s_NT_SYMBOL_PATH environment variable as well as Visual Studio 2010’s symbolsettings. In a previous version of this script, I wasn’t setting the publicsymbol server cache directory in Visual Studio so you could end up with downloadedsymbols in C:\SYMBOLS\PUBLIC instead ofC:\SYMBOLS\PUBLIC\MICROSOFTPUBLICSYMBOLS. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;#requires -version 2.0&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;#Wintellect .NET Debugging Code&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;#(c) 2009-2010 by John Robbins\Wintellect - Do whatever you want to do with it&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# aslong as you give credit. &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;&amp;lt;#.SYNOPSIS&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;Setsup a computer with symbol server values in both the environment and in &lt;br&gt;VS 2010.&lt;br&gt;.DESCRIPTION&lt;br&gt;Sets up both the _NT_SYMBOL_PATH environment variable and Visual Studio 2010&lt;br&gt;to use a common symbol cache directory as well as common symbol servers.&lt;br&gt;.PARAMETER Internal&lt;br&gt;Sets the symbol server to use to \\SYMBOLS\SYMBOLS. Visual Studio will not use &lt;br&gt;the public symbol servers. This will turn off the .NET Framework SourceStepping&lt;br&gt;You must specify either -Internal or -Public to the script.&lt;br&gt;.PARAMETER Public&lt;br&gt;Sets the symbol server to use as the two public symbol servers from Microsoft. &lt;br&gt;All the appropriate settings are configured to properly have .NET Reference &lt;br&gt;Source stepping working.&lt;br&gt;.PARAMETER CacheDirectory&lt;br&gt;Defaults to C:\SYMBOLS\PUBLIC\MicrosoftPublicSymbols for -Public and &lt;br&gt;C:\SYMBOLS\INTERNAL for -Internal. If you specify a different cache directory&lt;br&gt;with -Public, MicrosoftPublicSymbols will always be appended. This is to &lt;br&gt;avoid issues with Visual Studio downloading the symbols to a differentlocation.&lt;br&gt;.PARAMETER SymbolServers&lt;br&gt;A string array of additional symbol servers to use. If -Internal is set, these &lt;br&gt;additional symbol servers will appear after \\SYMBOLS\SYMBOLS. If -Public is &lt;br&gt;set, these symbol servers will appear after the public symbol servers so both&lt;br&gt;the environment variable and Visual Studio have the same search order&lt;br&gt;#&amp;gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;[&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:lightblue;"&gt;CmdLetBinding&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;(SupportsShouldProcess&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$true&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;)&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;]&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;param&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:teal;"&gt;[switch]&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$Internal&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;,&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:teal;"&gt;[switch]&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$Public&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;,&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:teal;"&gt;[string]&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;,&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:teal;"&gt;[string[]]&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$SymbolServers&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;)&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;#Always make sure all variables are defined.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-PSDebug&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-Strict&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;#Creates the cache directory if it does not exist.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;function&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;CreateCacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:teal;"&gt;[string]&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$cacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;{&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;!&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; $(&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Test-path&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$cacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-type&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"Container"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ))&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; (&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$PSCmdLet&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;ShouldProcess(&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"Destination:$cacheDirectory"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;,&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"CreateDirectory"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;))&lt;br&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-tab-count:3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;New-Item&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-type&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;directory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-Path&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$cacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$null&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;function&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$path&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;,&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$name&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;,&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$value&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;,&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$type&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$path&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;-eq&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$null&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Write-Error&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"Set-ItemPropertyScriptpath param cannot be null!"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;exit&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$name&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;-eq&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$null&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Write-Error&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"Set-ItemPropertyScriptname param cannot be null!"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;exit&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$propString&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"Item: "&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$path&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;ToString() &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;" Property:"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$name&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; (&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$PSCmdLet&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;ShouldProcess(&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$propString&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;,&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"SetProperty"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;))&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; (&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$type&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;-eq&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$null&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;)&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemProperty&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-Path&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$path&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-Name&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$name&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-Value&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$value&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;else&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemProperty&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-Path&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$path&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-Name&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$name&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-Value&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$value&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-Type&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$type&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Dothe parameter checking.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$Internal&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;-eq&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$Public&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Write-Error&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"You must specify either -Internal or-Public"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;exit&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;#Check if VS is running. &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; (&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Get-Process&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;'devenv'&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:navy;"&gt;-ErrorAction&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;SilentlyContinue&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;)&lt;br&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Write-Error&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"Visual Studio is running. Pleaseclose all instances before running this script"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;exit&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"HKCU:\Software\Microsoft\VisualStudio\10.0\Debugger"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$Internal&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;{&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;Length &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;-eq&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;0&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"C:\SYMBOLS\INTERNAL"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;CreateCacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Default to \\SYMBOLS\SYMBOLS and addany additional symbol servers to &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# the end of the string.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$symPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"SRV*$CacheDirectory*\\SYMBOLS\SYMBOLS"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$vsPaths&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;""&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$pathState&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;""&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;for&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$i&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;0&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$i&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;-lt&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$SymbolServers&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;Length ; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$i&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;++&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$symPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"*"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$symPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$SymbolServers&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;[&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$i&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;]&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$vsPaths&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$SymbolServers&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;[&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$i&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;]&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$vsPaths&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;";"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$pathState&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"1"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$symPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;";"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;HKCU:\Environment&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;_NT_SYMBOL_PATH&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$symPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Turn off .NET Framework Sourcestepping.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;FrameworkSourceStepping&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;0&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;DWORD&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Turn off using the Microsoft symbolservers.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;SymbolUseMSSymbolServers&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;0&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;DWORD&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Set the symbol cache dir to the samevalue as used in the environment&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# variable.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;SymbolCacheDir&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Set the VS symbol path to anyadditional values&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;SymbolPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$vsPaths&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Tell VS that to the additional serversspecified.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;SymbolPathState&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$pathState&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;}&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;else&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;{&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;Length &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;-eq&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;0&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"C:\SYMBOLS\PUBLIC"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# For -Public, we have to putMicrosoftPublicSymbols on the end because &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Visual Studio hard codes that on forsome reason. I have no idea why.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;if&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;EndsWith(&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"\"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;) &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;-eq&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$false&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-tab-count:2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"\"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"MicrosoftPublicSymbols"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;CreateCacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# It's public so we have a littledifferent processing to do. I have to &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# add the MicrosoftPublicSymbols as VShardcodes that onto the path.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# This way both WinDBG and VS are usingthe same paths for public&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# symbols.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$refSrcPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"$CacheDirectory*http://referencesource.microsoft.com/symbols"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$msdlPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"$CacheDirectory*http://msdl.microsoft.com/download/symbols"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$extraPaths&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;""&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$enabledPDBLocations&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"11"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Poke on any additional symbol servers.I've keeping everything the&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# same between VS as WinDBG.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkblue;"&gt;for&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ( &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$i&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;0&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; ; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$i&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;-lt&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$SymbolServers&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;Length ; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$i&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;++&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; )&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$extraPaths&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;";"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$extraPaths&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$SymbolServers&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;[&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$i&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;]&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$enabledPDBLocations&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;+=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"1"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$envPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"SRV*$refSrcPath;SRV*$msdlPath$extraPaths"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;HKCU:\Environment&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;_NT_SYMBOL_PATH&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$envPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Turn off Just My Code.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;JustMyCode&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;0&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;DWORD&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Turn on .NET Framework Source stepping.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;FrameworkSourceStepping&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;1&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;DWORD&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Turn on Source Server Support.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;UseSourceServer&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;1&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;DWORD&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Turn on Source Server Diagnostics asthat's a good thing. :)&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;ShowSourceServerDiagnostics&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;1&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;DWORD&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# It's very important to turn offrequiring the source to match exactly.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# With this flag on, .NET ReferenceSource Stepping doesn't work.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;UseDocumentChecksum&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;0&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;DWORD&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Turn on using the Microsoft symbolservers.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;SymbolUseMSSymbolServers&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:purple;"&gt;1&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;DWORD&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Set the VS SymbolPath setting.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$vsSymPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgray;"&gt;=&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"$refSrcPath;$msdlPath$extraPaths"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;SymbolPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$vsSymPath&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Tell VS that all paths set are active(you see those as check boxes in &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# the Options dialog, Debugging\Symbolspage).&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;SymbolPathState&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$enabledPDBLocations&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# Set the symbol cache dir to the samevalue as used in the environment&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkgreen;"&gt;# variable.&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blue;"&gt;Set-ItemPropertyScript&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$dbgRegKey&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:blueviolet;"&gt;SymbolCacheDir&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt; &lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:orangered;"&gt;$CacheDirectory&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br&gt;}&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;""&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;"Pleaselog out to activate the new symbol server settings"&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:darkred;"&gt;""&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:Consolas;color:black;"&gt;&lt;br style="mso-special-character:line-break;"&gt;&lt;br style="mso-special-character:line-break;"&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=16786" width="1" height="1"&gt;</description></item><item><title>Getting an iPhone with iOS4 to Internet Tether to Windows 7 without iTunes</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/29/getting-an-iphone-with-ios4-to-internet-tether-to-windows-7-without-itunes.aspx</link><pubDate>Tue, 29 Jun 2010 03:26:06 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:16606</guid><dc:creator>jrobbins</dc:creator><slash:comments>4</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/16606.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=16606</wfw:commentRss><description>&lt;p&gt;AT&amp;amp;T has &lt;span style="color:#4f81bd;"&gt;&lt;strong&gt;&lt;em&gt;finally&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt; enabled internet tethering so you can use your iPhone as a 3G connection. Those of you outside the US that have had iPhone tethering for years can feel free to laugh all you want now. Anyway, the downside to using an iPhone on a PC is that you need to install iTunes. While Apple makes wonderful software for OSX, iTunes on the PC is well, how can I say this, umm, kind of big and fat. My wife has iTunes on her PC and it's been a hassle at times. As I use OSX for all my music, photo, and video needs, I've never needed to run iTunes on my Windows machines. With my upgrade to iPhone 4 (which I can't rave enough about because it fixed all my dropped call problems), I realized to use the iPhone for tethering to get an internet connection, I was looking at installing iTunes, which was filling me with dread.
&lt;/p&gt;&lt;p&gt;As iTunes was downloading, I was thinking I was going to be installing a truck load of programs and services just to get an attachment to the iPhone. All I needed were the device drivers for the iPhone, not the rest of the stuff in the package. As I've hacked through Apple's installers &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/09/02/mac-pro-os-x-10-6-snow-leopard-windows-7-x64-love.aspx"&gt;before&lt;/a&gt;, and have been doing Windows development far too long, I set out to see if I could get just the hardware drivers without the rest of iTunes. It turned out to be far easier than I ever would have guessed! I'm fully tethered and nary an iTunes or Apple service in sight. Even better, I didn't have to jail break or hack the iPhone at all.
&lt;/p&gt;&lt;p&gt;Obviously you need to be set up with AT&amp;amp;T (or your service provider if outside the US) and have purchased the tethering plan before attempting these steps. The following instructions might work with phones other than the iPhone 4, but I haven't tested any other combinations. My operating system is Windows 7 x64 but I suspect this might work for other operating systems but don't know for sure. One major point is that the iTunes-less internet tethering &lt;strong&gt;requires a Bluetooth connection&lt;/strong&gt;. Since most modern laptops have Bluetooth, that's not much of a problem. If you don't have a Bluetooth connection, there's spiffy $20 Bluetooth USB dongles that should work. I spent no time trying to get a USB connection to work so you're on your own there. Another item I need to point out is that by following these steps, you'll lose the ability to use your iPhone as a USB file drive. I'm sure there's a way to get that capability back, but I haven't looked at what it would take.
&lt;/p&gt;&lt;p&gt;Finally, this is obviously not supported at all by Apple or AT&amp;amp;T nor am I an employee of either company. This works for me but it might your fish to swim upside down, your kids to dye their hair purple with yellow racing stripes right before graduation pictures, or blow up your machine so I proclaim myself blameless for any bad things that could happen. With that disclaimer, here are the steps that worked for me. 
&lt;/p&gt;&lt;p&gt;&lt;em&gt;This blog entry may prove popular with people outside my normal hardcore software developer audience so I've made the steps very explicit in order to help avoid bricked phones and laptops. All disclaimers still apply!
&lt;/em&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Disconnected your iPhone from the computer if it's connected with a USB cable.
&lt;/li&gt;&lt;li&gt;Download &lt;a href="http://www.apple.com/itunes/download/"&gt;iTunes&lt;/a&gt;. It is critical you select the right version for the "bitness" of your operating system installation. If you're running an x64 operating system, you &lt;span style="color:#4f81bd;"&gt;&lt;strong&gt;&lt;em&gt;have&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt; to get the 64-bit version. If you're not sure what you have, Microsoft has a Knowledge Base &lt;a href="http://support.microsoft.com/kb/827218"&gt;article&lt;/a&gt; for you.
&lt;/li&gt;&lt;li&gt;Open Explorer. Enter "%TEMP%" (without quotes) in the address bar to navigate to your TEMP directory. For the curious, %TEMP% is the environment variable expansion Explorer supports.
&lt;/li&gt;&lt;li&gt;Run the iTunes64Setup.exe or iTunesSetup.exe program. &lt;strong&gt;DO NOT CLICK ANY BUTTONS ON THE SETUP USER INTERFACE&lt;/strong&gt;.
&lt;/li&gt;&lt;li&gt;&lt;div&gt;With the Explorer window still open to the %TEMP% directory, look for a directory with the most current time stamp. In my case, the directory was names IXP686.TMP, but the name is generated randomly. If you're having trouble finding the directory search for AppleMobileDeviceSupport64.MSI or AppleMobileDeviceSupport.MSI for 32-bit machines.
&lt;/div&gt;&lt;p style="margin-left:18pt;"&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062910_0325_GettinganiP1.png" alt="" /&gt;
			&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Once you've found the directory, copy AppleMobileDeviceSupport64.MSI or AppleMobileDeviceSupport.MSI to another location.
&lt;/li&gt;&lt;li&gt;Cancel the iTunes installation and make sure it's user interface is gone before continuing.
&lt;/li&gt;&lt;li&gt;In the copied directory, double click AppleMobileDeviceSupport64.msi or AppleMobileDeviceSupport.msi to install the Apple device support. This will not require a reboot.
&lt;/li&gt;&lt;li&gt;&lt;div&gt;On the iPhone do the following steps
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Go into Settings-&amp;gt;General-&amp;gt;Network-&amp;gt;Internet Tethering and turn on tethering.&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062910_0325_GettinganiP2.png" alt="" /&gt;
				&lt;/li&gt;&lt;li&gt;In Settings-&amp;gt;General-&amp;gt;Bluetooth and turn Bluetooth and leave the Bluetooth screen active.&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062910_0325_GettinganiP3.png" alt="" /&gt;
				&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;On your Windows 7 machine, start Devices and Printers. Click the Add device button. &lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062910_0325_GettinganiP4.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;Follow the steps to pair your iPhone with your Windows 7 PC. Your iPhone will show up in the Devices and Printers as connected. However, the installation of the device drivers will fail reporting that the Bluetooth Peripheral Device failed. That's not a problem as you don't need this way of connecting. You just need the device paired at this point.&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062910_0325_GettinganiP5.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;Start the Control Panel and in the search box, type "Bluetooth". In the Devices and Printers section, click "Change Bluetooth settings." In the Bluetooth Settings dialog, check the "Show Bluetooth icon in the notification area." Click the OK button. I had you do this as this is the fastest way to get to your Bluetooth devices to initiate a tethered connection.&lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062910_0325_GettinganiP6.png" alt="" /&gt;
		&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;To connect to the internet with your iPhone, here's what you do.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;In the tray area, double click on the Bluetooth icon to bring up the Bluetooth Devices window.
&lt;/li&gt;&lt;li&gt;Right click on your iPhone and from the context menu, select Connect using, Access point. &lt;br /&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062910_0325_GettinganiP7.png" alt="" /&gt;&lt;br /&gt;You'll see the Bluetooth connection dialog pop up and after about 15 seconds or so you'll be fully tethered to your iPhone.&lt;br /&gt;Note that you'll always see the "Needs troubleshooting" for the status for your iPhone in the Bluetooth Devices window. You can ignore that because the magic is being done through the Bluetooth Network Connection in your network adapters.
&lt;/li&gt;&lt;li&gt;To check the connection on your iPhone, look for the top bar on the iPhone to turn blue and say Internet Tethering.&lt;br /&gt;
			&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/062910_0325_GettinganiP8.png" alt="" /&gt;
		&lt;/li&gt;&lt;li&gt;To disconnect from the iPhone tethering, bring up the Bluetooth Devices window and select "Disconnection from device network" from the context menu after right clicking on your iPhone.    
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Before the iPhone tethering option, I was using a second 3G wireless modem for my laptop. With the new tethering support, I'm now saving $65 a month with a cheaper data plan and canceling my other line, while getting the same level of service. Throw in a massively better phone with iPhone 4 and it's a total win all around especially with the minimal software installed.
&lt;/p&gt;&lt;p&gt;If you're having trouble making the iTunes-less tethering to work drop a question in the comments. If you get these instructions to work on different Windows operating systems or iPhone model combinations, please let us know in the comments as well. &lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=16606" width="1" height="1"&gt;</description></item><item><title>How to Capture a Minidump: Let Me Count the Ways</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/17/how-to-capture-a-minidump-let-me-count-the-ways.aspx</link><pubDate>Thu, 17 Jun 2010 22:05:48 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:15365</guid><dc:creator>jrobbins</dc:creator><slash:comments>13</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/15365.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=15365</wfw:commentRss><description>&lt;p&gt;As I was waiting for a minidump I was grabbing on a very large and busy server application to finish writing, my mind wandered and I realized there were quite a few ways to grab a minidump today. Back in the old Windows days, when we had to program up hill in the snow both ways, there was only WinDBG. Now it seems like an application isn't complete unless it produced a minidump. I thought I'd throw out all the ways I know off the top of my head. Of course, I'm sure there are other ways so please add them in the comments!
&lt;/p&gt;&lt;p&gt;&lt;em&gt;Note: I'm only using Windows 7 and Server 2008 R2 these days so some of these might not work on legacy Windows operating systems.
&lt;/em&gt;&lt;/p&gt;&lt;h3&gt;ADPlus/WinDBG's .dump Command
&lt;/h3&gt;&lt;p&gt;The original heavy duty way to create a minidump. To create a full memory minidump, which you'll need in order to work with .NET's SOS/SOSEX/PSSCOR2 extensions or for native code to follow all memory like linked lists, use the /ma option.
&lt;/p&gt;&lt;h3&gt;Visual Studio
&lt;/h3&gt;&lt;p&gt;With Visual Studio 2010, the wonderful "Save Dump As…" menu option now appears on the Debug menu for both native and managed debugging. Any time you need a minidump while debugging, just grab one. Add in the fact that Visual Studio 2010 has the awesome minidump reading capabilities, especially for .NET code, we can now spend way less time in WinDBG.
&lt;/p&gt;&lt;h3&gt;TaskManager
&lt;/h3&gt;&lt;p&gt;Many people don't realize that TaskManager knows all about minidumps. When you're either in the Applications or the Processes tabs, right click on the process and select Create Dump File.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/061710_2204_HowtoCaptur1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;After the minidump is finished, you'll see the dialog showing you where the dump was created. A nice hidden treat is that the path shown is a read only edit control you can select and copy so you don't have to try to remember a long path.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/061710_2204_HowtoCaptur2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;You might be wondering what type of minidump TaskManager makes. How about I leave that as an exercise for the reader? OK, that's cruel. All TaskManager created dumps are full memory minidumps.
&lt;/p&gt;&lt;h3&gt;Process Explorer
&lt;/h3&gt;&lt;p&gt;TaskManager is fine, but real developers use &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;Process Explorer&lt;/a&gt; to fulfill our task management needs. Right clicking on a process lets you choose a minidump or a full memory minidump.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/061710_2204_HowtoCaptur3.png" alt="" /&gt;
	&lt;/p&gt;&lt;h3&gt;MiniDumpWriteDump
&lt;/h3&gt;&lt;p&gt;As I am trying to create a complete list I do need to include the Windows API that actually creates the minidumps themselves: &lt;a href="http://msdn.microsoft.com/en-us/library/ms680360.aspx"&gt;MiniDumpWriteDump&lt;/a&gt;. There's nothing stopping you from writing your own program that creates minidumps.
&lt;/p&gt;&lt;h3&gt;ProcDump
&lt;/h3&gt;&lt;p&gt;The sweet SysInternals &lt;a href="http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx"&gt;ProcDump&lt;/a&gt; tool is designed to get you a minidump when specific nasty issues happen to your processes. It's great for snagging dumps when you have intermittent CPU spikes or memory usage. I find that I'm using this tool constantly on production servers to get minidumps of those hard to reproduce problems. Everyone using computers needs to know about this tool, even your grandmother!
&lt;/p&gt;&lt;h3&gt;DebugDiag
&lt;/h3&gt;&lt;p&gt;Got IIS problems? &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&amp;amp;displaylang=en"&gt;DebugDiag&lt;/a&gt; is for you. The ability to script when the dump occurs is pretty interesting. The always brilliant Tess Ferrandez has a great &lt;a href="http://blogs.msdn.com/b/tess/archive/2008/05/21/debugdiag-1-1-or-windbg-which-one-should-i-use-and-how-do-i-gather-memory-dumps.aspx"&gt;blog&lt;/a&gt; post that helps you to decide when you should use ADPlus/WinDBG vs. DebugDiag that's worth reading.
&lt;/p&gt;&lt;h3&gt;Windows Error Reporting (WER)
&lt;/h3&gt;&lt;p&gt;If your company &lt;a href="http://www.microsoft.com/whdc/winlogo/maintain/startwer.mspx"&gt;signs up&lt;/a&gt; for Windows Error Reporting you'll get the same minidumps Microsoft gets. For native developers, WER is a wonderful resource but for .NET developers you only get basic minidumps so it's not as useful.
&lt;/p&gt;&lt;p&gt;Do you know of any other ways to capture a minidump?&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=15365" width="1" height="1"&gt;</description></item><item><title>VS Remote Debugging Across Workgroups or Domains</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/15/vs-remote-debugging-across-workgroups-or-domains.aspx</link><pubDate>Wed, 16 Jun 2010 00:06:06 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:15262</guid><dc:creator>jrobbins</dc:creator><slash:comments>4</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/15262.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=15262</wfw:commentRss><description>&lt;p&gt;Remote debugging in Visual Studio works great if both machines are on the same domain and/or workgroup. It also works dreamily if you're doing straight native C++ where you can use the TCP/IP as the debugging transport. The problem comes in when you need to do remote debugging for managed code across domains or workgroups. It doesn't work because .NET remote debugging relies on DCOM, which as a transport protocol does not jump workgroup or domain boundaries.
&lt;/p&gt;&lt;p&gt;When I have to remote debug across domain/workgroup boundaries, here's what works for me. It's not an ideal solution but until Microsoft allows us to debug .NET code with pure TCP/IP this will get you at least started. Again, your mileage may vary and your network admins may not let you perform the following so you're on your own with these steps. Finally, I'm assuming you know how to set up remote debugging for the supported same domain/workgroup scenarios. If you don't you should read the &lt;a href="http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx"&gt;documentation&lt;/a&gt; to understand what I'm talking about here.
&lt;/p&gt;&lt;p&gt;The issue with DCOM is there's a security ramification where an account one domain does not have rights on the other workgroup or domain. The big trick is to do your remote debugging with local machine accounts. DCOM first attempts to make the connection with &lt;em&gt;machine\username&lt;/em&gt; account and if that does not work, it falls back to the &lt;em&gt;username&lt;/em&gt; using the hashed password. As long as the username and password on the both machines is the same, DCOM can make the connection.
&lt;/p&gt;&lt;p&gt;On the machine where Visual Studio runs, called the local machine, open up an elevated command shell or PowerShell window with administrator rights and execute the following command. Yes, you can do the same through the GUI but this is much faster. Don't fear the command line!
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;font-size:10pt;"&gt;net user &lt;em&gt;username&lt;/em&gt;
			&lt;em&gt;password&lt;/em&gt; /add
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;That creates the user account you're going to use for Visual Studio.
&lt;/p&gt;&lt;p&gt;On the machine where your application runs, called the remote machine, open up an elevated command shell or PowerShell window with administrator rights and execute the following commands. Obviously you'll be using the same user name and password you entered on the local machine.
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;font-size:10pt;"&gt;net user &lt;em&gt;username&lt;/em&gt;
			&lt;em&gt;password&lt;/em&gt; /add
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;font-size:10pt;"&gt;net localgroup administrators &lt;em&gt;remotecomputername&lt;/em&gt;\&lt;em&gt;username&lt;/em&gt; /add
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;With the same computer accounts on both machines account life is easy. On the remote machine, you'll need to login with the new account or if you're logging in with a different account, use RUNAS.EXE to fire up MSVSMON.EXE like the following.
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;font-size:10pt;"&gt;runas /user:&lt;em&gt;remotecomputername\username&lt;/em&gt; "&lt;em&gt;&amp;lt;full path&amp;gt;&lt;/em&gt;\msvsmon.exe"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;With the remote debugging stub waiting for connections, you'll need to start Visual Studio on the local machine with the account as well.
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;font-size:10pt;"&gt;runas /user:&lt;em&gt;localcomputername\username&lt;/em&gt; "&lt;em&gt;&amp;lt;full path&amp;gt;&lt;/em&gt;\devenv.exe"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;With both sides running with the same account and password, you'll work around the DCOM bumps and get your remote debugging across domains and/or workgroups functioning. As I mentioned, this approach isn't ideal because you're now running Visual Studio in a different account so all your settings, extensions, and drive mappings aren't there. The good news is that those are pretty simple to set up especially since you can export and import your Visual Studio settings.
&lt;/p&gt;&lt;p&gt;One problem you'll run into with this approach is when you need to attach to a process running with administrator rights.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/061610_0005_VSRemoteDeb1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;The issue is that MSVSMON.EXE itself is not running with administrator rights. One option is to log into the machine with the local &lt;em&gt;username&lt;/em&gt;, right click on MSVSMON.EXE in Explorer and choose "Run as administrator." Another option, which I do instead, is to use my &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/03/27/elevate-a-process-at-the-command-line-in-vista.aspx"&gt;Elevate&lt;/a&gt; program that starts processes as an administrator at the command line. When I need MSVSMON.EXE running with administrator rights, I simply do the following.
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;font-size:10pt;"&gt;runas /user:&lt;em&gt;remotecomputername\username&lt;/em&gt; "&lt;em&gt;&amp;lt;full path&amp;gt;&lt;/em&gt;\elevate &lt;em&gt;&amp;lt;full path&amp;gt;&lt;/em&gt;\msvsmon.exe"
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Right now some of you are sitting there thinking that instead of creating the completely separate account to run everything in, why not just create a machine account on the remote machine that matches the name of the domain account you want to use? That seems to make sense, but you'll have a small little problem. The DCOM connection only works one way and you'll get an error.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/061610_0005_VSRemoteDeb2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;While not a perfect solution, using machine accounts with the same usernames and passwords on both machines will at least let you do remote debugging. In some cases this may cause more trouble than it's worth, but I thought it was worth mentioning the approach. One of these days full remote debugging with complete security will be built into the operating system. A boy can dream, right?&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=15262" width="1" height="1"&gt;</description></item><item><title>Upcoming PowerShell Podcast Interview</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/15/upcoming-powershell-podcast-interview.aspx</link><pubDate>Tue, 15 Jun 2010 21:35:54 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:15260</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/15260.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=15260</wfw:commentRss><description>&lt;p&gt;If you haven't guessed by now from my blog, I have a little bit of a passing interest in PowerShell these days. Hal Rottenburg from &lt;a href="http://powerscripting.net"&gt;PowerScripting Podcast&lt;/a&gt; will be interviewing me about PowerShell and how it applies to developers. Of course I'll have to talk about debugging in there somehow. I was honored to be invited as the PowerScripting Podcast is generally geared at super hard core PowerShell users on the IT Pro side. For those of us not so familiar with PowerShell, consider this a great opportunity to ask questions about PowerShell from a developer's perspective as you'll have some great PowerShell users on the call. I figure they must be having me on either because of &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/03/10/start-powershellpoint.aspx"&gt;Start-PowerShellPoint&lt;/a&gt; (my one feeble contribution to the PowerShell community) or for the comic relief.
&lt;/p&gt;&lt;p&gt;Check it out live at 9:30 PM EDT on June 17&lt;sup&gt;th&lt;/sup&gt; at the &lt;a href="http://www.ustream.tv/channel/powerscripting-podcast"&gt;streaming site&lt;/a&gt;. If you can't make the live show, but have questions about PowerShell from a developer's perspective, put them in the comments or email them to me and we'll get them answered!&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=15260" width="1" height="1"&gt;</description></item><item><title>Getting PDBs and Source When You Can’t Access Your Symbol Server</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/06/getting-pdbs-and-source-when-you-can-t-access-your-symbol-server.aspx</link><pubDate>Sun, 06 Jun 2010 06:21:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:14995</guid><dc:creator>jrobbins</dc:creator><slash:comments>4</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/14995.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=14995</wfw:commentRss><description>&lt;p&gt;The other day I &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/02/the-secret-to-avoiding-debugger-slowdowns.aspx"&gt;wrote&lt;/a&gt; about using SYMCHK.EXE from the &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;Debugging Tools for Windows&lt;/a&gt; (WinDBG) install to pre-populate your symbol server cache. That prompted a question I got in email:&lt;/p&gt;&lt;p&gt;&lt;i&gt;Our test lab machines are isolated from the rest of our network and have no internet access. How can I get symbols and source over to those machines?&lt;/i&gt;&lt;/p&gt;&lt;p&gt;For private builds, those builds you do on your development machine, it's as simple as copying the source tree to portable storage and putting the PDB files in the same directories as the binaries. Once you copy everything onto the isolated machines, the debugger appropriately finds everything. Life gets a lot more interesting for public builds; those builds done on build machines. Also, the operating system symbols from Microsoft count as a public build machine.&lt;/p&gt;&lt;p&gt;To get all the right PDB files, you'll need to first run SYMCHK.EXE on the unconnected machine with the /om switch on all the directories you want symbols for. This will include the operating system as well as your products directories. The /om switch builds a text file of all the information necessary to download the symbols but does not download them. You'll copy that text file to a machine connected to the internet and your company's symbol server. On that machine, you'll run SYMCHK.EXE with the /im switch and pass in the text files you created on the unconnected machine. That will populate the connected machine's cache directory with all the PDB files needed on the unconnected machine.&lt;/p&gt;&lt;p&gt;The PDB files are easy. The more interesting issue is getting the public sources. I'm assuming that everyone reading this has set up source indexing for all your builds, also known as source server, so you can debug all public builds with the right source code. If you don't know what a source server is, head over &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163563.aspx"&gt;here&lt;/a&gt; to read an article I wrote about what source server is and how to get it set up on your build server. If you're using TFS 2010 support for symbol and source servers are included in TFS build.&lt;/p&gt;&lt;p&gt;While SYMCHK.EXE makes getting the PDB files into the local cache easy, we need a similar tool that will do the same for source files. Fortunately, there is such a tool: SRCTOOL.EXE. It's in the Debugging Tools for Windows location in the SRCSRV directory. By specifying the –x switch and the PDB file you want, SRCTOOL.EXE will execute all the version control commands embedded in the PDB file and get the source for you.&lt;/p&gt;&lt;p&gt;There are two caveats with SRCTOOL.EXE. The first is that it only runs with on single PDB file at a time so if you need to grab the source files for 30 different of your DLLs, you have to run it 30 times. The second is that it doesn't put the source in your cache directory unless you specify the –d command line option. Obviously, you and I don't want to manually run SRCTOOL.EXE on each PDB file in our symbol cache so I whipped up a PowerShell script, Get-SourceServerFiles.PS1, at the bottom of this blog entry that will do the work for you. Simply pass in your cache directory and the script will do all the work as well as ensure the source files are placed in the cache directory.&lt;/p&gt;&lt;p&gt;After running SYMCHK.EXE and Get-SourceServerFiles.PS1, you'll have all the PDB files and source code in the connected machine's cache. You'll just need to copy the whole cache directory to a portable drive and take that to the unconnected machine and copy the directory to the local drive. On the unconnected machine, you'll set up the machine to use your symbol server. When you start debugging, what happens? The debuggers always look in the cache directory for symbols and source so if you have put everything in the cache, there's no network access. &lt;/p&gt;&lt;p&gt;With a little setup debugging with full source and correct call stacks on unconnected machines is now nearly as easy as debugging locally on your development computer. Go forth and debug!&lt;/p&gt;&lt;p&gt;&lt;span style="color:darkgreen;font-family:Consolas;font-size:10pt;"&gt;#requires -version 2&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Arial, Helvetica, sans-serif;"&gt;&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Consolas;"&gt;# (c) 2010 by John Robbins\Wintellect – Do whatever you want to do with it&lt;br&gt;# as long as you give credit.&lt;br&gt;&lt;font class="Apple-style-span" color="#000000" face="Arial, Helvetica, sans-serif"&gt;&lt;br&gt;&lt;/font&gt;&amp;lt;#.SYNOPSIS&lt;br&gt;Prepopulate your symbol cache with all your Source Server extracted source code.&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Arial, Helvetica, sans-serif;"&gt;&lt;font class="Apple-style-span" color="#006400" face="Consolas"&gt;&lt;br&gt;.DESCRIPTION&lt;br&gt;Recurses the specified symbol cache directory for PDB files with Source Server sections&lt;br&gt;and extracts the source code. This script is a simple wrapper around SRCTOOl.EXE from&lt;br&gt;the Debugging Tools for Windows (AKA WinDBG). You must have SRCTOOL.EXE in the path. It&lt;br&gt;is in the SRCSRV directory under the Debugging Tools for Windows installation directory.&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Arial, Helvetica, sans-serif;"&gt;&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Consolas;"&gt;.PARAMETER cacheDirectory&lt;br&gt;The cache directory for the local machine.&lt;br&gt;#&amp;gt;&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Arial, Helvetica, sans-serif;"&gt;&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Consolas;"&gt;Param&lt;span style="color:black;"&gt;(&lt;span style="color:darkgray;"&gt;[&lt;span style="color:lightblue;"&gt;Parameter&lt;span style="color:black;"&gt;(Mandatory&lt;span style="color:darkgray;"&gt;=&lt;span style="color:orangered;"&gt;$true&lt;span style="color:black;"&gt;)&lt;span style="color:darkgray;"&gt;]&lt;span style="color:black;"&gt;												&lt;span style="color:orangered;"&gt;$cacheDirectory&lt;span style="color:black;"&gt;)&lt;br&gt;&lt;span class="Apple-style-span"&gt;&lt;font class="Apple-style-span" color="#000000" face="Arial, Helvetica, sans-serif"&gt;&lt;br&gt;&lt;/font&gt;Set-StrictMode&lt;span style="color:black;"&gt;				&lt;span style="color:navy;"&gt;–version&lt;span style="color:black;"&gt;						&lt;span style="color:blueviolet;"&gt;Latest&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Arial, Helvetica, sans-serif;"&gt;&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Consolas;"&gt;# Verify SRCTOOL.EXE is in the path.&lt;br&gt;&lt;span class="Apple-style-span"&gt;if&lt;span style="color:black;"&gt; ((&lt;span style="color:blue;"&gt;Get-Command&lt;span style="color:black;"&gt;						&lt;span style="color:blueviolet;"&gt;srctool.exe&lt;span style="color:black;"&gt;								&lt;span style="color:navy;"&gt;-ErrorAction&lt;span style="color:black;"&gt;										&lt;span style="color:blueviolet;"&gt;SilentlyContinue&lt;span style="color:black;"&gt;) &lt;span style="color:darkgray;"&gt;-eq&lt;span style="color:black;"&gt;														&lt;span style="color:orangered;"&gt;$null&lt;span style="color:black;"&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span"&gt;throw&lt;span style="color:black;"&gt;					&lt;span style="color:darkred;"&gt;"SRCTOOL.EXE does not appear to be in the PATH."&lt;br&gt;&lt;span class="Apple-style-span"&gt;}&lt;br&gt;&lt;span class="Apple-style-span"&gt;&lt;font class="Apple-style-span" color="#000000" face="Arial, Helvetica, sans-serif"&gt;&lt;br&gt;&lt;/font&gt;# Verify the cache directory exists.&lt;br&gt;&lt;span class="Apple-style-span"&gt;if&lt;span style="color:black;"&gt; ((&lt;span style="color:blue;"&gt;Test-Path&lt;span style="color:black;"&gt;						&lt;span style="color:orangered;"&gt;$cacheDirectory&lt;span style="color:black;"&gt;) &lt;span style="color:darkgray;"&gt;-eq&lt;span style="color:black;"&gt;										&lt;span style="color:orangered;"&gt;$false&lt;span style="color:black;"&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span"&gt;throw&lt;span style="color:black;"&gt;					&lt;span style="color:darkred;"&gt;"The specified directory does not appear to exist"&lt;br&gt;&lt;span class="Apple-style-span"&gt;}&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:Arial, Helvetica, sans-serif;"&gt;&lt;font class="Apple-style-span" face="Consolas"&gt;&lt;br&gt;&lt;span class="Apple-style-span"&gt;# Get all the PDB files, execute SRCTOOL.EXE on each one.&lt;br&gt;&lt;span class="Apple-style-span"&gt;Get-ChildItem&lt;span style="color:black;"&gt;				&lt;span style="color:navy;"&gt;-Recurse&lt;span style="color:black;"&gt;						&lt;span style="color:navy;"&gt;-Include&lt;span style="color:black;"&gt;								&lt;span style="color:blueviolet;"&gt;*.pdb&lt;span style="color:black;"&gt;										&lt;span style="color:navy;"&gt;-Path&lt;span style="color:black;"&gt;												&lt;span style="color:orangered;"&gt;$cacheDirectory&lt;span style="color:black;"&gt;														&lt;span style="color:darkgray;"&gt;|&lt;span style="color:black;"&gt;																&lt;span style="color:blue;"&gt;ForEach-Object&lt;span style="color:black;"&gt; { &lt;span style="color:blue;"&gt;SRCTOOL.EXE&lt;span style="color:black;"&gt;																				&lt;span style="color:navy;"&gt;-d:&lt;span style="color:orangered;"&gt;$cacheDirectory&lt;span style="color:black;"&gt;																							&lt;span style="color:navy;"&gt;-x&lt;span style="color:black;"&gt;																									&lt;span style="color:orangered;"&gt;$_&lt;span style="color:darkgray;"&gt;.&lt;span style="color:black;"&gt;FullName }&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=14995" width="1" height="1"&gt;</description></item><item><title>The Secret to Avoiding Debugger Slowdowns</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/02/the-secret-to-avoiding-debugger-slowdowns.aspx</link><pubDate>Thu, 03 Jun 2010 00:58:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:14902</guid><dc:creator>jrobbins</dc:creator><slash:comments>8</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/14902.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=14902</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms680693.aspx"&gt;Symbol Servers&lt;/a&gt; are one of the best things that have ever happened in Windows debugging. Having a central store for all PDB files makes the debugging experience so much better because you'll always get exact right symbols with essentially no effort on your part. This means perfect call stacks on native code and if you've done your job correctly by using the &lt;a href="http://msdn.microsoft.com/en-us/library/ms680641.aspx"&gt;Source Server&lt;/a&gt; indexing tools, you'll have the exact version of the source code used for the build automatically show up in the debugger. As the Symbol and Source Servers are trivial to set up, whenever someone tells me they are having trouble getting symbols and source, I do have to wonder if they are serious about developing software.&lt;/p&gt;&lt;p&gt;Probably the most common question I get about the debugger is "Why does the debugger hang on me when I start debugging or occasionally in the middle of debugging?" As wonderful as the Symbol and Source Servers are, I hate to say this, but they are at the root of the problem. In fact, I have a very special extra sensory perception (ESP) skill. Even if I'm not in the office, I can always tell when a company's Source Server has gone down. It's all those emails going back and forth saying "Hey, what happened? This morning I was debugging just fine, but every time I start this afternoon, the debugger hangs. Visual Studio's got a bug." While I'm proud of my ESP skills, I wish they would tell me the winning lottery numbers instead.&lt;/p&gt;&lt;p&gt;As the Symbol and Source Server are utilizing network file shares all it takes is the server going down or an invalid share specified in either the _NT_SYMBOL_PATH environment variable or Visual Studio Options dialog. With the network timeout blocking the user interface, you have two choices. Either wait it out or kill the debugger with Task Manager. Obviously, the first trouble shooting step is to see if you can ping the Symbol Servers you've told the debugger to use. If there's no response, you've solved the problem. With a down Symbol Server, I temporarily work around the problem by starting a Command Prompt or PowerShell window, disable the _NT_SYMBOL_PATH environment variable and start DEVENV.EXE (Visual Studio) or WINDBG.EXE from that shell. When Visual Studio starts, I go into the Options dialog and disable the symbol server there as well.&lt;/p&gt;&lt;p&gt;The other debugger slowdown you run into is when you first start debugging on a new operating system installation, after a major gaggle of updates on &lt;a href="http://en.wikipedia.org/wiki/Patch_Tuesday"&gt;Patch Tuesday&lt;/a&gt;, or your company's Symbol Server is based in another country. In all those cases, the debugger slowdown is because of downloading all the symbols into your local cache. As some of these PDB files can be large and networks spotty, it's a pain.&lt;/p&gt;&lt;p&gt;Fortunately, there's an easy remedy in the SYMCHK.EXE program that comes with the &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;Debugging Tools for Windows&lt;/a&gt; (AKA WinDBG). Instead of having the debugger download the PDB files, the trick is to fill your cache with them before you need them. Of course, if you like having that extra-long debugging session once a month for an extended coffee break you may want to forget all about SYMCHK.EXE.&lt;/p&gt;&lt;p&gt;To make SYMCHK.EXE easier to run always ensure you have the _NT_SYMBOL_PATH environment variable set so you don't have to specify giant sets of command line parameters. (Previously on my blog, I've written PowerShell scripts to make this setup easy for &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/01/22/powershell-script-for-setting-symbol-paths.aspx"&gt;VS 2008&lt;/a&gt; and &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/11/23/powershell-script-for-setting-vs-2010-symbol-paths.aspx"&gt;VS 2010&lt;/a&gt;.) To fill your local symbol cache, run the following two commands to get the .NET and operating systems DLLs:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;font-size:10pt;"&gt;symchk -r C:\windows\Microsoft.NET\*.dll&lt;br&gt;symchk -r C:\windows\System32\*.dll&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Once you get your cache filled, you can keep running those two commands so they pick up any changed files. So I don't have to remember to run the above commands after, on my machines I set up a &lt;a href="http://www.sevenforums.com/tutorials/12444-task-scheduler-create-new-task.html"&gt;Scheduled Task&lt;/a&gt; to run the two commands in a batch file every Wednesday morning at 5:00 AM. Obviously, you can run SYMCHK.EXE against your product's installation directories to get those builds into your cache as well. &lt;/p&gt;&lt;p&gt;Now debugger hangs and stutters should be a thing of the past for you. Less time waiting on the debugger means faster debugging, which means more time writing code. As always if you have any questions about SYMCHK.EXE or symbols in general, let me know in the comments.&lt;/p&gt;&lt;p&gt;Oh! I'm feeling an ESP moment… Numerous of you are thinking "This is all great but what if the debugger hangs on just one or two symbols every time? Is there a way to tell the debugger to skip loading those symbols?" I knew you were going to ask that question, so I wrote about it back on &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/29/keeping-specific-pdb-files-from-loading-in-the-debugger.aspx"&gt;May 29, 2009&lt;/a&gt;. How's that for preparation!? &lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=14902" width="1" height="1"&gt;</description></item><item><title>Writing Data Structure Visualizers for Native C++/STL Code</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/05/16/writing-data-structure-visualizers-for-native-c-stl-code.aspx</link><pubDate>Sun, 16 May 2010 05:27:15 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:14236</guid><dc:creator>jrobbins</dc:creator><slash:comments>3</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/14236.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=14236</wfw:commentRss><description>&lt;p&gt;Pretty much any time I write about a cool .NET only feature here on the blog I get emails or comments about how the native C++ developers are left out in the cold. There are still a lot of applications out there using native C++ and it feels like those developers don't get the love like .NET developers do so here's a post only for the C++ developers out there.
&lt;/p&gt;&lt;p&gt;In keeping up with C++ development, I was looking at the &lt;a href="http://www.boostcon.com/homehttp:/www.boostcon.com/home"&gt;Boost Libraries Conference&lt;/a&gt; 2010 site to see what was discussed at BoostCon 2010. There was a wonderful presentation from &lt;a href="http://nuwen.net/stl.html"&gt;Stephan T. Lavavej&lt;/a&gt; of Microsoft, &lt;a href="http://www.filetolink.com/17ad36ef"&gt;Data Structure Visualizers in Visual Studio 2010&lt;/a&gt;. That's the direct link to the PDF of the slides, but make sure to check out the rest of the conference sessions &lt;a href="http://www.boostcon.com/community/wiki/show/private/2010/"&gt;here&lt;/a&gt;. If you ever wanted to know how to hack the AUTOEXP.DAT to show anything you wanted, this is the session for you. It's advanced and undocumented, but that never stopped a C++ developer before!
&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=14236" width="1" height="1"&gt;</description></item><item><title>Debugging and Performance Tech Focus</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/05/13/debugging-and-performance-tech-focus.aspx</link><pubDate>Thu, 13 May 2010 03:30:21 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:14116</guid><dc:creator>jrobbins</dc:creator><slash:comments>4</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/14116.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=14116</wfw:commentRss><description>&lt;p&gt;Wintellect is so much more than just me posting a random blog entry every once in a while. This year our big marketing focus is to offer unique and interesting content for developers. To that end we've set up our Tech Focus which you can sign up for &lt;a href="http://www.wintellect.com/TechFocus/Registration.aspx"&gt;here&lt;/a&gt;. This gets you special articles each month on all sorts of topics relevant to anyone doing .NET and Windows development.
&lt;/p&gt;&lt;p&gt;For May and June the Tech Focus is on Debugging and Tuning, a topic near and dear to my heart. I've written the first article about debugging and I think it's pretty cool because it's something that helped me out immensely. Also, our Tech Focus offers great tips and tricks over Twitter at the &lt;a href="http://twitter.com/Wintellectuals"&gt;Wintelletuals&lt;/a&gt; feed. I'm super proud to say that all the Debugging and Performance tips for the next two months are &lt;strong&gt;all exactly 139 characters long&lt;/strong&gt;! I figured 140 characters meant they were too verbose and a real developer starts counting at zero, right? Follow us on Twitter to get the total Ninja Zen of killer debugging and performance tips that make haiku's look relatively easy.
&lt;/p&gt;&lt;p&gt;I have to honestly admit that I do not get Twitter at all and will probably never get an account but I loved the challenge of doing two months of real world tips in 139 characters. Perusing through Twitter I had to wonder why anyone would bother with writing any tweets that are less than 139 characters because it shows laziness. I guess it's like what Mark Twain said "&lt;a href="http://thinkexist.com/quotation/i_didn-t_have_time_to_write_a_short_letter-so_i/338386.html"&gt;I didn't have time to write a short letter so I wrote a long one.&lt;/a&gt;" While I certainly don't care what you had for &lt;a href="http://twitter.com/davewiner/status/13431203462"&gt;breakfast&lt;/a&gt;, I greatly appreciate the effort to craft your message to maximize the medium. I should create a web site that shows just tweets that are 139 characters and &lt;strong&gt;DO NOT&lt;/strong&gt; have any goo from that bit.ly abomination in them. Maybe I can start a revolution that focuses on creativity and uniqueness on Twitter instead of the banality that seems to plague it. Are you with me!? Viva la 139 character revolution! Tweet creatively!&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=14116" width="1" height="1"&gt;</description></item><item><title>Add OneNote 2010 Linked Notes Capabilities to your Application</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/05/11/add-onenote-2010-linked-notes-capabilities-to-your-application.aspx</link><pubDate>Tue, 11 May 2010 15:45:33 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:14074</guid><dc:creator>jrobbins</dc:creator><slash:comments>0</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/14074.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=14074</wfw:commentRss><description>&lt;p&gt;If you've ever talked to me or read this &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/12/06/how-i-use-onenote.aspx"&gt;blog&lt;/a&gt;, you know I'm a passionate OneNote user. If it weren't for OneNote, I would be a random mess. One of the new features in OneNote 2010 is &lt;a href="http://www.onenotehelp.com/2009/11/19/take-linked-notes-in-onenote-2010/"&gt;Linked Notes&lt;/a&gt;, which let you link the notes you are taking in OneNote to the program you're working with. Out of the box, Linked Notes supports IE, Word, and PowerPoint. In the screen shot below, I opened Word and PowerPoint and as I switched from each, I wrote a note about the current location. The links don't show unless you are working on that note. To see the page or text you've linked to, move the mouse over the link, as I've done below.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/051110_1544_AddOneNote21.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Linked Notes are very interesting especially if you are working between several of the supported applications at the same time. 
&lt;/p&gt;&lt;p&gt;All that's missing is the hooks into the other browsers, FireFox and Google Chrome, as well as other applications you might use. Fortunately, &lt;a href="http://blogs.msdn.com/mao_chen/default.aspx"&gt;Mao Chen&lt;/a&gt; has done anyone who wants to add Linked Note capability to their applications a huge favor. Mao developed the FireFox and Chrome add-ins that bring Linked Notes to those two &lt;a href="http://blogs.msdn.com/mao_chen/archive/2010/05/11/building-your-linked-notes-support-for-onenote-2010.aspx"&gt;browsers&lt;/a&gt;. He's also documented how to implement your own Linked Note code and has released the source to the add-ins he's written.
&lt;/p&gt;&lt;p&gt;Now I just need to do the Linked Note VSIX for Visual Studio!&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=14074" width="1" height="1"&gt;</description></item><item><title>Paraffin 3.12: A Bug Fix and Three New Features</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/05/11/paraffin-3-12-a-bug-fix-and-three-new-features.aspx</link><pubDate>Tue, 11 May 2010 04:41:12 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:14046</guid><dc:creator>jrobbins</dc:creator><slash:comments>5</slash:comments><comments>http://www.wintellect.com/CS/blogs/jrobbins/comments/14046.aspx</comments><wfw:commentRss>http://www.wintellect.com/CS/blogs/jrobbins/commentrss.aspx?PostID=14046</wfw:commentRss><description>&lt;p&gt;After a bit of rest and relaxation, Paraffin, my tool to make managing your &lt;a href="http://wix.sourceforge.net/"&gt;Windows Installer XML&lt;/a&gt; (WiX) fragments easier makes a surprise appearance back on my blog. If you're not familiar with Paraffin search this blog for numerous entries. Grab the latest version &lt;a href="http://www.wintellect.com/CS/files/folders/8198/download.aspx"&gt;here&lt;/a&gt;. The relevant changes are as follows.
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;I moved everything over to Visual Studio 2010 and .NET 4.0. I put the Visual Studio 2008 compatible project files for Paraffin and the Paraffin Installer into a VS2008Projects directory. Right now none of the code takes advantage of any .NET 4.0 features but as I add features in the future, I probably will use .NET 4.0 things if it makes sense.
&lt;/li&gt;&lt;li&gt;There was a bug in how I handled .ParaffinMold files if the –multiple switch was used to put multiple files into a single component. That's been fixed.
&lt;/li&gt;&lt;li&gt;The new –DiskId switch lets you specify the value of the Component DiskId element so you can split your installers into several packages.
&lt;/li&gt;&lt;li&gt;The new –IncludeFile switch lets you include processing directives into the output .WXS file. This way if you have a set of common WiX preprocessor defines you can include that file. The include files you specified are not checked or validated in any way. If you put "-IncludeFile CommonSettings.wxi" on the Paraffin command line, the include (&amp;lt;?include CommonSettings.wxi?&amp;gt;) appears right after the command line options comment.
&lt;/li&gt;&lt;li&gt;The –Win64 switch has been deprecated in favor of the new –Win64Var switch. In previous versions of Paraffin, -Win64 slapped on a Win64="true" on every component, which made it hard to create a fragment that could be used for both a 32-bit and 64-bit installer. With the –Win64Var switch, you can specify the value. For example, if your build defines yes64 as the WiX preprocessor variable you'd put "-Win64 $(var.yes64)" on the command line so your components all have Win64="$(var.yes64)" and you can control the bitness easier.
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A special thanks to Tim Herby for the ideas to add the –Include and the –Win64Vars switch.
&lt;/p&gt;&lt;p&gt;Numerous people have emailed me asking about the license for Paraffin. I really don't care what you do with the Paraffin source code. All I ask is that if you find a bug please email me (john @ this company's web site). Also, if you add custom features on your own version please email me your code because if the idea you have is suitable to others, I'd love to get it into the main version to benefit others. If your company's legal beagles have a problem with you using Paraffin, please have them email me and I'll sign their paperwork.
&lt;/p&gt;&lt;p&gt;Also several people have asked me to put Paraffin on SourceForge or CodePlex so they can contribute. Well, Paraffin is a tiny niche utility with three source files and it's kind of overkill to go through the hassle of setting up a whole project on one of those systems. If you want to participate, the code is in the download so please start hacking away and I'll be the coordinator. Being that there's realistically like two other people in the world that will ever actually add something to Paraffin I think we can coordinate the project. &amp;lt;grin!&amp;gt; If there are five or six people that start going crazy adding cool features, I'll create a CodePlex project at that point.
&lt;/p&gt;&lt;p&gt;Ben Spiller had an &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/08/12/paraffin-3-11-fixed-directory-reference-option.aspx"&gt;excellent&lt;/a&gt; feature request where you could determine if Paraffin run with the –update switch actually made any changes to the output file. Unfortunately, to get that feature working, I'm going to have to start tracking more information about the files in a directory and I just didn't have time to add that diffing type feature in. It's on my list and I hope to get to it soon.
&lt;/p&gt;&lt;p&gt;Finally, countless people have asked me to change the –update switch to overwrite the original .WXS file. That's one feature I won't do because in Windows Installer the &lt;a href="http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101"&gt;Component Rules are sacred&lt;/a&gt;. If you screw up those Component Rules, you've completely destroyed your installer and possibly left the user's machine in a very bad state. I can just see a situation where I enable that feature, the original developer leaves, and some VP is in the hot seat for a broken installer. They look at the installer fragments see my name and decide to sue me. (Stranger things have happened.) If you want the feature of automatically updating the output .WXS file, the best plan is to go with Major Upgrades for your installer and run Paraffin with the create file options during the build. That is the only safe and approved means for avoiding Component Rules problems and automating your fragment creation.
&lt;/p&gt;&lt;p&gt;As always let me know if you have any feature requests or find any bugs. Thank you all very much for using Paraffin!&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=14046" width="1" height="1"&gt;</description></item></channel></rss>