2009-07-31 12 views
11

Wenn meine Anwendung deinstalliert wird, muss der Server benachrichtigt werden, damit er den Lizenzschlüssel freigibt, der dem Client zugewiesen ist. Dies geschieht über einen Web-Service-Aufruf.C# benutzerdefinierte Aktion in Wix

Ich habe eine C# benutzerdefinierte Aktion erstellt, die dies tut. Das Problem ist, dass das Deinstallationsprogramm sagt, dass es keine DLL finden kann.

Das Fehlerprotokoll für die msi enthält folgende Fehler:

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

ich die Funktion ReadLicenseKey als benutzerdefinierte Aktion markiert haben. Die benutzerdefinierte Aktion heißt 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" /> 

Das benutzerdefinierte Aktionsprojekt gibt die .CA.dll-Datei aus. Ich habe versucht, die Datei als Teil des Setups zu installieren, manuell kopieren Sie die Datei eingefügt, nichts in die Datei getan ... im Grunde alle möglichen Kombinationen ausprobiert.

Da muss etwas sein, das ich vermisse, also bitte helfen.

Antwort

11

Es tut mir leid zu haben verschwendete die Zeit damit.

Die Lösung war etwas zu einfach. Ich hatte vergessen, das [CustomAction] -Attribut für diese bestimmte Methode zu platzieren. Obwohl es die letzte Aktion war, die ich in meiner CustomAction.cs-Datei geschrieben hatte, war es die erste, die in InstallExecuteSequence aufgerufen wurde. Und deswegen wurde ich in die Irre geführt, dass ich die Datei nicht finden konnte. Nun, das genauso wie die Tatsache, dass ich wirklich verschlafen habe ...

Wie auch immer, während der Suche nach der Antwort habe ich es geschafft, viele schöne Ressourcen zu finden, vor allem Alex Shevchuks series on Wix. Eine andere Sache, die ich erkannte, war, dass ich die benutzerdefinierte Aktion DLL-Datei nicht installieren muss. Ich habe es nur von meinem Wix-Projekt referenziert und den Weg dorthin angegeben. Die DLL wird in das Setup eingebettet und von dort gestreamt, wenn die benutzerdefinierten Aktionen zum Deinstallieren aufgerufen werden sollen.

+1

Wenn ich mir das selbe Problem, das ich verwendet habe, verursacht habe, hängt davon ab, die DLL anzuschauen und zu überprüfen, ob die richtigen Symbole wirklich exportiert werden. /L – leiflundgren

+0

Vielen Dank für Ihre Antwort, ich habe nur den gleichen (einfachen) Fehler gemacht, ohne es zu merken, so eine kryptische Fehlermeldung! – si618

0

Wird Ihre UnInstallCA.CA.dll während der Installation auf den Zielcomputer kopiert? Es scheint, dass es nicht bei der Deinstallation gibt.

Wenn es da ist - kann es laufen? (Versuchen Sie, es vom Zielrechner aus zu starten, um zu sehen, ob es tun kann, was es tun soll - vielleicht müssen Sie eine andere DLL, die Sie verwenden, aus diesem Paket herausschicken)

+0

Ja, die Installations-DLL wird bei der Installation kopiert. Nein, ich weiß nicht, wie man die Verwendung der DLL simuliert. wenn du meinst, indem du ein neues projekt erstellst, das auf die dll verweist und dann die funktion aufruft, dann passiert das. –

+0

@Anton Tykhyy - Ich wurde benachrichtigt, dass Sie eine Antwort auf meine Frage vor einer Stunde geschrieben haben, aber ich kann diese Antwort nicht sehen. Von meinem Profil konnte ich nur einen Teil der Antwort sehen. Das benutzerdefinierte Aktionsprojekt führt das erforderliche Dienstprogramm vom DTF aus, das die verwaltete DLL in nicht verwaltete .CA.dll konvertiert. und das .CA.dll ist, was ich zusammen mit meinem Setup installiere. Gibt es sowieso, durch die ich überprüfen kann, welchen Pfad das Setup sucht, um die DLL zu finden? –

+0

ein Problem könnte der variable Pfad sein. Ich habe es nie so benutzt :) - Hardcode der echte Weg, um zu sehen, ob die Dinge funktionieren. –

Verwandte Themen