C# custom action in Wix

Amith George picture Amith George · Jul 31, 2009 · Viewed 14.4k times · Source

When my application is uninstalled, the server needs to be notified so that it can free up the license key assigned to the client. This is done via a web service call.

I created a C# custom action that does this. The problem is, the uninstaller is quitting saying that it couldnt find a dll.

The error log for the msi contains the following error:

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

I have the function ReadLicenseKey marked as a custom action. The custom action is named 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" />

The custom action project is outputting the .CA.dll file. I have tried installing the file as a part of the setup, manually copy pasted the file, done nothing to the file... basically tried all possible combinations.

There must be something that I am missing, so please help.

Answer

Amith George picture Amith George · Aug 3, 2009

Am sorry to have wasted everyone's time over this.

The solution was something rather too simple. I had forgotten to place the [CustomAction] attribute on this particular method. So even though it was the last action which I had written in my CustomAction.cs file, it was the first one to be called in the InstallExecuteSequence. And because of that, I got misled in to thinking that it couldnt find the file. Well, that as well as the fact that I must have been really sleepy...

Anyway, while searching for the answer I did manage to come across lots of nice resources, especially Alex Shevchuks series on Wix. Another thing I realised was that I dont have to install the custom action dll file. I just have reference it from my Wix project and provide the path to it. The dll gets embedded in the setup and is streamed from there when the uninstall custom actions is to be called.