{"id":1533,"date":"2007-05-08T19:02:46","date_gmt":"2007-05-08T19:02:46","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/heaths\/2007\/05\/08\/patch-families-can-only-ever-grow\/"},"modified":"2019-02-17T15:30:18","modified_gmt":"2019-02-17T22:30:18","slug":"patch-families-can-only-ever-grow","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/setup\/patch-families-can-only-ever-grow\/","title":{"rendered":"Patch Families Can Only Ever Grow"},"content":{"rendered":"<p><a href=\"http:\/\/blogs.msdn.com\/pmarcu\">Peter Marcu<\/a> has begun talking about new functionality added into <a href=\"http:\/\/wix.sourceforge.net\">WiX<\/a> 3.0 that he&#8217;s been working on a lot. One of the specific features is <a href=\"http:\/\/blogs.msdn.com\/pmarcu\/archive\/2007\/04\/27\/wix-patchfamily-patch-filtering.aspx\">filtering by patch families<\/a>. Based on a concept Office has used internally, patch families in this case are a set of resources that must be in a patch, and that patch can only be superseded by another patch with at least the same resources &ndash; a superset. Those then form the patch families that are authored into the <a href=\"http:\/\/msdn2.microsoft.com\/library\/aa370350.aspx\">MsiPatchSequence table<\/a> in the patch package.<\/p>\n<p>Peter notes,\n<\/p>\n<p style=\"margin-left: 36pt\"><em>One thing to note is that there are rules about patch families. Once you ship a patch family, you must keep its references the same or add to it (grow it) but never remove items from it. All items in your product must be a part of only one patch family. When you change the build that you are targeting (re-baseline), patch families start over so you can change the contents and [associations] at this time.\n<\/em><\/p>\n<p>Definitions of patch families in WiX authoring can only ever grow; otherwise, regressions in versions of files or other resources can occur.\n<\/p>\n<p>Consider patch P<sub>a<\/sub> and newer patch P<sub>b<\/sub> that <a href=\"http:\/\/blogs.msdn.com\/heaths\/archive\/2005\/09\/12\/464047.aspx\">sequences<\/a> after P<sub>a<\/sub>, both of which belong to only patch family F that contains components for both files <em>foo.dll<\/em> and <em>bar.dll<\/em>. Note also that the granularity of patch families should be nothing smaller than a component, since in most cases the components&#8217; key path must be updated for the components to be updated.\n<\/p>\n<p>P<sub>a<\/sub> updates both <em>foo.dll<\/em> and <em>bar.dll<\/em>. The manufacturer later decides to define separate patch families to reduce the necessary size of subsequent patches. F now contains only <em>foo.dll<\/em> while F&#8217; now contains <em>bar.dll<\/em>. P<sub>b<\/sub> is shipped with only <em>foo.dll<\/em> and patch family F. If P<sub>a<\/sub> was already installed, P<sub>b<\/sub> would supersede P<sub>a<\/sub>. Depending on the value of the <a href=\"http:\/\/msdn2.microsoft.com\/library\/aa371182.aspx\">REINSTALLMODE property<\/a>, <em>bar.dll<\/em> will be regressed to its state before P<sub>a<\/sub> was installed. Components with non-file resources will act accordingly; for example, registry values will be whatever they were before P<sub>a<\/sub> was installed if not also included in P<sub>b<\/sub>. Supersedence happens at the patch level, not the transform or resource level. Thus, the definition of patch families can never shrink or regression of resources is possible.<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Peter Marcu has begun talking about new functionality added into WiX 3.0 that he&#8217;s been working on a lot. One of the specific features is filtering by patch families. Based on a concept Office has used internally, patch families in this case are a set of resources that must be in a patch, and that [&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,64],"class_list":["post-1533","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-installation","tag-wix"],"acf":[],"blog_post_summary":"<p>Peter Marcu has begun talking about new functionality added into WiX 3.0 that he&#8217;s been working on a lot. One of the specific features is filtering by patch families. Based on a concept Office has used internally, patch families in this case are a set of resources that must be in a patch, and that [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/1533","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=1533"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/1533\/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=1533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/categories?post=1533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/tags?post=1533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}