Four years ago I published a utility to help perform a clean uninstall of Visual Studio 2010. Before we added package reference counting and related bundles to Visual Studio setup, we couldn’t always be sure which products were still required so not everything was removed.
Windows Installer supports advertising features to enable users to later install those features on demand. But Windows Installer may advertise features in when a component is removed from a feature through obsolescence or supersedence. This will leave the product in a broken state while reporting that the patch installed successfully.
The attached Windows Script file allows you to unadvertise features in a Windows Installer product by specifying either a ProductCode or the path to an MSP. If any features are advertised – whether incidental or intentional – the product will be reinstalled and those features added locally to your computer.
In many languages, some variables can take a value of different types but with the same meaning. Variants in script, for example, can take 0 or false; or they can take any non-zero value and true. The following JScript example prints “Same”.
Windows Script custom actions should be avoided. They are difficult to debug, get blocked by virus scanners, and are far more susceptible to machine state than native custom actions. That is indicated by Windows Installer error messages 2738 and 2739, which read:
I defined several private properties and several privileged methods that can access those private properties,
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.
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 document.cookie and a few minor changes to the CollapsiblePanel class, state for unique panels can be remembered.
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 —