2010-04-07 11 views
7

kann nicht ausgeführt werden Ich versuche, eine benutzerdefinierte Aktion für meine Wix-Installation zu erstellen, und es funktioniert einfach nicht, und ich bin mir nicht sicher, warum.Wix benutzerdefinierte Aktion in MSI

Hier ist das Bit in der entsprechenden Datei Wix:

<Binary Id="INSTALLERHELPER" SourceFile=".\Lib\InstallerHelper.dll" /> 
<CustomAction Id="HelperAction" BinaryKey="INSTALLERHELPER" DllEntry="CustomAction1" Execute="immediate" /> 

Hier ist die vollständige Klassendatei für meine benutzerdefinierte Aktion:

using Microsoft.Deployment.WindowsInstaller; 

namespace InstallerHelper 
{ 
    public class CustomActions 
    { 
    [CustomAction] 
    public static ActionResult CustomAction1(Session session) 
    { 
     session.Log("Begin CustomAction1"); 

     return ActionResult.Success; 
    } 
    } 
} 

Die Aktion durch einen Tastendruck auf der Benutzeroberfläche ausgeführt wird (für jetzt):

<Control Id="Next" Type="PushButton" X="248" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)" > 
     <Publish Event="DoAction" Value="HelperAction">1</Publish> 
    </Control> 

Wenn ich das MSI laufen, bekomme ich diesen Fehler im Protokoll:

MSI (c) (08:5C) [10:08:36:978]: Connected to service for CA interface. 
MSI (c) (08:4C) [10:08:37:030]: Note: 1: 1723 2: SQLHelperAction 3: CustomAction1 4: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 
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 SQLHelperAction, entry: CustomAction1, library: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 
MSI (c) (08:4C) [10:08:38:501]: Product: SessionWorks :: Judge Edition -- 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 SQLHelperAction, entry: CustomAction1, library: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 

Action ended 10:08:38: SQLHelperAction. Return value 3. 
DEBUG: Error 2896: Executing action SQLHelperAction failed. 
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2896. The arguments are: SQLHelperAction, , 

Keiner der beiden Fehlercodes oder Nachrichten, die es mir gibt, ist genug, um mir zu sagen, was falsch ist. Oder ich verstehe einfach nicht, was sie sagen, ist falsch.

Zuerst dachte ich, es könnte sein, weil ich Wix 3.5 verwendet habe, also nur um sicher zu gehen, dass ich Wix 3.0 benutze, aber ich bekomme den gleichen Fehler.

Irgendwelche Ideen, was ich falsch mache?

+1

"Eine DLL, die für diese Installation benötigt wird, konnte nicht ausgeführt werden." - Dies zeigt an, dass das Installationsprogramm die DLL gefunden hat, aber keine Methode gefunden hat. Sie haben erwähnt, dass Sie den Code nach der Veröffentlichung des Protokolls geändert haben - können Sie ein aktualisiertes Protokoll veröffentlichen? Wie hast du das Log laufen lassen - hast du/l * vx gemacht? – demp

Antwort

7

Für Ihre benutzerdefinierte Aktionsgruppe benötigen Sie eine Konfigurationsdatei und setzen das Attribut auf true. Stellen Sie sicher, dass Sie Ihre Konfigurationsdatei CustomAction.config benennen. Wenn Sie dies nicht tun, wird es nicht funktionieren. Ich gehe davon aus, dass Sie auf dem .NET 4 Framework ausgeführt werden.

Weitere Informationen finden Sie unter here. AntusW hat bereits darauf hingewiesen, dass fuslogvw.exe in diesem Szenario sehr hilfreich ist.

6

Benutzerdefinierte Aktionen, die über DoAction gestartet werden, können nicht in die Protokolldatei schreiben.

Dies verwirrte mich auch, als ich anfing WiX zu verwenden. Wenn Sie sehen möchten, was vor sich geht, können Sie System.Diagnostics.Debugger.Launch() am Anfang der benutzerdefinierten Aktion verwenden. Dadurch werden Sie aufgefordert, Visual Studio an den Prozess anzuhängen, damit Sie es debuggen können.

+0

Ja, blöde Windows Installer Zurückhaltung. –

+0

Sie können jedoch in Dateien auf dem Zielrechner schreiben! –

+3

Debugger.Launch() hat nichts für mich getan. – jcmcbeth

0

Für mich war es meine CustomAction DllEntry nicht meine Methodenname. d. h.

<CustomAction Id="CheckingPID" BinaryKey="CheckPID.CA" DllEntry="BadValue" /> 

public static ActionResult CheckPID(Session session) 
0

Haben Sie versucht, die Laufzeitbibliothekseinstellungen in der benutzerdefinierten Aktions-DLL zu ändern? Die Debug-Modus-Optionen/MDd und/MtD erfordern insbesondere Debug-Versionen der C++ - Laufzeit, die auf Produktionsmaschinen nicht verfügbar sind (für sie gibt es keine weitervertreibbare Lizenz). Wenn Sie die Compileroption/MD verwenden, müssen Sie möglicherweise auch die Visual Studio C++ - Laufzeitversion installieren, die Sie auf den Computern der Benutzer benötigen. Dazu gibt es ein Mergemodul: C++ Redistributable package with WIX.

8

anstelle der Referenz auf die. DLL-Referenz die .CA.dll, es funktionierte für mich.

+0

Ah, endlich war das auch für mich. – laifukang

+1

Genau das ist mir passiert. Ich habe ein Projekt namens "Company.CA" erstellt, das "Company.CA.dll" produziert hat. Aber dann hat WiX alles in "Company.CA.CA.dll" gestopft und ich habe es nicht bemerkt. Ich habe eine ganze Stunde damit verschwendet! –

1

Dieser Fehler tritt auf, wenn Sie das Installationsprogramm project configu- ration/platform auf debug/x64 und die benutzerdefinierte Aktionsprojektkonfiguration/platform auf debug/x86 eingestellt haben.

Korrigieren Sie die Plattform, um die Projekte für die gleiche Plattform löste das Problem

In meinem Fall ändert platorm bauen Einstellung.

Dank Yogesh

1

Eine weitere mögliche Antwort - Sie die richtige CA DLL, angegeben haben und die richtige Methode angegeben, aber wenn das Verfahren mit nicht eingerichtet [Custom] Sie werden diesen Fehler erhalten.

Verwandte Themen