【问题标题】:Wix custom action is failed to load the dll file?Wix 自定义操作无法加载 dll 文件?
【发布时间】:2014-07-18 04:18:07
【问题描述】:

我正在尝试在安装 msi 时执行自定义操作。但是我的自定义操作所需的 dll 取决于其他 dll。在安装时,它会给出错误,例如“无法运行此安装所需的 dll”。如何加载相关的 dll 文件以使此自定义操作正常运行。

我使用的代码是

<CustomAction Id='CheckingPID' BinaryKey='CheckPID' DllEntry='ValidateKey' />
<Binary Id ='CheckPID' SourceFile='$(sys.CURRENTDIR)\LicenseKeyClient_32d.dll'/>
<Binary Id ='CheckPID2' SourceFile='$(sys.CURRENTDIR)\curllib.dll'/>
<Binary Id ='CheckPID3' SourceFile='$(sys.CURRENTDIR)\libsasl.dll'/>
<Binary Id ='CheckPID4' SourceFile='$(sys.CURRENTDIR)\openldap.dll'/>

【问题讨论】:

    标签: wix windows-installer custom-action


    【解决方案1】:

    您在二进制表中添加的文件通常会在安装过程中以临时名称提取,因此您的 DLL 将无法找到您在其旁边添加的其他 DLL。

    解决方法是将这些 DLL 作为普通文件添加到 Temp 系统文件夹中,并在安装结束时将其删除。这有一个限制,您需要将自定义操作设置为延迟,因此它会在文件安装后执行,因此您的 DLL 会被复制到 Temp 文件夹。

    我不知道 wix 是否支持 temporary files,类似于 Advanced Installer 中的支持,但如果没有,您可以尝试编写自定义操作来模拟它。基本上,Advanced Installer 所做的是在 MSI 启动时将这些文件提取到 Temp 文件夹中,并在安装完成时将其删除。这样做的好处是您可以使用临时文件并立即执行自定义操作,即在安装包中的文件之前。

    【讨论】:

    • “通常的”讨厌的方法是从二进制表中流式传输它们,这样它们就不需要安装和删除。我还怀疑这是用户的临时文件夹,而不是系统文件夹。
    【解决方案2】:

    尽管 Bogdan 的回答很好,请允许我加我的 2 美分:

    您似乎正在处理某种形式的许可证密钥验证?最好的方法通常是在应用程序本身中处理您的许可证密钥,除非您希望将其写入 HKLM 而不是 HKCU - 在这种情况下,您可能需要临时管理员通常在安装过程中获得的权利。

    您也可以在设置过程中打开一个 HKLM 密钥进行写入,然后从应用程序中写入它,尽管这在安全方面通常不受欢迎。这允许您直接从应用程序为所有用户编写一个许可证密钥。

    应用程序具有更多灵活性控制注册您的许可证密钥的过程,以及一种简单的运行方式再次进行该过程。从我的角度来看,这对于一个严肃的应用程序来说几乎总是需要的 - 通常是由于 试用版 最终需要在试用期结束时从应用程序本身注册许可证密钥 - 而不是卸载应用程序并重新安装,或在修复/维护模式下运行设置 - 这看起来非常笨拙。

    我之前已经更详细地描述了这个问题:Reasons to deal with licensing in the application rather than the setup

    【讨论】:

      【解决方案3】:

      我还要补充一点,WiX DTF .NET 自定义操作允许您将内容嵌入到自解压自定义操作包中并在运行时使它们在当前目录中可用,从而真正简化了这个问题。很简单。

      但是,是的,Glytzhkof 是正确的。在 MSI 内完成的任何许可/DRM 都很容易被击败。最好在应用程序中执行此操作,或同时在两者中执行此操作。例如,我曾在分担责任的公司工作过。您可以现在或以后输入一个。我还在许可证密钥中嵌入了驱动功能选择的位的公司工作过。它会很快变得复杂,所以尽量不要走那条路。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        相关资源
        最近更新 更多