【问题标题】:Repair programs in Windows programatically in C++ - maybe somehow by WinAPI?在 C++ 中以编程方式修复 Windows 中的程序 - 也许通过 WinAPI 以某种方式?
【发布时间】:2013-10-24 00:05:24
【问题描述】:

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

对于 remove 选项,我可以在注册表中搜索:

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

然后使用UninstallString 查找我必须使用System() 函数执行的命令。

但是如何以类似的方式运行repair?对于RepairString之类的程序,注册表中没有这样的位置。

我想找到所有程序的通用方法(当然我是指在注册表中留下信息的程序)。

其他问题: 是否有可能由例如 MsiEnumProductsEx 列出的应用程序没有 UninstallString 注册表项?

附言 我从伟大的 Pat 的帖子中获取的有关删除选项的注册表项的信息:​​

Is there Uninstall a program batch for windows?

【问题讨论】:

  • 请注意,并非所有程序在控制面板中都有修复选项。
  • 我知道,但我想为拥有它的程序运行它。以最常见的方式。
  • 没有“通用”方式。不同类型的安装程序(MSI、InstallShield、InstallAware 等)以不同的方式(如果有的话)实现恢复,而 Windows 不知道这些方式。
  • 但是 CCleaner 等程序具有运行修复的功能。我发现注册表中有类似“ModifyPath”的东西 - 也许这是一个好方法

标签: c++ windows winapi registry windows-installer


【解决方案1】:

如果程序是使用 Microsoft 安装程序安装的,则可以使用一组适当的开关调用 MSIEXEC。 TechNet Docs 中记录了这些开关。

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

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多