当我的应用程序被卸载时,需要通知服务器以便它可以释放分配给客户端的许可证 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/