我正在通过我的安装程序安装 Visual C++ Redistributable 2013 作为先决条件(如果未安装)。但有时已安装的 VC++ 已损坏,然后我的安装程序无法工作,因为我在 CustomAction 中调用了 DLL 函数。
所以我的问题是:有什么方法可以确定安装的 VC++ 可再发行组件是否已损坏?
我正在通过我的安装程序安装 Visual C++ Redistributable 2013 作为先决条件(如果未安装)。但有时已安装的 VC++ 已损坏,然后我的安装程序无法工作,因为我在 CustomAction 中调用了 DLL 函数。
所以我的问题是:有什么方法可以确定安装的 VC++ 可再发行组件是否已损坏?
一般来说,健康检查是一个相当困难的话题。对于 Windows 中内置的文件,有 SFC 之类的工具,但不会扩展到其他已安装的软件包。对于 MSI 软件包,您可以选择运行修复,在某些情况下 Windows 会自动执行此操作;这个主题一般称为弹性。但是除非自动或手动修复可以解决您在野外遇到的各种问题,否则它并不是很相关。
所以问题变成了你实际遇到了什么样的问题,以什么频率,他们的解决方法是什么,以及试图解决这些问题会导致什么问题。如果调用 VC++ redist 的手动修复就足够了,那么实现起来相当容易。如果需要完全卸载并重新安装,那将更具侵入性;制作安装的那一部分的想法让我感到不适。如果您必须仅在非常特定的情况下执行此操作,则可能取决于您识别这些情况的能力。
或者,如果您的重点是确保安装成功,您可以静态链接您的自定义操作 DLL,以便它们不再依赖于 VC++ 包的状态。但是,如果应用程序还依赖于 VC++ 包,这对您的应用程序没有多大帮助。也许 VC++ DLL 的私有副本可以解决这个问题(如果 2013 版本支持 - 我忘记了),但代价是在安全更新的情况下为您的 VC++ DLL 副本提供服务会更加困难。
但同样,这一切都取决于发生了什么样的问题,它们是否频繁到值得解决,以及治疗是否比疾病更糟。