【问题标题】:Detect if an assembly is in the GAC via WiX 3?通过 WiX 3 检测程序集是否在 GAC 中?
【发布时间】:2026-01-03 21:10:02
【问题描述】:

我想在 WiX 3 中(最好通过条件)检测特定程序集是否在 GAC 中。我知道该程序集的名称、版本和公钥令牌。有没有内置的方法可以做到这一点,还是我必须编写一个 CustomAction 来做到这一点?我将如何设置 CustomAction? (这将在安装开始之前。)

【问题讨论】:

    标签: .net installation wix windows-installer wix3


    【解决方案1】:

    您可以使用FileSearch 在 %windir%\assembly\GAC 中搜索文件(如果您知道所有其他值),虽然有点笨拙但可以。
    完整的文件路径将存储在一个属性中,您可以在安装开始之前使用它。

    【讨论】:

    • 为我工作。直接进入 GAC 目录似乎有点笨拙,但其他方法相当干净。这些目录按名称、版本和公钥令牌命名,这正是我所拥有的。
    • 由于程序集的名称类似于 [Windir]\assembly\GAC_MSIL[DllNameWithout.dll]\_[DllNameWid.dll],因此它只对我搜索到 [DllNameWithout. dll]
    【解决方案2】:

    需要小心。程序集不仅可以安装在 %windir%\assembly\GAC 文件夹中。我的程序集最常安装在 %windir%\assembly\GAC_MSIL 中。只需搜索 %windir%\assembly\ 就可以了。

    【讨论】: