Windows 7 E Best Practices for ISVs

Not open for further replies.


Call me Mak or K, Mod Emeritus
This is pretty much going to be a copy/paste job as it is a bunch of questions with answers. The source is the Windows 7 Blog located here.

I took the most common questions and posed them to Arik Cohen, a Program Manager who is working on the E editions of Windows 7. If you have other questions about how this could affect your applications, please add your comments to the post to let us know and we'll work to get your questions answered.

Q: What are the differences between standard editions of Windows 7 and E editions of Windows 7?

A: The only functional difference is that the Internet Explorer 8 component is not available. This is the same component that your users can turn off in the “Turn Windows features on and off” control panel in the Windows 7 RC build. The Internet Web Platform components (for example, WebOC) are still installed and available on all editions of Windows 7, since they are part of the Windows core.


Q: How should I test my application to ensure that it will work without IE?

A: To get the same functional behavior as a clean install of the E editions of Windows 7, go to “Turn Windows features on and off” dialog and uncheck Internet Explorer 8. We recommend testing your application both without a browser installed and with a browser installed (remember to set the installed browser as the default).

Q: What happens if I try to open a link without a browser installed?

A: You will get an “Application not found” exception.


Q: What general impacts of Windows 7 E editions have you seen on applications – especially ones that rely on the WebOC?

A: During our application compatibility testing, we've found that the vast majority of applications work on Windows 7 E editions without any changes. This includes applications that use many of the Internet Web Platform embedding methods (including WebBrowser control, hosting Trident, and HTML Help).

For instance, the following screenshot shows a .NET application that embeds the WebBrowser control running correctly on the E edition of Windows 7.


Q: My Windows application (WPF, Win Forms, Java, etc.) uses the Web Browser control. Is there any compatibility issue?

A: Everything should work as expected. However, we've seen some issues when applications depend directly on a specific browser. In particular, if while using the Web Browser control, you allow the application to open new windows that do not respect the user's default browser choice, you may see some issues.

Q: What are the most common issues that you have found in your testing of applications? And what do you recommend ISVs do about them?

A: I have seen applications encounter three classes of issues on E editions of Windows 7:
The application has hard coded dependencies to launch Internet Explorer when starting a browser to access the net. This is normally done by explicitly launching “iexplore.exe” rather than running a ShellExecute on This generates an exception on a Windows 7 system without IE installed and enabled. There are times when this is intentional (for example, the Web site you are opening is only supported on IE), in which case you probably want to check for IE availability and provide a good error message to the user if it's not available.

We've seen this many times, especially in instances where the desired behavior is to open the application in the user's default browser. You will need to switch to using the more generic case for these scenarios.

The application allows launching a new window from within the WebBrowser control (for example, user accesses “Open in New Window” via the content menu, the page does a call, etc.).

These links would always have opened in IE (regardless of the default browser on the system). If you designed your application to open in the default browser, you will need to provide a function that allows that.

The recommended way to implement custom behavior when opening a new window is to use the NewWindow3 event. Sample code to hook this up in a C# .NET application would look like the following examples.

In the form initialization code:
         SHDocVw.WebBrowser web1 = 

web1.NewWindow3 += 
        new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(web1_NewWindow3);

And the handler:
void web1_NewWindow3(
                ref object ppDisp, 
                ref bool Cancel, 
                uint dwFlags, 
                string bstrUrlContext, 
                string bstrUrl )
    Cancel = true;

Applications don't handle cases where no browser is installed on the system. We have seen applications that don't handle this failure case when executing a URL.

These tend to occur when users don't have a default browser on their systems and then try to click a “go online for more information” link. We think this is going to be an extremely narrow case – even so, applications should handle these failures gracefully.

Q: How do I identify the user's default browser?

A: Use the IApplicationAssociationRegistration::QueryCurrentDefault API to determine the registered browser by checking QueryCurrentDefault(“http”, AT_URLPROTOCOL, AL_EFFECTIVE, out progID).

Q: My app needs to open the browser. What are the best practices?

A: Run shellexecute() without hard-coding the name of the browser. Respect the user's choice of default browser and gracefully handle cases where no browser is installed on the system.

Q: How can I check if I'm running in one of the E edition for Windows 7?

A: The GetProductInfo() API (introduced in Windows Vista) is how to tell exactly what edition of Windows you are running. The new constant values for the E editions of Windows 7 will be available in the Windows 7 SDK.

Example of code to determine if you are running on Home Premium vs. Ultimate:
        internal static extern bool GetProductInfo(
            int osMajorVersion,
            int osMinorVersion,
            int spMajorVersion,
            int spMinorVersion,
            out uint edition);

        private void CheckEdition()
            uint edition;
            GetProductInfo(6, 1, 0, 0, out edition);

            switch ((ProductEditions)(edition))

                case ProductEditions.HOMEPREMIUM :
                case ProductEditions.HOMEPREMIUME:
                case ProductEditions.HOMEPREMIUMN:

                    MessageBox.Show("Running on a Home Premium edition");

                case ProductEditions.ULTIMATE :
                case ProductEditions.ULTIMATEE:
                case ProductEditions.ULTIMATEN:
                    MessageBox.Show("Running on an Ultimate edition");


Q: Are the E editions of Windows 7 going to be available on MSDN? If so, when?

A: Yes, both the E editions of Windows 7 and the standard editions will be available on MSDN at the same time.

Q: What about the Internet Explorer 8 Feature Pack for Windows 7 E? If and when will Microsoft release it to the public?

A: Yes, the Internet Explorer 8 Feature Pack for Windows 7 E will be available on the Microsoft Download Center soon after Windows 7 becomes generally available.

Giorgio Sardo

IE Technical Evangelist – Microsoft Corp

There is a bunch of links and more information that can be read. So please visit the blog for more information if what is posted is not enough.
Not open for further replies.
Top Bottom