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

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

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

  

错误1723.存在问题   此Windows Installer程序包。一个DLL   完成此安装所需   无法运行。联系您的支持   人员或包装供应商。行动   ReadLicenseKeyFromFile,条目:   ReadLicenseKey,库:   C:\的Windows \安装\ 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系列在Wix上。我意识到的另一件事是我不必安装自定义动作DLL文件。我只是从我的Wix项目中引用它并提供它的路径。 dll嵌入到设置中,并在调用卸载自定义操作时从那里进行流式传输。

其他提示

安装期间是否将UnInstallCA.CA.dll复制到目标计算机?似乎卸载时不存在。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top