Wix 中的 C# 自定义操作

标签 c# wix wix3 custom-action

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

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

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

Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. Action ReadLicenseKeyFromFile, entry: ReadLicenseKey, library: 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 文件。我尝试将文件安装为设置的一部分,手动复制粘贴文件,对文件不做任何操作...基本上尝试了所有可能的组合。

一定是我遗漏了什么,所以请帮忙。

最佳答案

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

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

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

关于Wix 中的 C# 自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1213953/

相关文章:

wix 指定许可证什么也不显示

c# - Entity Framework 和 View

c# - 填: SelectCommand. 连接属性还没有初始化

.net - 蜡烧伤 : How to reboot after installing a MsuPackage

wix - 仅在满足某些条件时设置Wix属性

wix - 如何停止在 wix setup 项目中生成 wixpdb 文件?

installation - 确定 Wix 中可执行文件的较新版本

c# - Visual Studio 2013 - 窗体 "Live"预览

c# - C#中的树数据结构

wix - 在使用 WiX 时,我可以停止缩放图像以适合我的显示设置吗?