【问题标题】:C# custom action in WixWix 中的 C# 自定义操作
【发布时间】:2009-07-31 17:53:58
【问题描述】:

当我的应用程序被卸载时,需要通知服务器,以便它可以释放分配给客户端的许可证密钥。这是通过 Web 服务调用完成的。

我创建了一个 C# 自定义操作来执行此操作。问题是,卸载程序退出说它找不到 dll。

msi 的错误日志包含以下错误:

错误 1723。 此 Windows 安装程序包。一个DLL 此安装需要完成 无法运行。联系您的支持 人员或包装供应商。行动 ReadLicenseKeyFromFile,条目: ReadLicenseKey,图书馆: C:\Windows\Installer\MSI4F42.tmp

我将函数 ReadLicenseKey 标记为自定义操作。自定义操作名为 ReadLicenseKeyFromFile。

<Custom Action="ReadLicenseKeyFromFile" After="InstallInitialize">
    REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE
</Custom>

<CustomAction Id="ReadLicenseKeyFromFile" BinaryKey="UnInstallCA.CA.dll" DllEntry="ReadLicenseKey" Execute="immediate" Return="check" />

<Binary Id="UnInstallCA.CA.dll" SourceFile="$(var.UnInstallCA.TargetDir)UnInstallCA.CA.dll" />

自定义操作项目正在输出 .CA.dll 文件。我已经尝试将文件安装为设置的一部分,手动复制粘贴的文件,对文件没有做任何事情......基本上尝试了所有可能的组合。

一定有我遗漏的东西,所以请帮忙。

【问题讨论】:

    标签: c# wix wix3 custom-action


    【解决方案1】:

    很抱歉浪费了大家的时间。

    解决方案太简单了。我忘记在这个特定方法上放置 [CustomAction] 属性。因此,即使这是我在 CustomAction.cs 文件中编写的最后一个动作,它也是在 InstallExecuteSequence 中调用的第一个动作。正因为如此,我被误导以为它找不到文件。好吧,还有我一定很困的事实......

    无论如何,在寻找答案时,我确实找到了很多不错的资源,尤其是Alex Shevchuks series on Wix。我意识到的另一件事是我不必安装自定义操作 dll 文件。我只是从我的 Wix 项目中引用它并提供它的路径。 dll 嵌入到设置中,并在调用卸载自定义操作时从那里流式传输。

    【讨论】:

    • 当我遇到同样的问题时,我需要查看 DLL 并检查正确的符号是否真的被导出。 /L
    • 感谢您发布您的答案,我只是在没有意识到的情况下犯了同样的(简单)错误,如此神秘的错误消息!
    【解决方案2】:

    您的 UnInstallCA.CA.dll 是否在安装过程中复制到目标计算机?卸载时好像没有。

    如果它到达那里 - 它可以运行吗? (尝试从目标机器上运行它,看看它是否能做它应该做的事情——也许你需要从这台机器上运送你正在使用的其他一些 dll——或者可能是一些可再发行的包)

    【讨论】:

    • 是的,安装 dll 在安装时被复制。不,我不知道如何模拟 dll 的使用。如果您的意思是创建一个引用 dll 的新项目,然后调用该函数,是的。
    • @Anton Tykhyy - 我收到通知,你在一小时前发布了我的问题的答案,但我看不到那个答案。从我的个人资料中,我只能看到部分答案。自定义操作项目正在从 DTF 运行所需的实用程序,该实用程序将托管 dll 转换为非托管 .CA.dll 。这个 .CA.dll 是我与我的设置一起安装的。无论如何,我可以通过它检查安装程序查找 dll 的路径吗?
    • 一个问题可能是变量路径。我从来没有这样使用过它:) - 硬编码真实路径以查看是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多