11

当我的应用程序被卸载时,需要通知服务器,以便它可以释放分配给客户端的许可证密钥。这是通过 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 文件。我已经尝试将文件安装为设置的一部分,手动复制粘贴的文件,对文件没有做任何事情......基本上尝试了所有可能的组合。

一定有什么我想念的东西,所以请帮忙。

4

2 回答 2

11

很抱歉在这件事上浪费了大家的时间。

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

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

于 2009-08-02T23:16:04.043 回答
0

您的 UnInstallCA.CA.dll 是否在安装过程中复制到目标机器?卸载时似乎不存在。

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

于 2009-07-31T18:19:52.393 回答