Visual Studio Setup

Installation and containerization of the Visual Studio family of products

Latest posts

Sep 20, 2005
Post comments count 0
Post likes count 0

Catching Exceptions in JScript.NET

Heath Stewart

JScript.NET was created to be compatible with JScript while benefiting from and providing access to more robust features of the .NET Framework. If you're accustomed to more oft-used managed languages like C# and VB.NET, catching different types of exception classes should be no stranger. Considering JScript.NET, however, what would you expect to be printed from the code below? If you said nothing then you're correct. Exceptions are wrapped in an that does not extend . You need to extract the exception from the if you'd like to handle different classes of exceptions. One way to do this is using a public static ...

Sep 17, 2005
Post comments count 0
Post likes count 0

Monad Beta 2 Available

Heath Stewart

Want a shell that doesn't peak at the for command and that's built on the latest .NET Framework? Monad beta 2 is available for download! Monad is an object-oriented shell that lets you manipulate output and has an extensible provider model so that you can traverse different data sets. Beta 2 ships with providers for Monad aliases, Windows certificates, environment variables, functions, the Windows registry, variables, and, of course, the file system. Now when haven't you wanted to just cd to a registry key and enumerate or modify the values quickly?The future of system administration is bright with Monad. Check i...

Sep 12, 2005
Post comments count 0
Post likes count 0

Blog Customizations, Part 2

Heath Stewart

As mentioned earlier, I wanted to persist your preferences for whether certain collapsible panels were in the collapsed or expanded state. With a simple ECMA-compliant wrapper class around and a few minor changes to the class, state for unique panels can be remembered. The cookie wrapper class is pretty straight forward: To initialize the , an function is defined for the class that does pretty much the oppose of the function. is also defined to read from the cookie while is changed to write the cookie: All bold lines above show the changes to the class. Now when you expand or collapse a panel, its sibling'...

Sep 12, 2005
Post comments count 0
Post likes count 0

How Patching Works

Heath Stewart

Previously I blogged about what is in a patch, but how do patches work? To put it imply, patches transform a view of the product or products that the patch targets.Patches (.msp files) contain a set of transforms: one transform changes the target product into the upgraded product, and one transform adds information specific to the patch. This latter transform is not applied when patching an administrative image since the patch is baked into the administrative image permanently. If the transform applies the view of the patch is modified and the product is reinstalled with the transformed view.What exactly is the v...

Sep 12, 2005
Post comments count 0
Post likes count 0

Blog Customizations

Heath Stewart

In my seemingly never-ending quest to provide a simple, compact, yet stylish design for this blog I have recently made a customization based on what Josh Ledgard did sometime back to make collapsible panels, though I wanted something more easily reusable. I whipped together an ECMAScript — that is, ECMA-compliant JScript and JavaScript — class as you can see below: Since I'm defining an event handler to handle toggling the CSS attribute, I need to create a closure around the class instance, which is why the private variable is defined. Had I used in the event handler, when the event was fired...

Sep 2, 2005
Post comments count 0
Post likes count 0

Updated Sample MSI Scripts

Heath Stewart

Yesterday I blogged about what a patch file (.msp file) contains, as well as most other Windows Installer files. You might find, however, that some of the sample Windows Installer scripts in the Samples\SysMgmt\Msi\Scripts don't work with patch files. The reason is because you must pass (32) to the automation method. This corresponds to passing to the function. Two scripts in particular that are helpful for enumerating streams and storages in a package are WiStream.vbs and WiSubStg.vbs, and the necessary change to conditionally pass is a simple change, as shown below for WiStream.vbs: 13a14> Const msiOpen...

Sep 1, 2005
Post comments count 0
Post likes count 0

What's in a Patch

Heath Stewart

Windows Installer relies on structured storage for information about the installation package and to store data used by the installation such as any Binary types and cabinet files. Patches (.msp files) are no different in structure but will contain different data. Up until Windows Installer 3.0, patches themselves didn't contain any standard tables but could contain user tables. For Windows Installer 3.0 the tables MsiPatchSequence and MsiPatchMetadata could be added as meaningful tables. What patches have always contained, though, was a set of sub-storages for each transform that transforms the target installer ...

Aug 30, 2005
Post comments count 0
Post likes count 0

Handling GAC and NGEN Operations after Reboot

Heath Stewart

Some people have noticed a general slow-down after restarting their computers after installing a .NET Framework 1.0 or 1.1, or a Visual Studio .NET 2002 or 2003 patch. This is due to a change in how post-reboot operations are handled that are sometimes necessary after installing a patch.Windows Installer automatically schedules files for replacement if the file is locked. If the file is soft-locked, the in-use file is moved and the NTFS link tracker will remove it when all open handles to it are closed. If a file is hard-locked — which is always the case on Windows 9x and Me — then the file is schedul...

Aug 29, 2005
Post comments count 0
Post likes count 0

Supporting our Lifecycle Policy with ARPSYSTEMCOMPONENT

Heath Stewart

To conclude the series of the problems with , we will extend the workaround to support setting to support Microsoft's lifecycle policy on support N and N-1, where N would be a service pack, and N-1 would be the previous service pack or the RTM.Since we've essentially already developed our own sequencing feature in order to keep patches in view at all times, we must also take care of removing those patches' Add/Remove Program (ARP) registry entries when a patch is effectively superseded by a successive patch or service pack. We did that by defining unique properties for each patch and conditions that are also uni...