{"id":2733,"date":"2005-10-19T19:15:00","date_gmt":"2005-10-19T19:15:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/heaths\/2005\/10\/19\/patch-wrapper-improvements\/"},"modified":"2005-10-19T19:15:00","modified_gmt":"2005-10-19T19:15:00","slug":"patch-wrapper-improvements","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/setup\/patch-wrapper-improvements\/","title":{"rendered":"Patch Wrapper Improvements"},"content":{"rendered":"<p>A new patch wrapper will be shipping for patches targeting the Microsoft .NET Framework 2.0 and Visual Studio 2005. A lot of work went into simplifying the wrapper and removing managed code, as well as standardizing the command-line options.<\/p>\n<p>The previous patch wrapper for the .NET Framework 1.0 and 1.1, and Visual Studio .NET 2002 and 2003, supported the following command-line options:<\/p>\n<ul>\n<li>\/? &#8211; Shows help information.<\/li>\n<li>\/I &#8211; Installs the patch.<\/li>\n<li>\/Q &#8211; Installs the patch with no user interface (quiet mode).<\/li>\n<li>\/L:<em>logfile<\/em> &#8211; Specifies the path to the log file.<\/li>\n<li>\/Ld &#8211; Log package details.<\/li>\n<li>\/Lp &#8211; Log affected products.<\/li>\n<li>\/Lf &#8211; Log included files.<\/li>\n<li>\/Xp[:<em>path<\/em>] &#8211; Extract <em>.msp<\/em> file to the specified path.<\/li>\n<\/ul>\n<p>Because the patch wrapper actually reconstituted the <em>.msp<\/em> while extracting via the \/Xp command-line option you couldn&#8217;t just grab the <em>.msp<\/em> out of the patch using an unzip application. Doing so will result in an unusually small <em>.msp<\/em> file that will not install correctly.<\/p>\n<p>Starting with new patches the patch wrapper itself supports the following command-line options:<\/p>\n<ul>\n<li>\/help, \/h, \/? &#8211; Shows help information.<\/li>\n<li>\/extract [<em>directory<\/em>] &#8211; Extract the <em>.msp<\/em> to the specified directory.<\/li>\n<li>\/q, \/quiet &#8211; With \/extract extracts the package with no user interface (quiet mode).<\/li>\n<li>\/uninstall &#8211; Uninstalls the wrapped patch.<\/li>\n<\/ul>\n<p>All other command-line options are passed to <em>msiexec.exe<\/em> so any syntax errors will display the Windows Installer usage dialog that describes the <a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/command_line_options.asp\">Windows Installer command-line options<\/a> as well as the <a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/standard_installer_command_line_options.asp\">standard installer command-line options<\/a> beginning with Windows Installer 3.0.<\/p>\n<p>So why is a wrapper needed? The new wrapper compresses the whole <em>.msp<\/em> file since any streams are not compressed. This decreases the patch download size. Because <em>.msp<\/em> files can contain a pair of transforms for multiple products and some of our patches will for Visual Studio, if the patch applies to multiple products installed on the machine but a reboot is required Windows Installer will prompt for a reboot. The user will have to re-apply the patch until it&#8217;s installed for every applicable product. The wrapper eliminates this burden by catching the return code <code>ERROR_SUCCESS_REBOOT_REQUIRED<\/code> (3010) and prompts when the patch has finished apply to each applicable product. If the patch is installed silently the machine is automatically rebooted.<\/p>\n<p>With the new wrapper you can currently use an unzip application but we recommend that you use \/extract to extract the patch.<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A new patch wrapper will be shipping for patches targeting the Microsoft .NET Framework 2.0 and Visual Studio 2005. A lot of work went into simplifying the wrapper and removing managed code, as well as standardizing the command-line options. The previous patch wrapper for the .NET Framework 1.0 and 1.1, and Visual Studio .NET 2002 [&hellip;]<\/p>\n","protected":false},"author":389,"featured_media":3843,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[20,23],"class_list":["post-2733","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-installation","tag-logging"],"acf":[],"blog_post_summary":"<p>A new patch wrapper will be shipping for patches targeting the Microsoft .NET Framework 2.0 and Visual Studio 2005. A lot of work went into simplifying the wrapper and removing managed code, as well as standardizing the command-line options. The previous patch wrapper for the .NET Framework 1.0 and 1.1, and Visual Studio .NET 2002 [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/2733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/users\/389"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/comments?post=2733"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/2733\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/media\/3843"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/media?parent=2733"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/categories?post=2733"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/tags?post=2733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}