{"id":18412,"date":"2012-10-12T13:18:00","date_gmt":"2012-10-12T13:18:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2012\/10\/12\/improvements-in-net-framework-setup-for-developers-it-pros-and-users\/"},"modified":"2021-10-04T12:57:55","modified_gmt":"2021-10-04T19:57:55","slug":"improvements-in-net-framework-setup-for-developers-it-pros-and-users","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/improvements-in-net-framework-setup-for-developers-it-pros-and-users\/","title":{"rendered":"Improvements in .NET Framework Setup for Developers, IT Pros, and Users"},"content":{"rendered":"<blockquote>\n<p><i>The only experience most Microsoft customers have with the .NET Framework is the deployment and installation experience, which is why we spend so much time analyzing opportunities to improve it. For .NET 4.5, our goal was to build a product that was equivalent to a service pack with additional features. Our team studied how other products with similar update goals managed to improve their deployment then we took those best practices and applied them to the .NET Framework 4.5. This is an area where we heavily rely on telemetry data to prioritize areas of improvement, a practice that has led to noticeable change over past releases. In the following article, <b>Nithya Chandrasekaran and Richard Lander, program managers from the .NET setup and CLR teams respectively<\/b>, describe some of the deployment improvements. &#8211;Brandon<\/i><\/p>\n<\/blockquote>\n<p>In this post, we will look at the changes that we made in .NET Framework 4.5 setup to alleviate pain points that have affected developers, IT pros, and end users for several releases. Early data suggests that we hit the mark. In addition to describing the improvements we made, we&#8217;ll address deployment-related questions and provide guidance.<\/p>\n<h3>Deploying the .NET Framework to hundreds of millions of machines<\/h3>\n<p>Millions of end users rely on .NET Framework apps every day, for entertainment, for social connections, and, of course, to do their work. The apps they use require the presence of the .NET Framework runtime and class libraries. We have improved the .NET Framework 4.5 installation experience for users, so they can install software quickly and easily.<\/p>\n<p>The .NET Framework is also necessary for running ASP.NET websites and Windows Communication Foundation (WCF) services. In most cases, the installation improvements we made for end users also help developers and IT pros who maintain servers. <\/p>\n<p>Over the years, we\u2019ve adopted a broad set of strategies to get the .NET Framework installed on end user machines. As a result, end users can run the apps they want, without needing to understand that they depend on the .NET Framework. This is primarily accomplished by giving developers and enterprise IT pros the tools they need to install the .NET Framework as part of their existing software deployment methods. We also include the .NET Framework with Windows and deliver it through Windows Update, which removes the need to install the .NET Framework as a separate step in many cases. <\/p>\n<p>We think of our relationship with you, as developers and enterprise IT pros, as a partnership for delivering a great experience to our shared customer, the end user. We are all successful when the end user can quickly acquire, install, and start using your app, and can easily install the .NET Framework as part of your app&#8217;s setup. Through your apps, we have installed the .NET Framework 4 on hundreds of millions of computers, and on well over half of machines running Windows throughout the world. We want to build on that success as you adopt the .NET Framework 4.5 and enjoy the improvements we\u2019ve made available. <\/p>\n<p><b>Content in this post:<\/b><\/p>\n<ul>\n<li>Improvements in .NET Framework 4.5 setup<\/li>\n<li>How end users get the .NET Framework 4.5<\/li>\n<li>Building app setup programs that include the .NET Framework 4.5<\/li>\n<li>Treatment of the .NET Framework 4<\/li>\n<li>Detecting the .NET Framework<\/li>\n<\/ul>\n<h3>Improvements in .NET Framework 4.5 setup<\/h3>\n<p>With the .NET Framework 4.5, we wanted to be ready to reach over a billion end users. To a large degree, we focused on improvements that would benefit end users. Those same improvements will also benefit you, as developers and IT pros, to help you more easily deploy the .NET Framework 4.5 with your apps.<\/p>\n<p>Before we go into the improvements that we made, it is important for you to understand the basic characteristics of the new release. It is best to think of the .NET Framework 4.5 as a service pack of the .NET Framework 4 with new features. As part of its installation, it updates and replaces the .NET Framework 4.<\/p>\n<p>The following sections discuss three major improvements we made:<\/p>\n<ul>\n<li>Providing a single offline .NET Framework installer for supported platforms<\/li>\n<li>Reducing system restarts<\/li>\n<li>Improving installation reliability<\/li>\n<\/ul>\n<p>The single installer and the improvements to reduce reboots require a small degree of coordination from you. You can think of this coordination as another way in which we are partnering to provide a great experience to end-users.<\/p>\n<h4>Single .NET Framework installer<\/h4>\n<p>In earlier releases of the .NET Framework, we provided multiple variations of the .NET Framework installer for you to choose from. These variations included client and extended installers, and separate downloads for x86, x64, and IA64 machine architectures. <\/p>\n<p>The biggest motivation for creating these separate installers was file size. We didn\u2019t want to burden apps with functionality that they didn\u2019t need. These decisions were made during a time when many developers distributed their apps on CDs and DVDs. In some cases, they didn\u2019t allow much space for the .NET Framework, so we needed to find ways to fit. However, developers sometimes chose the wrong installer, which left end users with a non-optimal experience.<\/p>\n<p>As part of the .NET Framework 4, we shipped a Client Profile installer that was 41 MB and supported both x86 and x64 platforms. Many of you were enthusiastic about the Client Profile, because it was much smaller than the full .NET Framework 3.5 installer (which was around 250 MB) and supported both x86 and x64 machines. However, it wasn&#8217;t always obvious when the Client Profile was appropriate to use. In some cases, apps installed the Client Profile, but used third-party controls and libraries that needed the full profile. <\/p>\n<p>Our telemetry shows that a large number of .NET Framework 4 apps need the full profile. We know that thousands of end users see the following dialog box every day, because they&#8217;re using apps that installed the .NET Framework Client Profile but needed the .NET Framework 4 full profile. While this dialog box helps end users install the .NET Framework version they need, it is a confusing experience for many people.&#160; Instead, we produced a single profile for the .NET Framework 4.5, removing the Client Profile option. At the same time, we were able to keep the full profile installer for the .NET Framework 4.5 under 50MB, similar to the .NET Framework 4.0, but much smaller than earlier versions. <\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/8407.image_3664C5E3.png\" width=\"415\" height=\"196\" \/><\/p>\n<p align=\"center\">Dialog box displayed when an end user is missing the .NET Framework 4 full profile<\/p>\n<p>Another goal was to reduce the number of chip architectures to consider. In the .NET Framework 4, we merged the x86 and x64 downloads but left IA64 as a separate package. In the .NET Framework 4.5, we noticed the low use of IA64, and eliminated IA64 support. <\/p>\n<p>In the .NET Framework 4.5, we&#8217;ve simplified the choice. You select from two installer types, online and offline:<\/p>\n<ul>\n<li>Web installer (bootstrapper)<\/li>\n<ul>\n<li>Very small (&lt;1MB)<\/li>\n<li>Requires an online connection<\/li>\n<li>Downloads and installs only the components needed for a given machine (for example, only x86 components on an x86 machine) <\/li>\n<li>Installs the appropriate language pack automatically<\/li>\n<\/ul>\n<li>Standalone (offline) installer<\/li>\n<ul>\n<li>50 MB in size<\/li>\n<li>Contains files for all platforms .NET Framework 4.5 supports (x86 and x64 machines)<\/li>\n<li>Doesn\u2019t install language packs; you must install the appropriate language packs<\/li>\n<li>Doesn&#8217;t require an online connection<\/li>\n<\/ul>\n<\/ul>\n<h4>Reducing system restarts<\/h4>\n<p>Most end-users have probably had the experience of trying to install an app and getting a dialog box indicating that they have to restart their computer. This happens when an installer cannot update files because they are in use by another process. An easy way to make those files available for updating is to restart the machine. However, there are other approaches that provide a better user experience, so we looked at those options. <\/p>\n<p>The .NET Framework 4.5 installation replaces .NET Framework 4 files and requires those files to be available during installation. Therefore, the setup program has the potential to require a restart if .NET Framework 4 apps are running. To mitigate that situation, we built a restart manager that enables end users to automatically close apps that are using the .NET Framework 4. By doing so, end users can prevent reboots of their machines. <\/p>\n<p>In the example below, an end user receives a prompt that Turbo Tax Premier 2011 is using the .NET Framework 4 and has to be closed. The user clicks Yes to proceed with a reboot-free installation experience. Many users will recognize this prompt from other popular apps and platforms. <\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/5344.image6_375F4671.png\" width=\"510\" height=\"349\" \/><\/p>\n<p align=\"center\">Restart manager prompt<\/p>\n<p>The setup program displays this prompt when end-users install the .NET Framework directly. When the .NET Framework 4.5 is installed as part of an application&#8217;s setup, it is usually configured to run in silent mode. By default, .NET Framework 4.5 setup does not show the restart manager in silent mode. However, you can provide this experience to your users with a little extra work on your part. We need your help, because our setup program cannot determine the right point in your app&#8217;s setup to display the prompt.<\/p>\n<p>Initial data for the .NET Framework 4.5 setup shows that the restart manager feature has eliminated over half of possible reboots. That\u2019s a big improvement.<\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/5758.image12_2C35BC27.png\" width=\"624\" height=\"289\" \/><\/p>\n<p align=\"center\">Distribution of reboots for interactive installs<\/p>\n<p>The steps to use the restart manager in silent mode are explained in <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/hh527997(v=vs.110).aspx\">Reducing System Restarts During .NET Framework 4.5 Installations<\/a> in the MSDN Library. You may also want to watch the Channel 9 video <a href=\"https:\/\/channel9.msdn.com\/posts\/NET-45-Reducing-Reboots-during-Framework-Installation\">Reducing Reboots During Framework Installation<\/a>, which explains the work behind this feature.<\/p>\n<h4>Improving installation reliability<\/h4>\n<p>After earlier releases of the .NET Framework, we saw that a small percentage of end users were experiencing installation failures that were preventing them from running the .NET Framework apps they wanted. In the .NET Framework 4, we made improvements that reduced this percentage of end users. <\/p>\n<p>However, we knew that we needed to do better. A few years ago, we added better telemetry to .NET Framework 4 setup to get more concrete data about installation reliability. We also used developer feedback from <a href=\"https:\/\/connect.microsoft.com\/\">Microsoft Connect<\/a> to broaden and prioritize our work. As a result, we were able to determine the failure conditions accurately and resolve the most prevalent cases. For example, end users used to encounter installation failures due to adding assemblies into the .NET Framework global assembly cache during installation. This category of failure has been completely eliminated from the .NET Framework 4.5 installation experience. <\/p>\n<p>Early telemetry from .NET Framework 4.5 setup suggests we achieved an important jump in reliability. In the .NET Framework 4.5, we were able to cut the observed failure rate by half. We know that the .NET Framework 4.5 will end up being installed on over a billion machines globally, so this improvement is a critical one.<\/p>\n<p>We have data about the reliability of our setup in a number of different environments. For example, we have seen very high success rates when the .NET Framework 4.5 is chained (included) with a custom setup program. In terms of corporate roll-outs, we have heard from Microsoft IT that the .NET Framework roll-out across Microsoft was very successful. Early discussions with large customers suggest very similar results with corporate-wide rollouts. That\u2019s great to hear. We should also note that we rolled out the .NET Framework 4.5 Beta and RC across large subsets of Microsoft (&gt;10,000 installations with each prerelease) as part of ensuring that we were delivering a highly reliable product. We know that we\u2019ve delivered a product with the right reliability characteristics and that you can take a dependency on it with confidence.<\/p>\n<h3>How end users get the .NET Framework 4.5<\/h3>\n<p>Many end-users will use the .NET Framework 4.5 over the next several years, possibly as part of installing and running your app. To support these users, we have established a broad set of distribution channels. <\/p>\n<h4>Supported operating systems<\/h4>\n<p>The .NET Framework 4.5 is already built into the following operating systems, so it doesn&#8217;t require separate installation:<\/p>\n<ul>\n<li>Windows 8<\/li>\n<li>Windows Server 2012<\/li>\n<\/ul>\n<p>The .NET Framework 4.5 can also be installed on the following systems, by downloading the redistributable installer (<a href=\"http:\/\/go.microsoft.com\/fwlink\/?LinkId=225704\">web<\/a> or <a href=\"http:\/\/go.microsoft.com\/fwlink\/?LinkId=225702\">offline<\/a>), which supports both x86-based and x64-based computers:<b><\/b><\/p>\n<ul>\n<li>Windows Vista SP2<\/li>\n<li>Windows 7 SP1<\/li>\n<li>Windows Server 2008 R2 SP1<\/li>\n<li>Windows Server 2008 SP2<\/li>\n<\/ul>\n<h4>Distribution channels <\/h4>\n<p>The .NET Framework 4.5 can be deployed through the following distribution channels. <\/p>\n<p><b>For consumer users:<\/b><\/p>\n<ul>\n<li>Software update through <a href=\"http:\/\/www.update.microsoft.com\/\">Windows Update<\/a><\/li>\n<li>Direct download from <a href=\"http:\/\/go.microsoft.com\/fwlink\/?LinkId=225702\">Microsoft Download Center<\/a> or <a href=\"http:\/\/msdn.microsoft.com\/subscriptions\/downloads\/default.aspx#searchTerm=.NET%20Framework%204.5&amp;ProductFamilyId=0&amp;Languages=en&amp;PageSize=10&amp;PageIndex=0&amp;FileId=0\">MSDN<\/a><\/li>\n<li>Installed by apps as a prerequisite (for example, by Visual Studio)<\/li>\n<li>Preinstalled by OEMs (OPK)<\/li>\n<\/ul>\n<p><b>For enterprise users:<\/b><\/p>\n<ul>\n<li>Deployment through <a href=\"http:\/\/www.microsoft.com\/en-us\/server-cloud\/system-center\/default.aspx\">System Center<\/a><\/li>\n<li>Software update through <a href=\"http:\/\/www.microsoft.com\/en-us\/download\/details.aspx?displaylang=en&amp;id=5216\">Windows Server Update Services <\/a>(WSUS)<\/li>\n<li>Same options as listed for consumer users<\/li>\n<\/ul>\n<p>In enterprises, users typically get the .NET Framework deployed as a part of a deployment\/update channel managed by an administrator. <a href=\"http:\/\/www.microsoft.com\/en-us\/server-cloud\/system-center\/default.aspx\">System Center<\/a> deployments and <a href=\"http:\/\/www.microsoft.com\/en-us\/download\/details.aspx?displaylang=en&amp;id=5216\">Windows Server Update Services <\/a>(WSUS) are commonly used for a variety of software, including the .NET Framework. By using WSUS, administrators can manage the distribution of updates that are released through Windows Update to computers in their network. Detailed instructions on using System Center for .NET Framework deployments are provided in the <a href=\"http:\/\/msdn.microsoft.com\/library\/ee390831\">Deployment guide for Administrators<\/a>.<\/p>\n<h3>Building app setup programs that include the .NET Framework 4.5<\/h3>\n<p>After you have built your app, you can create an installer by using Visual Studio 2012. You can also create custom installer packages through open source technologies like Windows Installer XML (WiX). Both options will help you create an installer that includes the .NET Framework 4.5 and delivers a great experience to the end user.<\/p>\n<h4>Targeting the .NET Framework 4.5<\/h4>\n<p>The <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ee942965\">deployment guide for developers<\/a> provides detailed information about how to create setup experiences using these tools. Before you build a setup program, you must verify that your app properly targets the .NET Framework 4.5 by using the <b>Target Framework<\/b> option in Visual Studio. (See <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/bb398202.aspx\">How to: Target a Version of the .NET Framework<\/a> in the MSDN Library for instructions.) <\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/2605.image19_0C1AAF6A.png\" width=\"264\" height=\"150\" \/><\/p>\n<p align=\"center\">Targeting the .NET Framework 4.5 in Visual Studio 2012<\/p>\n<p>Apps that target the .NET Framework 4 will run on the .NET Framework 4.5, but will not be able to use any of the new APIs that are available in the newer version.<\/p>\n<p>In the following sections, we&#8217;ll look at three ways to build a setup program that deploys the .NET Framework with your app: <\/p>\n<ul>\n<li>ClickOnce (available with Visual Studio)<\/li>\n<li>InstallShield (available with Visual Studio)<\/li>\n<li>Windows Installer XML (WiX) toolset<\/li>\n<\/ul>\n<h4>Building a setup program using Visual Studio and ClickOnce<\/h4>\n<p>You can use Visual Studio 2012 to create a setup program for your app by using <a href=\"http:\/\/msdn.microsoft.com\/en-US\/library\/t71a733d(v=vs.110).aspx\">ClickOnce<\/a>. The following screen illustration demonstrates how you select the .NET Framework 4.5 as a prerequisite and create a ClickOnce installer in Visual Studio. For step-by-step directions, see the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ee942965.aspx#clickonce\">.NET Framework Deployment Guide for Developers<\/a>.<\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/7418.image25_6BFFA2AC.png\" width=\"626\" height=\"231\" \/><\/p>\n<p align=\"center\">Selecting the .NET Framework 4.5 as a prerequisite in ClickOnce <\/p>\n<p>The following screen illustration shows the end user experience that a setup program built with ClickOnce provides. <\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/1145.image31_59B6DBEA.png\" width=\"624\" height=\"312\" \/><\/p>\n<p align=\"center\">ClickOnce setup program installing the .NET Framework 4.5<b><\/b><\/p>\n<h4>Building a setup program using Visual Studio and InstallShield <\/h4>\n<p>You can also use Visual Studio 2012 to create a setup for your app by using <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/2kt85ked(v=VS.110).aspx\">Installshield Limited Edition<\/a>. The following screen illustration shows how to select the version of the .NET Framework redistributable to be included with your app setup. For step-by-step directions, see the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ee942965.aspx#installshield\">.NET Framework Deployment Guide for Developers<\/a>.<\/p>\n<p><img decoding=\"async\" title=\"image37\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image37\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/4452.image37_52979F72.png\" width=\"879\" height=\"295\" \/><\/p>\n<p align=\"center\">Selecting the .NET Framework 4.5 as a prerequisite using InstallShield <\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/2318.image44_0737FBAE.png\" width=\"642\" height=\"314\" \/><\/p>\n<p align=\"center\">Installshield Setup program installing .NET Framework 4.5<\/p>\n<h4>Building a setup program using WiX<\/h4>\n<p>You may also use an open source installer tool set such as <a href=\"http:\/\/wixtoolset.org\/\">WiX<\/a> to build a custom installation package. WiX enables you to create an app setup package that installs both your app and <a href=\"http:\/\/wix.sourceforge.net\/manual-wix3\/install_dotnet.htm\">the .NET Framework<\/a> as a prerequisite. <\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/1541.image53_671CEEF0.png\" width=\"624\" height=\"343\" \/><\/p>\n<p align=\"center\">Setting the .NET Framework 4.5 as a prerequisite in a WiX setup project in Visual Studio<\/p>\n<p>The following screen illustration shows the end user experience that a setup program built with WiX provides.<\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border: 0px currentcolor;margin-right: auto;margin-left: auto;float: none\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2012\/10\/3660.image57_22DC87A4.png\" width=\"495\" height=\"310\" \/><\/p>\n<p align=\"center\">WiX setup program installing the .NET Framework 4.5<\/p>\n<h3>Treatment of the .NET Framework 4<\/h3>\n<p>You may be wondering what happens to an existing .NET Framework 4 installation on an end-user machine when the .NET Framework 4.5 is installed. It is also likely that some of your customers will ask you the same question. At a high-level, and as stated earlier, you should think of the .NET Framework 4.5 as a service pack of the .NET Framework 4 that also includes additional features.<\/p>\n<p>The .NET Framework 4.5 installer updates and replaces the .NET Framework 4 installation. After the .NET Framework 4.5 installation completes, an end user will no longer have the .NET Framework 4 on their machine, but will be able to run apps built with both the .NET Framework 4 and 4.5. In addition, Programs and Features in Control Panel will include an entry for the .NET Framework 4.5 but not for the .NET Framework 4. <\/p>\n<p>We chose to create the .NET Framework 4.5 as in-place update of the .NET Framework 4 to enable end users to:<\/p>\n<ul>\n<li>Benefit from fundamental improvements made in the .NET Framework 4.5, such as performance and reliability.<\/li>\n<li>Experience better performance for .NET Framework 4 and 4.5 apps, since they need to load only one version of the .NET Framework (version 4.5) into memory.<\/li>\n<li>Install only one set of servicing updates from Windows Update instead of two.<\/li>\n<\/ul>\n<p>If an end user uninstalls the .NET Framework 4.5, they will no longer have either the .NET Framework 4 or 4.5 installed on their computer. As a result, they will not able to run apps built with either the .NET Framework 4 or 4.5. Reinstalling the .NET Framework 4.5 will enable them to run these apps again. Reinstalling the .NET Framework 4 would enable them to run apps built with the .NET Framework 4, but not 4.5.<\/p>\n<h3>Choosing an installer and detecting the .NET Framework<\/h3>\n<p>Before we review some of the common questions about deployment, I\u2019d like to direct you to the following guidance documents on MSDN that we updated for the .NET Framework 4.5:<\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"270\">\n<p>Deployment guide for developers<\/p>\n<\/td>\n<td valign=\"top\" width=\"288\">\n<p><a href=\"http:\/\/msdn.microsoft.com\/library\/ee942965\">http:\/\/msdn.microsoft.com\/library\/ee942965<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"270\">\n<p>Deployment guide for administrators<\/p>\n<\/td>\n<td valign=\"top\" width=\"288\">\n<p><a href=\"http:\/\/msdn.microsoft.com\/library\/ee390831\">http:\/\/msdn.microsoft.com\/library\/ee390831<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"270\">\n<p>Deploying the .NET Framework and applications<\/p>\n<\/td>\n<td valign=\"top\" width=\"288\">\n<p><a href=\"http:\/\/msdn.microsoft.com\/library\/6hbb4k3e\">http:\/\/msdn.microsoft.com\/library\/6hbb4k3e<\/a><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b>Q: Which .NET Framework 4.5 installer should I select?<\/b><\/p>\n<p><b>A:<\/b> Choose the right installer to provide the best application installation experience to your customers. The two installers have the following characteristics, which should help you make the right choice. <\/p>\n<p><b><\/b><\/p>\n<ul>\n<li>Web installer (bootstrapper) <\/li>\n<ul>\n<li>Pro: Very small (&lt;1 MB)<\/li>\n<li>Pro: Downloads only the components required by the target platform <\/li>\n<li>Pro: Installs the language pack for end-users, per operating system locale<\/li>\n<li>Requirement: Internet connection <\/li>\n<\/ul>\n<li>Standalone (offline) installer <\/li>\n<ul>\n<li>Pro: Contains files for all.NET Framework platforms, for x86 and x64<\/li>\n<li>Pro: Offline-capable, but larger size<\/li>\n<li>Requirement: You must install language packs separately<\/li>\n<\/ul>\n<\/ul>\n<blockquote style=\"margin-right: 0px\"><\/blockquote>\n<p>Locations:<\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"218\">\n<p>Web bootstrapper<\/p>\n<\/td>\n<td valign=\"top\" width=\"315\">\n<p><a href=\"http:\/\/go.microsoft.com\/fwlink\/?LinkId=225704\">http:\/\/go.microsoft.com\/fwlink\/?LinkId=225704<\/a><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"218\">\n<p>Standalone installer<\/p>\n<\/td>\n<td valign=\"top\" width=\"315\">\n<p><a href=\"http:\/\/go.microsoft.com\/fwlink\/?LinkId=225702\">http:\/\/go.microsoft.com\/fwlink\/?LinkId=225702<\/a><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><\/b><\/p>\n<p><b>Q: How do I detect the .NET Framework 4.5?<\/b><\/p>\n<p><b>A:<\/b> You can detect the presence of the .NET Framework 4.5 by checking for the new <b>Release<\/b> registry key, which we added in the .NET Framework 4.5. The new key is of type REG_DWORD, which enables simple numeric evaluation such as greater than or equal to (&gt;=). To determine whether the .NET Framewework 4.5 has already been installed on the end user&#8217;s computer, your app installer should check for a <b>Release<\/b> value that is greater than or equal to<b> <\/b>378389. Checking just for equality may be insufficient, because we may increase the value of the <b>Release<\/b> key in a later update. <\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"564\">\n<p>To check for the presence of the .NET Framework 4.5, use:<\/p>\n<p>HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDPv4Full<\/p>\n<p>Release &gt;= 378389<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><\/b><\/p>\n<p><b>Q: Which .NET Framework version do I check if my app runs on both the .NET Framework 4 and 4.5?<\/b><\/p>\n<p><b>A:<\/b> You can check for the presence of the .NET Framework 4, and if either the .NET Framework 4 or 4.5 is present, the detection test will return true. To do this, check for the existence of a registry key named <b>Install<\/b>, as explained in the \u201cDetecting the .NET Framework 4\u201d section of the <a href=\"http:\/\/msdn.microsoft.com\/library\/ee942965(v=vs.100).aspx\">.NET Framework Deployment Guide for Developers.<\/a><\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"564\">\n<p>To check for the presence of the .NET Framework 4, use:<\/p>\n<p>HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDPv4Full<\/p>\n<p>Install<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><b><\/b><\/p>\n<p><b>Q: I\u2019m using the Version key to detect the .NET Framework. Should I switch to a different key?<\/b><\/p>\n<p><b>A:<\/b> The <b>Version<\/b> key is of type REG_SZ, which represents a string such as 4.0.0.0. Numeric comparisons based on strings are inherently difficult and error-prone. Instead of using the <b>Version<\/b> key, you should use the <b>Release<\/b> or <b>Install<\/b> key, as described above.<\/p>\n<h3>Conclusion <\/h3>\n<p>In this post, we looked at the improvements we&#8217;ve made to .NET Framework 4.5 setup. We hope that these improvements help you, as app developers and enterprise IT pros, distribute the .NET Framework more easily with your apps, as well as making the installation experience faster and easier for our shared customer, the end-user. <\/p>\n<p>Once again, you may want to watch the Channel 9 video <a href=\"https:\/\/channel9.msdn.com\/posts\/NET-45-Reducing-Reboots-during-Framework-Installation\">Reducing Reboots During Framework Installation<\/a>, which explains the work behind one of the new improvements.<\/p>\n<p><video style=\"width: 603px;height: 317px\" controls=\"controls\" poster=\"http:\/\/ak.channel9.msdn.com\/ch9\/3677\/c3979cc3-53d0-4c05-8767-9f6701843677\/NET45ReducingReboots_512_ch9.jpg\"><span><strong>Your browser doesn&#8217;t support HTML5 video. Visit <a href=\"https:\/\/channel9.msdn.com\/posts\/NET-45-Reducing-Reboots-during-Framework-Installation\">Channel 9<\/a> to watch the video.<\/strong><\/span><\/video><\/p>\n<p>We hope that you are as excited about these improvements as we are. Please send us your feedback.<\/p>\n<p>Send reports of compatibility issues to <a href=\"mailto:netfx45compat@microsoft.com\">netfx45compat@microsoft.com<\/a>. <\/p>\n<p>Follow or talk to us on <a href=\"https:\/\/twitter.com\/dotnet\">twitter<\/a> &#8212; <a href=\"https:\/\/twitter.com\/dotnet\">https:\/\/twitter.com\/dotnet<\/a>. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>The only experience most Microsoft customers have with the .NET Framework is the deployment and installation experience, which is why we spend so much time analyzing opportunities to improve it. For .NET 4.5, our goal was to build a product that was equivalent to a service pack with additional features. Our team studied how other [&hellip;]<\/p>\n","protected":false},"author":340,"featured_media":58792,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685],"tags":[11,77],"class_list":["post-18412","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","tag-net-framework","tag-fundamentals"],"acf":[],"blog_post_summary":"<p>The only experience most Microsoft customers have with the .NET Framework is the deployment and installation experience, which is why we spend so much time analyzing opportunities to improve it. For .NET 4.5, our goal was to build a product that was equivalent to a service pack with additional features. Our team studied how other [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/18412","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/340"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=18412"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/18412\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58792"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=18412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=18412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=18412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}