在Windows中以编程方式修复程序 – 可能以某种方式由WinAPI?

我想从我的C ++应用程序运行其他应用程序的修复程序 – 以编程方式执行当我在Windows->Control Panel->Program程序中手动select程序的修复选项时会发生什么情况。

对于删除选项,我可以只searchregistry

  • KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • 在64位机器上的HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

而不是使用UninstallString来查找哪个命令我必须执行System()函数。

但如何以类似的方式运行修复 ? 对于像RepairString这样的程序,在registry中没有这样的位置。

我想find所有程序的一般方法(当然,我的意思是在registry中留下信息的程序)。

其他问题:是否有可能通过例如MsiEnumProductsEx列出的应用程序没有他们的UninstallStringregistry项?

ps关于删除选项的registry条目的信息我从伟大的Pat的post中获得:

是否有卸载程序批处理窗口?

如果程序与Microsoft安装程序一起安装,则可以使用适当的一组开关调用MSIEXEC。 TechNet 文档中记录了这些交换机。

但即使你使用这个,修复选项也是非常不同的。 而且在很多情况下,如果原始MSI文件不再可用(CD未插入,或下载的文件已被删除),则无法启动修复。