MSI Installs without registering with Add/Remove Programs (ARP)

I had a student ask how to do this, because they have problems with their users dabbling with Control Panel’s ARP applet. I suggested a tighter group policy, but went on to research the MSI documentation anyway.

Turns out that there are a number of properties you can set as command line switches during installation. The simplest one that caught my attention was setting ARPSYSTEMCOMPONENT = “1”, which treats the install as a system component, rather than a standard desktop application.

Using Visual Studio .NET, I built a standard Windows setup project and when I executed it, I passed it the switch. It worked great.

   setup.exe ARPSYSTEMCOMPONENT =  “1”

So why can’t I burn this value into the .MSI from Visual Studio? The project properties window and dialog only offer about 1/10th of the settings you can implement in an .MSI. According to the SDK documentation, I can add many different settings which were related to what I was trying to do: ARPNOREMOVE and ARPNOMODIFY for example.

When I tried to hack the .vdproj file directly and add the setting, I couldn’t make it work, even though some of the ARPxxx settings are already in there. Any suggestions? Here’s a snippet of my .vdproj file:

“Product”
{
“Name” = “8:Microsoft Visual Studio”
“ProductName” = “8:MoviesSetup”
“RestartWWWService” = “11:FALSE”
“RemovePreviousVersions” = “11:TRUE”
“DetectNewerInstalledVersion” = “11:TRUE”
“ProductVersion” = “8:1.0.0”
“Manufacturer” = “8:CET”
“ARPSYSTEMCOMPONENT” = “8:1”
“ARPHELPTELEPHONE” = “8:”
“ARPHELPLINK” = “8:”
“Title” = “8:MoviesSetup”
“Subject” = “8:”
“ARPCONTACT” = “8:CET”
“Keywords” = “8:”
“ARPCOMMENTS” = “8:”
“ARPURLINFOABOUT” = “8:”
“ARPPRODUCTICON” = “8:”
“ARPIconIndex” = “3:0”
“SearchPath” = “8:”