{"id":2513,"date":"2006-01-23T17:26:00","date_gmt":"2006-01-23T17:26:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/heaths\/2006\/01\/23\/why-is-my-feature-advertised\/"},"modified":"2006-01-23T17:26:00","modified_gmt":"2006-01-23T17:26:00","slug":"why-is-my-feature-advertised","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/setup\/why-is-my-feature-advertised\/","title":{"rendered":"Why is My Feature Advertised?"},"content":{"rendered":"<p>If you&#8217;re patching a feature or features of a Windows Installer package and see that a feature you know to be installed locally is now advertised, look for the following in your Windows Installer log:<\/p>\n<p style=\"font-family: Courier new, monospace\">MSI (c) (B8:C0) [12:00:00:000]: SELMGR: ComponentId &#8216;{01234567-89AB-CDEF-0123-456789ABCDEF}&#8217; is registered to feature &#8216;FeatureA&#8217;, but is not present in the Component table.  Removal of components from a feature is not supported!<br \/>\nMSI (c) (B8:C0) [12:00:00:000]: SELMGR: Removal of a component from a feature is not supported<\/p>\n<p>The reason is documented is\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/changing_the_product_code.asp\">\nChanging the Product Code<\/a> in the Windows Installer SDK: components can be\nadded to new features &#8211; or existing features starting with Windows Installer 2.0\n&#8211; but cannot be removed. In order to remove the component or make a change that\nwould otherwise require a change in the component code &#8211; which is no different\nthan removing one component and adding another &#8211; the\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/productcode.asp\">\n<code>ProductCode<\/code> property<\/a> must be changed, which constitutes a major upgrade.<\/p>\n<p>This applies even with obsolescence and supersedence. Recall in\n<a href=\"http:\/\/blogs.msdn.com\/heaths\/archive\/2005\/09\/12\/464047.aspx\">How\nPatching Works<\/a> that when you obsolesce or supersede a previous patch Windows\nInstaller removes the patch transform from the in-memory view of the product.\nThis effectively removes a component from a feature or features and violates\nupgrade components rules. The result is that your feature you&#8217;re trying to patch\nbecomes advertised and it will not be patched because &#8211; as Windows Installer\nsees it &#8211; it&#8217;s not installed.<\/p>\n<p>This makes sense if you think about it. To obsolesce or supersede another\npatch the new patch must contain everything from the old patch that it&#8217;s\nreplacing. This includes not only files, registry values, and the like but\ncomponents as well. By definition, if you install a new component any obsolescing or\nsuperseding patch must contain that component as well.<\/p>\n<p>If you&#8217;re adding new components that are specific to individual patches,\nconsider instead using transitive component conditions without supersedence to\neffectively remove the component when the new patch is installed. This is one solution I presented in\n<a href=\"http:\/\/blogs.msdn.com\/heaths\/archive\/2005\/10\/19\/482761.aspx\">A Better\nWay of Working with ARPSYSTEMCOMPONENT<\/a>.<\/p>\n<p>To catch the violation to the upgrade component rules you can pass the public\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/msienforceupgradecomponentrules.asp\">\n<code>MSIENFORCEUPGRADECOMPONENTRULES<\/code> property<\/a> or set the\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/enforceupgradecomponentrules.asp\">EnforceUpgradeComponentRules\npolicy<\/a> that will affect any install on the machine. This will cause small\nand minor updates to fail with either\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/windows_installer_error_messages.asp\">\nWindows Installer error<\/a> 2771 if a component is removed from a feature (which\nalso includes if a component GUID is changed since that would technically\nconstitute a new component), or error 2772 if the feature tree is rearranged\nwith the exception of adding a new feature as a leaf feature to an existing\nfeature. In either case\n<a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/error_codes.asp\">Windows error<\/a> <code>ERROR_INSTALL_FAILURE<\/code> (1603) is returned\nfrom the process or Windows Installer API.<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;re patching a feature or features of a Windows Installer package and see that a feature you know to be installed locally is now advertised, look for the following in your Windows Installer log: MSI (c) (B8:C0) [12:00:00:000]: SELMGR: ComponentId &#8216;{01234567-89AB-CDEF-0123-456789ABCDEF}&#8217; is registered to feature &#8216;FeatureA&#8217;, but is not present in the Component table. [&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":[15,20,23,40],"class_list":["post-2513","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-diagnosing","tag-installation","tag-logging","tag-troubleshooting"],"acf":[],"blog_post_summary":"<p>If you&#8217;re patching a feature or features of a Windows Installer package and see that a feature you know to be installed locally is now advertised, look for the following in your Windows Installer log: MSI (c) (B8:C0) [12:00:00:000]: SELMGR: ComponentId &#8216;{01234567-89AB-CDEF-0123-456789ABCDEF}&#8217; is registered to feature &#8216;FeatureA&#8217;, but is not present in the Component table. [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/2513","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=2513"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/2513\/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=2513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/categories?post=2513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/tags?post=2513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}