Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You just need to set ARPSYSTEMCOMPONENT=1 in the Property table of the installer using <a href="http://www.microsoft.com/DownLoads/details.aspx?familyid=6A35AC14-2626-4846-BB51-DDCE49D6FFB6&amp;displaylang=en" rel="noreferrer">Orca</a> (Can't be done directly in Visual Studio from what I know)</p> <p>This is commonly used when a program installs dependencies and you don't want the user to uninstall dependencies by hand, they need to use a specific uninstall script you've provided or something.</p> <p>Personally, I would author the patch as a patch and prevent the patch from being uninstalled. </p> <p>Also I suggest picking up a copy of <a href="http://rads.stackoverflow.com/amzn/click/1590592972" rel="noreferrer">The Definitive Guide to Windows Installer</a> which will give you some explanation on how, why and where you should use tricks such as this. As well as giving you a really good understanding of the windows installer fundementals and help you to design a better installer in the long run. All the examples in the book use Visual Studio + free tools from the <a href="http://www.microsoft.com/DownLoads/details.aspx?familyid=6A35AC14-2626-4846-BB51-DDCE49D6FFB6&amp;displaylang=en" rel="noreferrer">Windows Installer SDK.</a></p> <p><strong>Edit:</strong> The user still has full control to uninstall via MSIEXEC, via a custom uninstall shortcut that you provide, all this does is hide the entry in Add/Remove Programs (ARP)</p> <p><strong>Edit2:</strong> Sample VBS to add the property (if you want to do so as part of an automated build process)</p> <pre><code>Dim installer, database, view Set installer = CreateObject("WindowsInstaller.Installer") Set database = installer.OpenDatabase ("test.msi", 1) Set view = database.OpenView ("INSERT INTO Property(Property.Property, Property.Value) VALUES('ARPSYSTEMCOMPONENT', '1')") view.Execute Set database = Nothing Set installer = Nothing </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload