我想从我的C ++应用程序运行其他应用程序的修复程序 – 以编程方式执行当我在Windows->Control Panel->Program
程序中手动select程序的修复选项时会发生什么情况。
对于删除选项,我可以只searchregistry:
KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
) 而不是使用UninstallString
来查找哪个命令我必须执行System()
函数。
但如何以类似的方式运行修复 ? 对于像RepairString
这样的程序,在registry中没有这样的位置。
我想find所有程序的一般方法(当然,我的意思是在registry中留下信息的程序)。
其他问题:是否有可能通过例如MsiEnumProductsEx
列出的应用程序没有他们的UninstallString
registry项?
ps关于删除选项的registry条目的信息我从伟大的Pat的post中获得:
是否有卸载程序批处理窗口?
通常使用MSI创建安装包apis http://msdn.microsoft.com/en-us/library/windows/desktop/aa372860(v=vs.85).aspx
WIX用于编写MSI软件包。 从http://wix.tramontana.co.hu/tutorial/getting-started开始
如果程序与Microsoft安装程序一起安装,则可以使用适当的一组开关调用MSIEXEC。 TechNet 文档中记录了这些交换机。
但即使你使用这个,修复选项也是非常不同的。 而且在很多情况下,如果原始MSI文件不再可用(CD未插入,或下载的文件已被删除),则无法启动修复。