I bet somebody is looking to get a really nice bonus for that feature: Uninstall

Date:March 20, 2007 / year-entry #99
Tags:other
Orig Link:https://blogs.msdn.microsoft.com/oldnewthing/20070320-00/?p=27563
Comments:    59
Summary:A customer asked the following question (paraphrased): Does the Windows XP Add/Remove Programs control panel expose a scriptable object model? We want our program to open the Add/Remove Programs control panel and uninstall the programs of our competitors. No, there is no object model for the Add and Remove Programs control panel, and it frightens me...

A customer asked the following question (paraphrased):

Does the Windows XP Add/Remove Programs control panel expose a scriptable object model? We want our program to open the Add/Remove Programs control panel and uninstall the programs of our competitors.

No, there is no object model for the Add and Remove Programs control panel, and it frightens me that you're even contemplating what you're suggesting.


Comments (59)
  1. Neal says:

    Idiots!  I hope they’re looking to unistall their competitors viruses or rootkits, because if they unistalled another piece of software for me I’d show up at their offices and uninstall their developers with a chainsaw.

  2. benjamin says:

    Maybe they can uninstall their own program while they’re at it.

    Gods. It’s posts like these that let me appreciate MS’ work all the more. For all the faults people ascribe them, I can’t imagine having to deal with a request like this.

  3. TKW says:

    Neal: Yes that’s exactly what the developers of Windows originally expected you would do.

    If the users punished any company whose software misbehaved (normally by voting with their feet, rather than using chainsaws…) then we could all trust developers to behave.

    Microsoft have begun to realize that we can’t.

    Besides, there’s always the chance that the software mentioned in Raymond’s article wasn’t being installed with "full consent" anyway.

  4. Mick says:

    I’m a bit confused. Are you frightened that they are contemplating uninstalling a competitors software, or that they would try to do it via the Add/Remove Programs cpl? As a person that packages and repackages software in an enterprise, I’m more appalled by the latter.

  5. Mick,

    Personally I’d be frightened if any software attempted to uninstall any other piece of software that did not directly belong to the company.

    Got a software conflict with something else I have installed? Tell the user and let them uninstall it.

    Just hate the other vendor so much you want them to suffer as much as possible? Tell the user to remove their program.

    If you remove a competitor’s program from my machine, you may as well as have deleted all of my mp3s. You’ve abused my machine and I will not use the program at all.

    It’s like when Windows Update decided that IE should be my default browser without telling me. Don’t make decisions for the user.

  6. Nathan says:

    Object model ? I mean, it’s all there, for the most part, for many programs. If you know where to look it’ll tell you how to invoke. So you can fairly easily do it.

    One version of a product I worked on didn’t cleanly uninstall on an upgrade (due to install shield bugs and bad design) so we had to manually do it.. So knowing the right places to look makes it easy to do.. Not that I’d advocate such a thing.. (Granted, I haven’t seen if the same method works on Vista, but 2000 and up works)

  7. Dave says:

    It’s more like this scenario:

    A user goes out to CompUSA and buys AntiVirus Program X. For a couple of weeks, AntiVirus Program Y has been whining that they need to update their subscription, but Company Y is charging $50 for a year and they can get Program X for free after competitive upgrade rebate.

    They drop the Program X CD in the drive, and it autostarts. The installer sees that Program Y is running, and says to the user: “You currently are running AntiVirus Program Y. Only one antivirus solution should be running. Do you want to uninstall Program Y and install Program X, or do you want to cancel installation?”

    Well, do ya?

  8. Fredrik says:

    I would love to who asked that question so that I could carefully avoid installing/using/endorsing/coming anywhere close to any piece of code they ever created.

  9. One more reason to avoid anti-virus software like the plague…

  10. Dave says:

    On the surface, I’d boycott (and actively advocate against) said company for life so much as the suspicion of such behavior, but Dave raises an interesting point… with proper user notification and consent, it’s not necessarily evil.

  11. Justin says:

    Josh

    -snip-

    Don’t make decisions for the user.

    Microsoft – Because choices are confusing.

    (credit goes to bbspot)

  12. Anonymous Coward says:

    I agree uninstalling a competitor’s software without the user initiating the action is bad, but Microsoft seems to think it’s OK if they do it.

    “Any potentially unwanted software rated ‘high’ or ‘severe,’ will automatically be removed after scanning unless you change the default setting.  Removing or disabling potentially unwanted software may result in other software on your computer ceasing to work, or your breaching a license to use other software on your computer.  By using this software, it is possible that you will also remove or disable software that is not potentially unwanted software.”

    I’ve also noticed that Program Q will, with user consent, turn off the Vista Sidebar.  Granted, that’s a step short of installing it, but how many Vista customers would know how to turn it back on?

  13. buzz says:

    Does the Windows XP Add/Remove Programs control panel expose a scriptable object model? We want our program to open the Add/Remove Programs control panel and uninstall the programs of our competitors.

  14. "I would love to who asked that question so that I could carefully avoid installing/using/endorsing/coming anywhere close to any piece of code they ever created."

    I would love to know who asked that question so I could burn their house down.

  15. C Gomez says:

    Since most developers have a hard enough time installing their own software, I would never want them to touch anything else out there.

    So, is there a tool that can tell me what an install is going to do before I let it do it?  I don’t have Vista, but I have read all over the blogs that setup programs are forces to run as an adminstrator.  Some setup programs may not need full rights (maybe just the Program Files folder), so knowing there are developers out there who want to destroy my machine, I think it’d be handy to know what they are going to do before I let them do it.

    (This is very power user… not expecting Grandma to be able to do it or MSFT to implement such a power task.  Just wondering if there’s a third party doing it)

  16. Joe Dietz says:

    That lacking a supportable object model they are going to uninstall their competitors products anyways and will probably have to do so in a fragile manner.  This is one of those things that you can place a value judgment on about if it should be done in the first place, but that is really irrelevant to the technical question because its going to happen anyways.

  17. Massif says:

    Does add/remove programs allow us to hide our installation?

    Our competitors want to automatically uninstall our software, and we’d like to avoid that.

    Actually, forget it, we’ll just not install the software properly at all, and create registry settings directly, that way we’ll be safe. Thanks!

  18. marlinj says:

    Seems to be a dumb question in more than one way, because if you know your competitor’s software well enough to find it in Add and Remove Programs, wouldn’t you be able to just dig the uninstall command out of the registry and run that?

    I have to think that the only reason you’d invoke Add and Remove Programs is to allow the user an opportunity to  say no.  If you make softwareX and it’s incompatible with softwareY, it might seem better from a user experience point of view to automate the removal rather than effectively tell the user "softwareX can’t install until softwareY is gone.  Go remove softwareY and then try installing softwareX again."

  19. patrick says:

    I don´t know where all those commenters are working, but Mick´s point is very important.

    Sure, end user software on personal desktops should not be uninstalled without user interaction. But i´m working for one of the biggest companys of the world, and do you know what? The User are not allowed to install or uninstall softeware, and most of them don´t even know what this piece of software does when you alert them about uninstalls because of incompatiblity or replacements.

    Maybe it´s not about competitors, but some other software that does not work probably(like a ipsec stack replacement, or firewall).

    We have been often asked to include such uninstalls in our setup to help the package guys…

  20. andy says:

    C Gomez: For MSI setups try to use the "Orca" tool from the MSI SDK, which is part of the Windows SDK (formerly known as Platform SDK). There you can see what is gonna happen. Alternatively you can use the "dark" tool from WiX to "decompile" the MSI into the XML format of WiX.

    Also see msiexec /? to read about how you can log what’s going on. Regmon+Filemon are also helpful tools ;) E.g., install on a VM first…

  21. tsrblke says:

    @Dave:

    Right, but why can’t the program just say “Please Unistall Program X before continuing?”  Maybe I know conflicts are possible.  Maybe it’s a risk I’m willing to take.

    You want to use Program Y as an example fine: Program Y tell you you have to unistall Program Z befoe installing Virus Scan. Not Program Z2 mind you, just generic run on demand Program Z. It won’t let you continue until you do. When I weighed my options I realized sending my sister off to college sans either program was bad. So I unstalled Program Z, installed Program Y and put Program Z back on. You know what problems I’ve having? NONE.  Program Y just wanted to sell their spyware blocker. If you allow this, they won’t ask the question.  They’ll just nix the program.  Then when your spyware becomes an issues, guess what!  They’ll have a solution, for a price.

  22. Erzengel says:

    @"buzz": Great, anyone read Greek? Does it happen to say which company is trying to remove their competitors?

    @Neal: if only you weren’t joking, there’s a list of malware, spyware, and just plain dumb-@$$-developer-ware that the developers need such… "services". It would be of great benefit to the world if those developer’s genetics were removed.

  23. SomeCoder says:

    One thing I remember being surprised by is how easy it is for an application or script to modify the firewall.  Microsoft publishes an API which makes it possible to script or programmatically control any aspect of the Windows firewall.  If they are willing to do it for the firewall I’m actually surprised that they didn’t do it for the Add/Remove programs.

    http://msdn2.microsoft.com/en-us/library/aa366415.aspx

    Also I’m sure the person requesting this feature has by now stumbled across msi.lib which may allow them to do what they want.

  24. Joe Dietz says:

    @tzrbike: Company Y might do a better job of communicating why it believes that Program Z should be uninstalled, but I think you will find that it contains a real-time scanning option which typically means a set of kernel drivers that hook file system and registry operations and scan them.  Exactly the same sort of operations that a general AV product does as well.  As such it generally just doesn’t work to have product A scanning while product B is as well.  When you buy AV/spyware/etc/ protection that includes real-time checking you are pretty much signing up to buy all of your ‘scanning’ protection from the same vendor, even if you don’t realize it.

    This is exactly why competitive uninstall is a enterprise feature that all AV products have.    

  25. Ryan Fox says:

    Neal: You blame the developers, but it’s likely a management decision. The developers either do as their told, or make friends with the streets.

  26. Trey Van Riper says:

    SomeCoder:

    You can programatically uninstall an application easily enough if it was installed via MSI.

    Even if it wasn’t, you can probably still uninstall the application easily by examining the ARP registry items and making use of the information available there.

    But the original person’s reasoning for doing this seems quite unsavory.

  27. stuartd says:

    If I am correct in understanding that Add/Remove programs on Win2k/XP is an HTA (res://appwiz.cpl/default.hta) which simply provides access to the underlying WMI Installer provider which is fully scriptable the answer is surely "Yes.. but please don’t."

  28. Coderjoe says:

    @Erzengel: buzz’s post is a pingback, saying they were posting it on their blog. The comment on the blog is, as far as I can tell, asking the same thing many here are: "Who asked for this?"

  29. Doug says:

    @Dave:

    Right, but why can’t the program just say "Please Unistall Program X before continuing?"  

    Becuase there are many Antivirus companies that don’t play nice with Add/Remove programs and make it intentionally difficult to uninstall them.  If the app plays nice with Add/Remove programs and you need it uninstalled, direct the user to uninstall it, otherwise, a competitive uninstall app is quite welcome.

  30. microbe says:

    Warning: it’s a joke.

    The correct Windows way of doing it is to bundle their software with the OS. Uninstalling competitor’s software is too evil.

  31. Bernd says:

    I bet it wasn’t the idea of some developer but of some program manager. They come up with such stuff ;-)

  32. Andrew Rich says:

    On a related note, I would love to be able to tell ARP to stop waiting for my app to close after I’ve launched it from my installer in "repair" mode.  

  33. Leo Davidson says:

    Regarding the Windows Firewall having an API somehow being a bad thing, surely you need administrator access to change any of the firewall settings via the API, so what’s the problem? Also, when a process accesses the API a dialog automatically asks the user for permission, even if they are an administrator. It’s not bullet-proof but what do you want? Security through obscurity, or security through permissions and an API which can be used for good?

    I’m glad the API existed since it allowed me to write something to add port ranges to XP’s firewall, something that was extremely difficult to do via the official UI. I’d also much rather programs which need ports opened up set them up themselves, after I give them permission to. I can always go in and inspect the changes they’ve made or, if I don’t trust them, deny them permission and set things up by hand. I don’t think the firewall API has any real downsides, especially keeping in mind that to use it code has to have administrator access to the machine in which case it can do a hell of a lot of damage, whatever the operating system.

  34. David Walker says:

    Aside from performance issues, why can’t two antivirus programs coexist?  They can each scan an EXE or any other file on access, one after the other, if they install their hooks correctly.  

    I don’t see the technical problem here.

    And I had Program Y AntiVirus, I think, tell me that I should uninstall Program Z (which is only on-demand, as far as I know, and does not leave anything resident).  But it didn’t insist that I uninstall it.  

    I actually called Program Y and they said it should work if I left Program Z installed.

    Running more than one anti-virus at the same time might be a good idea for mission-critical or file hosting systems!

  35. DriverDude says:

    "They can each scan an EXE or any other file on access, one after the other, if they install their hooks correctly."

    Key word: IF. A big freaking IF.

    Hint: they don’t. Or maybe they can’t, given the hacks they do to wedge themselves into the OS. Do they use the FS filter architecture?

    I find it amusing that those antivirus programs tend to crash randomly… like a cop who falls asleep on the job.

    Like Ryan Fox, I tend to think it’s some marketing type who suggests these kinds of things. Just like the spyware guys who think, "let’s do our best to BLOCK uninstall!"

  36. S says:

    My sources reveal that it was the deleted team, looking to uninstall deleted

    [Don’t make me link to the ground rules in every message. The nitpicker’s corner already pisses me off. -Raymond]
  37. gomez says:

    Well, Add/Remove Programs *IS* an interface to MSI (I hope) and it’s only a Small Matter Of Programming ™ to call MsiConfigureProduct(,, INSTALLSTATE_ABSENT). Pulling that uninstall stunt without the user’s consent would count as unauthorized access and make the programmer liable for some jail time (at least in the UK).

    Incidentally, I work for an anti-virus company, and the ability to uninstall competitors’ products (with the user’s consent!) is a requirement in the corporate sphere. We wouldn’t be able to get through the door without it.

  38. Jamie says:

    As marlinj already mentioned, all of the uninstall information is kept in the registry. It’s not difficult to go through it and kick off the various uninstallers.

    That being said, whether you CAN do this and whether you SHOULD are 2 completely separate questions. While it may be possible to find and remove all of your competitors’ software, it’s certainly not a good idea to do so.

    We can only hope that the person who contacted Raymond will sit down for a second and think of the consequences of what they’re doing. Most notably, what will the customer reaction be?

    For example, imagine that Company X is writing a media player, to compete with Windows Media Player, iTunes, etc. In order to make sure customers use only their software, they write the installer so that WMP, iTunes and any other competing software is removed.

    The customer then plugs in their iPod and goes to load iTunes… only to find it’s no longer there. It won’t take long for them to figure out what happened. Company X loses not only 1 customer, but potentially many many customers.

    It almost makes you want to help Company X figure this stuff out, in order to seal their miserable fate…

  39. andy says:

    "One thing I remember being surprised by is how easy it is for an application or script to modify the firewall.  Microsoft publishes an API which makes it possible to script or programmatically control any aspect of the Windows firewall."

    Heh, you can do the similar in OpenBSD: pfctl

    , and in Linux you’ve got ipchains/iptables/whatever scriptkiddies can run.

    In addition, you also got the UPnP IGD specification which gives you some control (e.g., add/remove port bindings).

    Firewall control is a different scenario then the Add/Remove functionality. Also, I believe that MS is *required* to publish API docs for the Firewall functionality so they can use it in their own applications (not sure which, though).

    So… did anybody have a problem with this in Linux? E.g. KDE doing "apt-get remove gnome-desktop-environment"? :) Not trying to make a Linux vs Windows bashfest here, rather I think it is something about greedy, ugly, evil people which only want to get money from their customers, not give them a good experience. It doesn’t matter how nice Vista looks like if the vendors try to screw the user everytime they want to use their computer. I’ve always found it good that developers can develop some nice software and sell it to users. However, what really is happening here is just that a developer throws together some crap, learned over a 24h crash course, which doesn’t work but still tries to force it onto poor customers.

  40. Leo Davidson says:

    A certain "security" program that causes more problems than it solves, let’s call it Area Alert, causes so much grief with an application I help support, as well as many other applications, that I’ve jokingly suggested this sort of thing in the past.

    In reality, I’d never advocate anything more than a warning message box during install or first run which said something along the lines of "We couldn’t help but notice this piece of **** installed on your computer. If things don’t work when trying our program, try uninstalling their program to see if it helps."

    (Yeah, uninstalling, since this wonderful product still manages to break lots of things even when "disabled".)

    Even that kind of message isn’t really helpful, though. If someone is using said piece of **** then, however misguided I might think they are, they probably like and trust it, or like and trust the person who helps look after their PC and installed it for them, so a new program coming along and saying that their trusted "security" program might cause problems could be viewed as suspicious.

    It’s damn tempting, though. I mean, this thing will kill your task, often without even telling the user, if it does something suspicious like connect to the internet (for an update check) or run another program (it’s a file manager, it’s going to be doing that a lot!), unless that exact version of the executable has been sent to the people who make the "security" product so they can add its checksum to their database. Talk about shoot first, ask questions later… Besides which, if you do have something genuinely suspicious on your machine, isn’t it (a) probably too late and (b) something you’d want to be TOLD about, rather than have applications mysteriously exit or fail? Sigh.

    As a user, I would welcome warnings of incompatibilities but if something uninstalled another program without my permission, however well meaning it was, then I would stay away from that product for good. Ditto any "security" product that randomly kills other tasks without good reason.

  41. Duh says:

    S is wrong. It was definitely deleted with their stupid deleted program.

  42. Amon Houndsbreath says:

    Actually, forget it, we’ll just not install the software properly at all, and create registry settings directly, that way we’ll be safe. Thanks!

    Don’t forget to add a root kit, in case your competitors try to find the registry settings directly.

  43. Drak says:

    In reply to Anonymous Coward:

    “I’ve also noticed that the Program Q will, with user consent, turn off the Vista Sidebar.  Granted, that’s a step short of installing it, but how many Vista customers would know how to turn it back on?”

    Well, actually with Vista typing any question for any part of windows you turned off will generally give instructions on how to turn it back on, which is really good. (Although I am a “power” user, the changed location of things in Vista and the new things have seen me use this).

    So a help query like ‘turn sidebar back on’ would most probably tell you how to do it (not on my Vista machine right now, so I cannot test it)

  44. ender says:

    I remember a few years ago, a certain media player silently removed anti-spyware applications when it was installed. They’re still suffering from the backlash.

  45. Erzengel says:

    @Coderjoe: I know it was a link to something, but being unable to read greek (it’s all greek to me), I didn’t know it was really a blog post. I thought it was someone’s forum post. All I saw was a direct quote that Raymond quoted.

    @Miral: Psh, like that actually stops even a casual pirater. All it serves to do is piss off us legitimate owners when it can’t detect my CD drive and their site says it’s a "known issue" but doesn’t provide a fix. What’re we supposed to do, pirate the game?

  46. Frymaster says:

    Actually I have seen a computer with Program W, Program X, and Program Y installed.

    It worked….just very very slowly. There’s a performance hit every time a file is read; this is at least 3 times worse with 3 virus checkers (more because they’ll be checking each others’ files as well)

    In some circumstances even one antivirus can cripple your machine.  At university, Program E (a java application) is not part of the base install for the computers, but is an application we can run.  So the first time you run it after a machine’s been reimaged, it has to be deployed to the local machine.  A java application is full of .jar files, .jar files are archives with program files in them, antivirus goes nuts.  Even with the excrutiating network speed, the deployment bottleneck was CPU.

  47. Miral says:

    Actually you’d be surprised.  There are a number of programs that provide virtual CD/DVD drives (for quite legitimate uses) and also a lot of game "copy protection" programs that refuse to permit the game to run if one of these programs is detected, *even if* the game is not being run through one of the virtual drives.  And yet these games continue to sell.  (Of course, part of that is because games don’t advertise which protection software they’re using.)

  48. T says:

    “There are a number of programs that provide virtual CD/DVD drives (for quite legitimate uses) and also a lot of game “copy protection” programs that refuse to permit the game to run if one of these programs is detected, *even if* the game is not being run through one of the virtual drives.  And yet these games continue to sell.  (Of course, part of that is because games don’t advertise which protection software they’re using.)”

    Plus Program S is just plain evil, even if you don’t mind uninstalling the virtual CD software. These days I buy the game, store the unopened box in my cellar and play the torrent. As far as I can tell, it’s legal, means the people that made the game get their dollars, and I don’t need to have a bunch of rootkits installed on my home machine.

  49. James says:

    "My sources reveal that it was the deleted team, looking to uninstall deleted…"

    Somehow, Raymond’s redacted version makes a lot of sense: if ‘deleted’ actually did this, they would succeed in getting ‘deleted’ (i.e. themselves) uninstalled, probably with a chainsaw!

    Yes, *in theory* antivirus apps should cohabit gracefully – there are a lot of potential pitfalls along the way. For example, AV1 needs to load its signatures from AV1.DAT – which is a file access, so of course, AV2 springs into life and tries to load its own signatures from AV2.DAT – which is a file access, so AV1 needs to load its… SPLAT. In practice, you’ll probably be OK in most cases, but you’re in uncharted territory there!

    I remember a few years ago, spending a LONG time trying to debug a crash which turned out to be the fault of my AV tool of the time: whenever you closed a file handle which had been opened by file number (rather than by name), it crashed the kernel. Friendly, that; trying to understand quite how my innocent call to NtClose (from userspace, not kernel mode!) was crashing took a while.

  50. schwiet says:

    Hi Raymond,

    We’re sorry not to have been able to find a scriptable object model to achieve our design goals.  You’ll be glad to hear our engineers have devised some clever workarounds, making programmatic calls to emulate the behavior of regedit.exe through the Win32 SDK.  We still appreciate your help and will credit you lavishly in all our documentation.

    Fictionally Yours,

    crazy customer

  51. Cooney says:

    Ron White had it right: You can’t fix stupid.

  52. Courtney says:

    Yikes!  I really do feel sorry for MS when they get crazy questions like this…

    Why are some programmers so dumb?  Have they no shame?

  53. BadGuy says:

    If they asked the question in a different way they probably could have figured something out to uninstall things. It’s just registry and for example Crap Cleaner uses this stuff as well.

    Simple case of badly phrased question imho

  54. Mr. Dew says:

    That’s the most ridiculous thing I heard all day!

  55. Colin says:

    What do you need a programmatic interface to Add/Remove Programs for?  Just delete your competitors’ entire directory trees as part of your install program…

  56. Ulric says:

    You’re all assuming this company would uninstall the other product without consent.

    It’s more likely something like the Anti Virus case, or some other component that should really be alone driving some hardware.

    It’s likely that the setup of that application would have a dialog that says : "You also have X installed, would you like to remove it now?"

    It’s a heck of a lot better than to provide some written documentation about how to do that on your own, for users who are non-technical.

  57. Igor says:

    This is most likely some spyware/malware vendor looking to uninstall all protection you might have against their err.. "product".

    There is no legitimate use for this. I have both hands thank you, and I know where I should click to uninstall certain software. If you really need it done, just tell me.

  58. Neil says:

    Actually I have seen a computer with Program W, Program X, and Program Y installed.

    I wonder which order you have to install them in to avoid them uninstalling each other first…

  59. Nett zu lesen mit welchen Anfragen Microsoft zu tun hat: Does the Windows XP Add/Remove Programs control panel expose a scriptable object model? We want our program to open the Add/Remove Programs control panel and uninstall the programs of our compe

Comments are closed.


*DISCLAIMER: I DO NOT OWN THIS CONTENT. If you are the owner and would like it removed, please contact me. The content herein is an archived reproduction of entries from Raymond Chen's "Old New Thing" Blog (most recent link is here). It may have slight formatting modifications for consistency and to improve readability.

WHY DID I DUPLICATE THIS CONTENT HERE? Let me first say this site has never had anything to sell and has never shown ads of any kind. I have nothing monetarily to gain by duplicating content here. Because I had made my own local copy of this content throughout the years, for ease of using tools like grep, I decided to put it online after I discovered some of the original content previously and publicly available, had disappeared approximately early to mid 2019. At the same time, I present the content in an easily accessible theme-agnostic way.

The information provided by Raymond's blog is, for all practical purposes, more authoritative on Windows Development than Microsoft's own MSDN documentation and should be considered supplemental reading to that documentation. The wealth of missing details provided by this blog that Microsoft could not or did not document about Windows over the years is vital enough, many would agree an online "backup" of these details is a necessary endeavor. Specifics include:

<-- Back to Old New Thing Archive Index