{"id":3013,"date":"2005-08-16T18:47:01","date_gmt":"2005-08-16T18:47:01","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/heaths\/2005\/08\/16\/a-reason-for-arpsystemcomponent\/"},"modified":"2005-08-16T18:47:01","modified_gmt":"2005-08-16T18:47:01","slug":"a-reason-for-arpsystemcomponent","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/setup\/a-reason-for-arpsystemcomponent\/","title":{"rendered":"A Reason for ARPSYSTEMCOMPONENT"},"content":{"rendered":"<p>Last week I <a href=\"http:\/\/blogs.msdn.com\/heaths\/archive\/2005\/08\/05\/448198.aspx\">blogged<\/a> about how <code>ARPSYSTEMCOMPONENT<\/code> is dangerous, but there are reasons for using it. Two reasons <code>ARPSYSTEMCOMPONENT<\/code> is defined in the product MSIs for the .NET Framework 2.0 and Visual Studio 2005 is to localize the Add\/Remove Programs (ARP) entries, and to change certain registry values so that <a href=\"http:\/\/blogs.msdn.com\/astebner\/archive\/2005\/08\/15\/452030.aspx\">the external UI handler<\/a> is invoked to handle the requested operation.<\/p>\n<p>Using previous versions of Windows Installer, ARP keys were written simply using the <a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/registry_table.asp\">Registry table<\/a> but weren&#8217;t used, of course, if <code>ARPSYSTEMCOMPONENT<\/code> was set to 1. Patch information wasn&#8217;t written to the registry so patches were responsible for adding entries to the Registry table if so desired. Starting with Windows Installer 3.0, the <a href=\"http:\/\/msdn.microsoft.com\/library\/en%20us\/msi\/setup\/msipatchmetadata_table.asp\">MsiPatchMetadata table<\/a> could be added to patch MSPs so that patches could be <a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/uninstallable_patches.asp\">uninstallable<\/a> and to provide information to ARP about what patches are applied to a product. The table schema, however, does not allow for localized strings to provide localized ARP entries. If you shipped one MSP per localized product MSI this wouldn&#8217;t be a problem; but, shipping a single MSP for all localized products &mdash; since an MSP is storage for one or more MSTs &mdash; or shipping a single MSP for a language-neutral product MSI presents a problem. For this reason ARP entries would have to be written manually using either the Registry table, a <a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/custom_actions.asp\">custom action<\/a> (used <a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/deferred_execution_custom_actions.asp\">deferred<\/a> custom actions since you&#8217;re modifying machine state), or an <a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/monitoring_an_installation_using_msisetexternalui.asp\">external UI handler<\/a>.<\/p>\n<p>Another reason to set <code>ARPSYSTEMCOMPONENT<\/code> to 1 for a product is to control what gets invoked when your product is repaired or uninstalled from ARP. If you use an external UI handler to install your product is only makes sense to use that external UI handler to repair or uninstall the product as well. If ARP simply queries Windows Installer for product information, these actions are performed by Windows Installer normally. If you want to have your external UI handler invoked, you must set <code>ARPSYSTEMCOMPONENT<\/code> to 1 and write your own ARP entries including the <code>UninstallString<\/code>, which would invoke your external UI handler executable.<\/p>\n<p>There are <a href=\"http:\/\/msdn.microsoft.com\/library\/en-us\/msi\/setup\/configuring_add_remove_programs_with_windows_installer.asp\">properties<\/a> that you can safely set to control some of what gets displayed in the Add\/Remove Programs control panel, but once <code>ARPSYSTEMCOMPONENT<\/code> is set you&#8217;re responsible for what gets &mdash; or doesn&#8217;t get &mdash; displayed.<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Last week I blogged about how ARPSYSTEMCOMPONENT is dangerous, but there are reasons for using it. Two reasons ARPSYSTEMCOMPONENT is defined in the product MSIs for the .NET Framework 2.0 and Visual Studio 2005 is to localize the Add\/Remove Programs (ARP) entries, and to change certain registry values so that the external UI handler is [&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":[5,20],"class_list":["post-3013","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-arpsystemcomponent","tag-installation"],"acf":[],"blog_post_summary":"<p>Last week I blogged about how ARPSYSTEMCOMPONENT is dangerous, but there are reasons for using it. Two reasons ARPSYSTEMCOMPONENT is defined in the product MSIs for the .NET Framework 2.0 and Visual Studio 2005 is to localize the Add\/Remove Programs (ARP) entries, and to change certain registry values so that the external UI handler is [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/3013","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=3013"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/posts\/3013\/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=3013"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/categories?post=3013"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/setup\/wp-json\/wp\/v2\/tags?post=3013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}