Aaron Stebner's WebLog

Thoughts about setup and deployment issues, WiX, XNA, the .NET Framework and Visual Studio

October, 2006

  • Aaron Stebner's WebLog

    Centralized article for customizing the Windows Media Center Start menu in Windows Vista


    I have found myself digging through my blog archives several times in the past couple of weeks to send out links to the various posts that I have written about customizing the Windows Media Center Start menu in Windows Vista.  As a result, I decided to create an article that contains all of the links to make it easier to send out via email.  You can check out the article at this location:


    I will keep that article up-to-date with new topics as they are published.

    Also, Charlie Owen recently created a really nice sample that demonstrates how to accomplish many of the techniques that I previously described, and I find that it is much easier to learn these concepts with examples that you can register on your Windows Media Center system and observe the effects that they have.  This sample will be included in the final release of the Windows Media Center SDK for Windows Vista, so I encourage you to refer to the SDK documentation and samples in addition to these blog posts.

  • Aaron Stebner's WebLog

    .NET Framework 3.0 setup log files


    The installer for the .NET Framework 3.0 (formerly named the WinFX runtime components) chains several different MSIs and Windows hotfixes behind the scenes.  If this setup fails, there are numerous possible causes due to the number of packages being chained behind the scenes.

    The following is a complete list of log files that can be produced during .NET Framework 3.0 setup.  This list may vary depending on what OS you are installing on, what processor architecture, and what prerequisite components were already installed on the system prior to running .NET Framework 3.0 setup.

    Logs produced by the .NET Framework 3.0 setup wrapper

    • dd_dotnetfx3install.txt
    • dd_dotnetfx3error.txt
    • dd_depcheckdotnetfx30.txt

    Logs produced by packages chained during .NET Framework 3.0 setup

    • RGB Rasterizer - dd_rgb_retMSI*.txt
    • MSXML 6.0 Parser - dd_msxml_retMSI*.txt
    • WIC - dd_WIC.txt
    • .NET Framework 2.0 - dd_netfx_retMSI*.txt
    • XPS - dd_XPS.txt
    • Windows Communication Foundation - dd_wcf_retMSI*.txt and dd_wcf_retCA*.txt
    • Windows Presentation Foundation - dd_wpf_retMSI*.txt
    • Windows Workflow Foundation - dd_WF_3.0_x86retMSI*.txt
    • Core .NET Framework 3.0 identity package - vsmsilog*.txt

    Logs produced by the .NET Framework 3.0 language pack setup wrapper

    • dd_dotnetfx3lperror.txt
    • dd_dotnetfx3lpinstall.txt 

    Logs produced by packages chained during .NET Framework 3.0 language pack setup

    • Individual .NET Framework 2.0 language pack MSIs - dd_netfx_retMSI_langpack*.txt
    • Individual .NET Framework 3.0 language pack MSIs - vsmsilog*.txt

    Log files will be located in the %temp% directory on the system during installation.  When setup completes successfully, the logs produced by the setup wrapper and the log file named vsmsilog*.txt are moved to a new folder located at %windir%\Microsoft.NET\Framework\v3.0\<product name>\Logs.  The <product name> will be Microsoft .NET Framework 3.0 or one of the language packs (for example - Microsoft .NET Framework 3.0 x64 Language Pack - FRA).

    If you run into any issues while installing the .NET Framework 3.0 and report issues to Microsoft via the product feedback site or the MSDN Forums, please locate and include any of the above log files if possible because it will make it easier for us to debug the failures and find root causes and workarounds.

    <update date="11/9/2006"> Added a list of log files for .NET Framework 3.0 language packs and a couple of other log files that I missed originally.  Also added locations where the logs can be found. </update>


  • Aaron Stebner's WebLog

    Mailbag: How to install Microsoft Report Viewer 2005 in silent mode



    I have seen some of your other posts regarding how to install various parts of Visual Studio 2005 and the .NET Framework 2.0 in silent mode.  I would also like to install the Microsoft Report Viewer 2005 redistributable package in silent mode.  How can I accomplish that?


    The Microsoft Report Viewer 2005 redistributable package uses the same external setup UI handler that the .NET Framework 2.0 does.  That means that all of the .NET Framework 2.0 setup command line parameters apply to the Report Viewer setup package as well.

    To install the Report Viewer package in silent mode, you can use a command line like the following (and you can update it with other parameters based on the list in my previous blog post as needed for your scenarios):

    ReportViewer.exe /q:a /c:"install.exe /q"

  • Aaron Stebner's WebLog

    New episode of the Media Center Show - MCML Development Part 2


    Ian Dixon has posted a new episode of the Media Center Show today.  This episode is part 2 of an interview I did with him a few weeks ago about Media Center Markup Language (MCML) development.  Part 1, which was posted last week, served as an introduction to MCML and some of the resources that are available to developers.  Part 2 goes into more detail about the following MCML development topics:

    • Using Rules in MCML to create dynamic UI
    • Creating assemblies that interact with MCML
    • Advanced UI scenarios that can be accomplished purely with MCML markup (without writing code)
    • Windows Media Center Presentation Layer web applications
    • Packaging and deploying an MCML application
    • How to make your application appear on the Windows Media Center start menu

    Here are links to both episodes of the Media Center Show that focus on MCML development as well as a link to an extra supplemental episode that Ian created where he shows some of the tools and samples included in the Windows Media Center SDK for Windows Vista:

    Hopefully you will find these episodes of the Media Center Show as you develop applications for Windows Media Center for Windows Vista.

  • Aaron Stebner's WebLog

    How to add x64 build configurations to a Visual Studio 2005 solution


    Last week, a customer asked me a question about the FileWriter MSAS sample application that ships in the Windows Media Center SDK for Windows Vista.  This customer was running an x64 build of Windows Vista and could not get FileWriter to correctly create a log file when they built and ran it.  After some investigation, we discovered that the customer was compiling a 32-bit version of this binary, and it was failing to work as expected because all of the COM objects that it was attempting to interact with are only registered in the native 64-bit registry on x64 builds of Windows Vista.

    We were able to resolve this issue by building a native x64 version of this binary.  Unfortunately, we did not include an x64 build configuration in the FileWriter sample application Visual Studio project/solution files.  However, you can manually add x64 build configurations in order to enable this scenario in the Windows Media Center SDK for Windows Vista RC1 or RC2.

    Before these steps will work, you need to make sure that you have the Visual Studio 2005 x64 compilers and tools installed.  This feature is available in the Visual Studio 2005 setup UI under the Visual C++ language tools node, but it is unchecked by default.  If you performed a default install of Visual Studio 2005, you will need to go to Add/Remove Programs, enter Visual Studio 2005 setup maintenance mode and add the x64 compilers and tools feature.

    Once you have this feature installed, you can use the following steps in the Visual Studio 2005 IDE in order to add x64 build configurations and then build a native x64 version of the FileWriter sample application:

    1. Open the FileWriter solution in Visual Studio 2005
    2. From the Build menu, choose Configuration Manager...
    3. In the Active solution platform, choose <New...> to bring up the New Solution Platform dialog
    4. In the Type or select the new platform dialog, choose x64
    5. Click OK in the New Solution Platform dialog to add x64 configurations to your solution
    6. From the Build menu, choose Batch Build... and you should now see Debug | x64 and Release | x64 configurations available


    • If you do not see an x64 option in the Type or select the new platform dialog in step 4 above, that means you do not have the x64 compilers and tools feature installed for Visual Studio 2005.
    • You must have Visual Studio 2005 standard or higher installed in order to build the FileWriter project.  It requires some advanced options that are not available in the Visual C++ 2005 Express Edition.

    We have fixed the FileWriter solution and project files for the Windows Media Center SDK and this fix will be included in the final release of the SDK.  In the meantime, I have posted updated vcproj and sln files for the FileWriter sample that you can copy onto your system that has the Windows Media Center SDK for Windows Vista RC1 or RC2 if you would like to avoid manually configuring the solution/project files using the above steps.

  • Aaron Stebner's WebLog

    New hotfix available for Update Rollup 2 for Media Center 2005 - October 2006 rollup


    Today is the day for the monthly release of new Windows hotfix packages and updates, and there is a new Windows Media Center hotfix that has been released today that I want to draw your attention to:

    October 2006 Update Rollup for Windows XP Media Center Edition 2005 (KB925766)

    This package includes all previous hotfixes issued for Update Rollup 2 for Windows XP Media Center Edition 2005 and also addresses some other bugs that have not been fixed by previous hotfixes.

    This package will be offered as a recommended update if you visit Windows Update on a Windows XP Media Center 2005 system that has Update Rollup 2 installed.  Also, you can download it directly from this location.

    This package includes the following fixes in addition to all previously released fixes. There is more detail about each of these fixes in the knowledge base article for this hotfix:

    • A race condition can occur after you install Microsoft Windows Media Player 11 that causes loss of licenses for protected TV content.  If this happens, it causes TV programs to only play for up to three days.
    • When you scan for services, a connected Italian (Rome) 810 megahertz (MHz) version of MUX is not found.
    • Compatibility fixes for certain third-party audio stream plug-ins.

    Update Rollup 2 is a prerequisite for this package, and this package supercedes the July 2006 Update Rollup (KB919803), the April 2006 Update Rollup (KB914548), the January 2006 Update Rollup (KB912067) and the October 2005 Update Rollup (KB908250).

  • Aaron Stebner's WebLog

    Mailbag: How to set the NoImpersonate flag for a custom action in Visual Studio 2005



    I have built an installer using the Visual Studio 2005 setup project wizard.  It installs correctly on Windows XP but fails on Windows Vista.  I investigated and found that the failure on Windows Vista is caused by a custom action that fails with an access denied error.  However, I am running the setup with elevated privileges in Windows Vista.  How can I fix my setup so it will work correctly on Windows Vista?


    As Robert Flaming described in this blog post, it is necessary to set the NoImpersonate flag for custom actions that modify the system in Windows Vista.  This was an uninforced architectural intent that is now enforced in Windows Vista.

    Unfortunately, there is not a way to directly set this flag for a custom action in the UI for the setup project in the Visual Studio IDE.  In Visual Studio 2005, you can use a post-build step that modifies the MSI to set this bit using a strategy previously described in this blog post.

    You can use the following steps to set the NoImpersonate bit in a Visual Studio 2005 setup project:

    1. Download the sample script and extract the contents to the directory that contains the Visual Studio project you are working on
    2. Open the project in Visual Studio 2005
    3. Press F4 to display the Properties window
    4. Click on the name of your setup/deployment project in the Solution Explorer
    5. Click on the PostBuildEvent item in the Properties window to cause a button labeled "..." to appear
    6. Click on the "..." button to display the Post-build Event Command Line dialog
    7. Add the following command line in the Post-build event command line text box:
      cscript.exe "$(ProjectDir)CustomAction_NoImpersonate.js" "$(BuiltOuputPath)"
    8. Build your project in Visual Studio 2005

    <update date="1/22/2007"> Updated command line in step 7.  The variable I had specified previously was incorrect.  It actually needs to be spelled wrong using "ouput" instead of "output" in the $(BuiltOuputPath) variable </update>

    <update date="3/18/2009"> Fixed broken link to the sample script. </update>


  • Aaron Stebner's WebLog

    File-based algorithm for detecting Windows Media Center version


    A while ago, I posted an item describing how to use a registry value to detect what version of Windows Media Center (if any) is installed on a system.  Since then, we have found a couple of scenarios where this registry value can be overwritten and left in an inconsistent state so that it is not completely reliable for determining the version of Windows Media Center on a system:

    • Repairing or reinstalling Windows XP SP2 on Windows XP Media Center Edition 2005 or higher
    • Installing an incorrectly authored Windows Media Center add-in package

    We have worked with a few add-in developers to fix their installers, so the second scenario rarely happens anymore, but the first problem still exists and the only way to fix the system once it gets into that state is to manually update the versioned registry key.

    Instead of checking a registry value, it is also possible to use file version information to determine which version of Windows Media Center is on a system.  The following table lists the various versions of Windows Media Center, the version registry value that should exist on the system, and a file version you can use to double-check that the expected version of Windows Media Center is actually installed as expected. 

    Windows Media Center version Registry-based version File-based version
    Windows XP Media Center Edition 2002 Any value < 2.0 5.1.2600.1106
    Windows XP Media Center Edition 2004 (Windows XP SP1-based hotfix package) 2.0 5.1.2600.1217
    Windows XP Media Center Edition 2004 (Windows XP SP1-based full OS release) 2.7 5.1.2600.2096
    Windows XP Media Center Edition 2004 (Windows XP SP2-based) 2.8 5.1.2600.2180
    Windows XP Media Center Edition 2005 3.0 5.1.2700.2180
    Update Rollup 1 for Windows XP Media Center Edition 2005 3.1 5.1.2700.2230
    Update Rollup 2 for Windows XP Media Center Edition 2005 4.0 5.1.2710.2732
    Windows Media Center in Windows Vista Home Premium and Ultimate Editions 5.0 6.0.* (Windows Vista has not yet shipped so the file version is to be determined)

    The following registry value is used to store the Windows Media Center version that is referenced in the middle column above:

    • Key name: HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\Media Center
    • Registry value name: Ident
    • Registry value data type: REG_SZ

    To detect the file version, I suggest using the main Windows Media Center shell executable, located at %windir%\ehome\ehShell.exe.

    One other note here - due to some OS setup architectural changes in Windows Vista, we have not seen and do not expect to see the registry value that stores version information being overwritten on Windows Vista.  It is safe to check the registry value and not worry about also checking file versions on Windows Vista.  However, it is recommended to check file versions on Windows XP Media Center systems because of the issues we've seen where the registry value is out of sync with the actual installed version of Windows Media Center on the system.

  • Aaron Stebner's WebLog

    2 more new Media Center applications for Windows Vista - Big Screen Headlines and Big Screen Contacts


    Niall Ginsbourg is at it again.  The developer from Mobilewares, who previously created Big Screen Photos, Big Screen Business and Big Screen Weather, has released beta versions of 2 new Windows Media Center applications for Windows Vista written using Media Center Markup Language (MCML).

    Big Screen Headlines 

    The first new Windows Media Center application, Big Screen Headlines, is an RSS reader application.  Like the Q sample application that ships in the Windows Media Center SDK for Windows Vista, Big Screen Headlines allows you to view podcasts and video blogs.  In addition, you can view test-based RSS feed content.  It integrates feeds that have been subscribed to in Internet Explorer 7, and it includes over 500 preset feeds.  More information about Big Screen Headlines can be found in the following links:

    Big Screen Contacts

    The second new Windows Media Center application, Big Screen Contacts, allows you to view information about people in your Windows Contacts within Windows Media Center.  You can browse your contacts, search by keyword, drill into contact details, track birthdays, display thumbnail photos and more.  More information about Big Screen Contacts can be found in the following links:

    <update date="10/23/2006"> Big Screen Headlines is now available for general beta download and you don't need to email Niall to get access to the installer.  You can download it directly from http://pvrx.org/forums/dl.aspx?ID=36 </update>


  • Aaron Stebner's WebLog

    New MSDN forum launched for .NET Framework setup and deployment issues


    A new MSDN forum was opened yesterday to specifically discuss issues related to .NET Framework installation problems and questions related to deploying the .NET Framework as part of other setup packages.  If you have problems or questions related to installing or deploying any version of the .NET Framework (from 1.0 to 3.0 and eventually beyond that), I encourage you to check out this new forum, search the issues posted there and post new issues there:



  • Aaron Stebner's WebLog

    New episode of the Media Center Show focusing on MCML development


    Ian Dixon has posted the most recent episode of the Media Center Show today.  I talked with Ian a few weeks ago about Media Center Markup Language (MCML) development for Windows Media Center for Windows Vista, and he decided to create a  2 part show based on our talk (part 2 will be coming next week).  The first part focuses on getting started with MCML development, including a discussion of some of the learning tools and samples included in the Windows Media Center SDK (such as McmlSampler and the Q sample podcast and videoblog client).

    In addition, Ian posted a Media Center Show Extra where he presents an overview of both McmlSampler and Q as they appear when running within Windows Media Center.

    Here are links to both the show and the extra segment:

    If you are just getting started with Windows Media Center development, or are thinking about it, I encourage you to check out this episode of the Media Center Show to see how easy it can be to get started.

  • Aaron Stebner's WebLog

    Application compatibility warnings when launching Visual Studio 2005 on Windows Vista RC2


    I installed Windows Vista RC2 a couple of weeks ago and started working on some of the remaining issues for the Windows Media Center SDK for Windows Vista.  The first time I launched Visual C# 2005 Express, Visual Basic 2005 Express and Visual Studio 2005, I received a big scary error dialog and I thought that Visual Studio had crashed.  It looks like the following:

    However, after I read it more closely, I realized that this is just a Windows application compatibility advisory dialog.  This advisory was added to Windows Vista recently because of some known issues that will be fixed with a future Visual Studio 2005 hotfix package (described in more detail in this blog post).

    I wanted to post a message telling you not to panic in case any of you have run into this dialog on Windows Vista RC2 (build 5744.16384).  There are some known issues with running Visual Studio 2005 on Windows Vista (such as this), but many scenarios will work fine.  After I saw this dialog, I checked the Don't show this message again checkbox and launched the IDE and I have not encountered any problems while working on Windows Media Center development scenarios in Visual Basic or Visual C#.

    As a side note, this blog post from Rob Mensching inspired me to try out the Windows Live Writer beta for creating blog posts.  This is the first post that I've composed entirely using Windows Live Writer, and I really like what I see so far.  I can already tell I'm going to make heavy use of the Drafts feature to keep track of all of the random ideas I come up with for blog posts so I don't lose track of them.

    <update date="9/16/2010"> Fixed broken image link. </update>


  • Aaron Stebner's WebLog

    Sample code for launching Windows Media Center and browsing to a specific experience


    A couple of weeks ago, I posted a description of an algorithm that can be used to launch Windows Media Center and automatically browse to a specific experience.  At the end of that post, I mentioned that I was working on a Win32 sample application to demonstrate this algorithm.  I've gotten this sample implemented, code reviewed and tested and it is ready to post for download in case you are interested in seeing an example of how the algorithm can be implemented.

    You can download the example code and a compiled EXE from http://cid-27e6a35d1a492af7.skydrive.live.com/self.aspx/Blog%5E_Tools/LaunchMce.zip.

    This example contains UI that lets the user select a Windows Media Center page ID from a drop down combo box and select the mode to use when launching Windows Media Center.  It performs a version check to make sure that the system the application is run on includes at least Windows Media Center 2004 (the first version that this method of launching Windows Media Center was supported in).  It also includes a command line mode that allows you to pass in the page ID and launch mode and run the application silently.

    Hopefully this helps you get started if you are interested in implementing this algorithm for launching Windows Media Center as a part of your application.

    <update date="3/8/2010"> Fixed broken link for the sample code. </update>


  • Aaron Stebner's WebLog

    Mailbag: How does Media Center decide which extensibility application is launched by SendMessageTimeout?



    I saw your previous post describing an algorithm for launching Windows Media Center and automatically browsing to an experience.  In that post, you stated that using WPARAM value 13 will browse to an extensibility application.  If I have multiple extensibility applications registered on my system, how can I control which one will be launched when using this algorithm?


    When Windows Media Center is launched by sending it a message with WPARAM value 13, it will attempt to launch the first extensibility application it finds that is registered in the OEM Extensibility 1 category.  Here is an example XML registration file that can be used with the RegisterApplication API or the RegisterMceApp.exe utility to register an application in this category:

    <application title="My Application" id="{PUT_GUID1_HERE}">
      <entrypoint id="{PUT_GUID2_HERE}"
                      title="My Entry Point"
                      description="My Entry Point Description"
        <category category="More Programs"/>
        <category category="OEM Extensibility 1"/>

    Note that this example XML registration file is for a Windows Media Center Presentation Layer web application, so it will only work on Windows Vista.  However, the only part that is necessary to allow WPARAM 13 to launch this application is the section <category category="OEM Extensibility 1"/>, so you can adapt this example as needed in order to allow it to work on earlier versions of Windows Media Center.

    Also, it is not necessary to register the application in the "More Programs" category for WPARAM 13 to successfully launch it, but I included that here because without registering it in a category such as "More Programs" the application will not have a visible entry point in the Windows Media Center UI and the user will not be able to launch it by clicking on a tile in the UI.


  • Aaron Stebner's WebLog

    How to control the ordering of custom strips in Windows Media Center for Windows Vista


    I have previously written blog posts describing how to add up to 2 custom strips to the Windows Media Center Start menu in Windows Vista with up to 5 tiles each, and how to specify an exact sorting order for the tiles in a custom strip in the Start menu.

    One interesting behavior that was not covered in those previous blog posts is how to specify an exact order for the 2 custom strips themselves.  By default, when launching Windows Media Center for Windows Vista, the first custom strip will be visible in the Start menu without requiring the user to scroll.  This means that the second custom strip will require the user to take action to scroll down in the Start menu, which can make discoverability of the second custom strip more difficult for the user.

    The following registry value is used to sort the custom strips on the Windows Media Center Start menu:

    • Registry root: HKEY_LOCAL_MACHINE
    • Key name: SOFTWARE\Microsoft\Windows\CurrentVersion\Media Center\Start Menu\Applications\<application GUID>
    • Value name: TimeStamp
    • Value data type: REG_DWORD
    • Value data: The number of seconds that have elapsed since midnight on January 1, 2000 C.E.

    Windows Media Center selects the newest application that is registered to appear on the Start menu and displays the custom strip for it first.  That means you should set a higher TimeStamp value for the application that you want to appear first on the Start menu on your system.

    In order to demonstrate this concept, I have updated the Start menu customization example that I previously posted to include TimeStamp values in both TestApp1.reg and TestApp2.reg.  If you open these registry files in a text editor such as Notepad, you will see that the TimeStamp value equals dword:0c7e59de in TestApp1.reg, and the TimeStamp value equals dword:0c7e59dd in TestApp2.reg.  As a result, the value in TestApp1.reg represents a larger number of elapsed seconds since midnight on January 1, 2000 C.E.  Therefore, TestApp1 is newer from Windows Media Center's perspective, so that custom strip will be displayed first on the Start menu.

    If the custom strips have equal TimeStamp values or undefined TimeStamp values, the order that the custom strips will appear on the Windows Media Center Start menu will not be guaranteed.  Therefore, if you want to enforce an ordering, you must define TimeStamp values for each custom strip.


  • Aaron Stebner's WebLog

    Small update to Visual Studio project template examples I previously published


    A couple of weeks ago, I posted an article describing how to create MSI-based setup packages for Visual Studio project templates, item templates and starter kits using WiX.  Since then, I found out from Bob Arnson (who works on the Visual Studio team and is one of the WiX contributors here at Microsoft) that the custom action used to register new project templates with Visual Studio (devenv.exe /setup) does not display any console UI when it is running.  Because of that, I was able to simplify the example that I previously posted - there is no need to use the QtExec WiX custom action when the action does not display any UI.

    I have updated the example at this location to reflect this change.  Specifically, I made the following changes:

    1. Remove the CA_Devenv_Setup*_Cmd custom actions from the InstallExecuteSequence and the CustomAction definition sections
    2. Update the Visual Studio IDE properties to also append the name of the EXEs and not just locate the directory that they are installed to
    3. Update the CA_Devenv_Setup* custom actions to use the properties that were changed in step 2
    4. Remove the extra reference to wixca.dll that was previously needed to allow us to use the QtExec custom action

    These changes make the example even easier to understand, and hopefully this helps you quickly get started if you are working on a setup package to install Visual Studio project templates.


  • Aaron Stebner's WebLog

    RC2 build (5744.16384) of the Windows Media Center SDK for Windows Vista is now available


    We have posted the RC2 build of the Windows Media Center SDK for Windows Vista on the Microsoft Connect site today.  It is version number 5744.16384 and is designed to install on the RC2 build of Windows Vista, though it will likely work on other builds of Windows Vista starting with RC1 if you don't have access to the RC2 build.

    I posted this item on the Media Center Sandbox blog with a list of some of the changes that you'll notice between the previous SDK build (RC1 build 5600) and this new build.  I encourage you to check out that post for more information, and if you're a member of the Windows Vista beta program, please download this new SDK build and let us know what you think.


  • Aaron Stebner's WebLog

    How we almost shipped a timebomb in Visual Studio, and how I came of age at Microsoft


    I've been meaning to write a blog post to tell this story for a while, and I figured that now that we've passed the 5 year anniversary of when it happened that I should finally take some time and type it all out.  Before I describe the details of the problem and what we did to fix it, I need to set the stage a little bit with some background information.

    At the time, I was working on Visual Studio .NET 2002.  I joined Microsoft in 1999 and at that time, the team had already been working on VS .NET 2002 (then called Visual Studio 7) for about a year.  When we got to the summer of 2001, we finally finished with VS .NET 2002 beta 2 and were finally feeling like we were getting close to shipping a new version of Visual Studio for the first time since 1998.  This was a big milestone for the team because it had been so long since VS6 and a lot of the team members hadn't yet experienced shipping a product at Micrsoft.

    To help get people excited about the upcoming release, our marketing team arranged to distribute 2+ million copies of beta 2 for free in upcoming editions of various programming magazines (such as Dr. Dobbs Journal, etc - I still have my souvenir copy of one of these magazines that I bought at a local bookstore becuase I hadn't yet had the experience of seeing a product I worked on available on a store shelf).  We signed off on beta 2 at the end of June and were about to manufacture all of the DVDs needed for these magazines, which were going to hit the shelves in August.

    As a reward for shipping beta 2, the teams were given a couple of extra days off.  That year, the 4th of July fell on a Wednesday, so they gave the team members Monday and Tuesday off so that everyone could have a 5 day weekend.  The setup/build team could not all take the same days off because some of our activities were mission-critical and couldn't be skipped for 5 consecutive days, so our team was given the choice of taking off Monday and Tuesday or Thursday and Friday.  I happened to choose Thursday and Friday, so I was in work that Monday, July 2nd.  Most of the team chose to take Monday and Tuesday, so we were working with a sort of skeleton crew.

    Unfortunately, we came into work on Monday morning July 2nd to a mail in our inboxes from one of our team members in Japan asking why he wasn't able to launch Visual Studio.  When he tried, he got an error message saying that the product had expired on July 1, 2001 and thanking them for participating in the beta program.  A couple of quick repro scenarios confirmed that we had a big problem, and we literally had to stop the presses from creating more DVDs because otherwise there would be 2 million magazines on the shelves in August with useless copies of Visual Studio .NET 2002 beta 2 in them.

    We did some root cause analysis to locate what was causing this timebomb that we hadn't seen in previous testing.  We had recently implemented some new timebomb and activation scenarios and also created a new Professional edition (previous betas for VS .NET 2002 all shipped the Enterprise edition).  As part of testing the timebomb functionality, we picked up some technology from the Office team that they used for their activation features.  Part of that technology we picked up was a test licensing file that specified a beta timebomb that expired on July 1, 2001 (this was the timebomb date used for a beta version of Office XP from a couple of years prior to that time).  We originally implemented this timebomb and activation logic in the new Professional edition because all of the teams in Visual Studio were focused on the Enterprise edition and we could work through setup-related issues without disrupting day-to-day development and testing for other teams in Visual Studio.  Towards the end of the beta 2 ship cycle, it was decided to ship the Professional edition instead of the Enterprise edition that we had originally planned to ship.  The team had not yet fully understood some of the settings in the licensing files, so we did not realize we needed to test some scenarios where we set the system clock ahead to check for inadvertant timebombs.

    With all of the above information, we found ourselves in a situation where we needed to rebuild the Professional edition MSI with a new licensing file to eliminate this timebomb, then re-test and sign-off on the updated version in time to allow publishers to include copies of the beta 2 DVD in the next issues of their magazines.  To top it all off, we needed to do all of this with a skeleton crew because most of the team was on vacation as a reward for finishing beta 2.

    In order to do this, we decided to surgically patch the licensing files into the existing build and then repackage everything and try it out.  We also decided that we need to change the product code so that we could block users from installing this non-timebombed build on a system that already had the timebombed build installed.  This required some additional work because we had to locate the places in the setup data files where the product code was referenced and change them all to the new code, plus we had to add the old product code to the block list built into setup.

    We tried a couple of scenarios and kept running into issues where we missed instances of the product code in one of the data files, so we decided we needed to re-run the post-build part of the build process so that the data files would be automatically updated.  However, we had to do this in such a way that a full binary recompile did not happen because we wanted to try to not invalidate the product testing that had been done before the holiday weekend.  This post-build process took a couple of hours so we basically had to launch it and sit and wait and hope that the resulting setup package worked.  The first attempt showed us one place where we forgot to update one of the data files, so we had to make a fix, restart post-build and wait a couple of more hours.  Finally, we produced a build that worked in all of the scenarios that we needed to support on late Tuesday afternoon, July 3rd.

    From there, we had to figure out how to get the teams to test and sign off on this updated build, and then get it released to manufacturing again.  My friend and I ended up camping out in the burn lab on the 4th of July producing gold master DVDs that the test teams could use for their sign-off testing, running through test scenarios and helping other teams with their scenarios.  At that time, Visual Studio only planned to ship on CD, but we had to produce a DVD to fit in a magazine slip-cover, so we had to use our single, flaky DVD burner to produce DVDs one by one and hand them to teams for testing.  We also had to create some detailed documentation explaining what the problem was, how we fixed it, and how test teams needed to exercise the new functionality because there was a lot of confusion as teams tried to catch up on their email from the holiday weekend once they realized the seriousness of the situation.

    Fortunately, by the time the majority of the team got back to the office on Thursday the 5th, the heavy lifting was done and we only needed to gather the final sign-off and hand deliver the golden master DVDs to the duplication facility across campus.

    Because of all the manual tweaks that myself and a couple of other people had to do, I basically spent the next month or so not sleeping very well and dreading reading my email for fear of some scenario cropping up that we hadn't accounted for.  Everything felt so rushed, so I was sure that there must be something we would end up missing.  In the end, it turned out fine, and I learned a ton about how our setup worked behind the scenes that I was able to apply to future situations (writing better tools, automation and test cases, helping customers find workaround to odd behaviors in our setups, advising the team about design decisions for future versions, etc).

    Looking back, this scenario is when I really started to feel like I belonged at Microsoft and could fit in and contribute.  It gave me a lot of confidence that I could really make a difference and help solve tricky problems on my own and not need to always ask for help from my manager or other more senior members of the team.


  • Aaron Stebner's WebLog

    New Windows Media Center Presentation Layer (MCML) application now available - Big Screen Weather


    Niall Ginsbourg from Mobilewares (who has also created the Big Screen Photos Flickr photo browser and the Big Screen Business financial application for Windows Media Center for Windows Vista) has created a new Windows Media Center application, this time using Media Center Markup Language.  This application, called Big Screen Weather, provides a wide variety of weather data for Australia, including the following:

    • 7 day forecasts
    • Animated satellite images and radar loops
    • Tide information
    • 72 hour weather history
    • Worldwide weather predictions for 100+ global cities

    You can find a detailed list of features here and some screenshots of the application here.  You can download the latest version of the application at this location.

    It is really exciting to start seeing such a variety of applications being built with the new platform features available in Windows Media Center for Windows Vista.  This application is particularly interesting because Niall developed his previous applications using .NET Framework 3.0 XBAP applications and this is his first attempt to create an MCML application.  Niall provided some detailed feedback about his development experiences, including some comments about the pros and cons of MCML development versus XBAP development for Windows Media Center in this post on the Media Center Sandbox site.  I encourage you to take a look at that post if you are evaluating whether or not to try creating a Windows Media Center application and/or are deciding what technology to use for your development work.


  • Aaron Stebner's WebLog

    How to prevent the Windows XP welcome screen from appearing after installing the .NET Framework 1.1


    Some of you have noticed an installation issue with the .NET Framework 1.1.  If you have a Windows XP-based OS (Home, Professional, Media Center, Tablet PC) that is configured with a single user account so that it will boot directly to the desktop when it is restarted, installing the .NET Framework 1.1 will cause the Windows welcome screen to appear and will prevent the system from booting directly to the desktop without user intervention.  There is a bug in .NET Framework 1.1 setup that causes this - the setup creates a hidden user account named ASPNET (which is used by the ASP.NET worker process), but that account does not have the correct attributes set on it to cause Windows to ignore it when deciding whether or not to show the welcome screen.  Whenever Windows sees more than one user account on the system, it prevents the system from directly booting to the desktop.  A knowledge base article has been published with a relatively simple workaround for this issue - install the .NET Framework 1.1 SP1.

    I heard from a customer this week who found that installing SP1 did not help in the case where he installed the .NET Framework 2.0, then the .NET Framework 1.1, then the .NET Framework 1.1 SP1.  I haven't had a chance yet to figure out exactly what order of installation causes issues or what the root cause is, but in the meantime, there is a registry value that you can add to your system to prevent this issue from affecting you.  You can use the following steps:

    1. Click on the Start menu, choose Run, type cmd and click OK
    2. Type reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v ASPNET /t REG_DWORD /d 0 /f

    After adding this registry value, you should find that if your system previously booted directly to the desktop, it should start doing so again.


  • Aaron Stebner's WebLog

    Updated version of Reporting Add-in that fixes package load failures in Visual WebDev 2005


    A while back, I posted an item describing a possible package load failure when installing the Reporting Add-in on a system that has Visual Web Developer 2005 Express Edition to a non-default path.  At the time I wrote that blog post, I confirmed that there was a setup bug in the Reporting Add-in MSI that caused this issue.  I also contacted the team at Microsoft that created the Reporting Add-in and they indicated that there would be a new MSI for the Reporting Add-in with a fix for this issue and it would be released with SQL Server 2005 SP1.

    This past weekend, I heard from a customer who ran into this exact same error, even though SQL Server 2005 SP1 has been available for several months now.  I looked into this further, and I found that there is an updated Reporting Add-in package that has a fix for the setup issue that causes problems if Visual Web Developer 2005 is installed to a non-default path.  However, the Visual WebDev downloads page still contains a link to the old, broken Reporting Add-in setup package.

    I'm trying to get the team that manages the content of the Express Edition pages on MSDN to update this link, but in the meantime, I want to post it here to hopefully help folks avoid this issue - click on the link to download the updated version of the Reporting Add-in.

    If you have already installed the older version of the Reporting Add-in and are receiving package load failures for it as a result, you can simply download and install the updated version to fix the package load failure errors on your system.


  • Aaron Stebner's WebLog

    How to create setup packages for Visual Studio project templates and starter kits


    When I started working on the Windows Media Center SDK setup for Windows Vista, I did some research to figure out how to install and register project templates and item templates for Visual Studio 2005.  I did not find much documentation describing how to install project templates as part of an MSI-based setup package.  As a result, I had to learn how to do most of what I needed to do by reverse engineering some existing setup packages (such as Votive and Visual Studio setup itself).

    I decided to create an article with a set of instructions for how to create an MSI package for Visual Studio project templates, item templates and starter kits based on my learning.  To facilitate this, I created an example WiX-based installer that uses the same project and item templates that I originally created for the Windows Media Center SDK.  I also created some reusable WiX fragments (here for the WiX 2.0 version and here for the WiX 3.0 version) that you can include in your own WiX-based setup to detect the appropriate Visual Studio 2005 editions and features.

    I encourage you to check out this article if you are planning to create installers for Visual Studio project templates, item templates and/or starter kits.


Page 1 of 1 (22 items)