Estoy usando WiX 3.5.1930 en Visual Studio 2010, apuntando a .NET Framework 3.5. (Las compilaciones semanales posteriores de WiX parecen estar muy rotas con respecto a su plantilla de acción personalizada, al menos por ahora. 1930 es la versión más reciente que parece hacer una CA C# compilable con referencias de trabajo.)La acción personalizada en C# utilizada a través de WiX falla con el error 1154
Tengo dos ensambles de acción personalizados escritos en C#. Uno de ellos funciona bien. La otra falla con el siguiente error:
CustomActionnNameHere returned actual error code 1154 (note this may not be 100% accurate if translation happened inside sandbox)
He comparado los archivos Csproj y .wixproj archivos, y lo mejor que puedo decir las diferencias son apropiado (g lista de archivos incluidos Cs..). He cambiado los .wxs que no funcionan para llamar a la acción personalizada que funciona en lugar de la acción personalizada que no funciona y funciona como epxected.
¿Qué más puedo ver para que funcione?
Editar: Para completar, 1154 se refiere a una DLL no válida - net helpmsg lo traduce (en inglés) a "Uno de los archivos de la biblioteca necesarios para ejecutar esta aplicación está dañado".
Segunda edición: PEverify corrieron en contra de la DLL (agarró una copia de \ windows \ instalador mientras el instalador se ejecuta) y dice que todo está bien en la DLL. La DLL solo tiene el método de acción personalizado con un "éxito de devolución", por lo que no hay mucho que verifique, pero sí confirma que la DLL no está corrupta.
Tercera edición: El código de la acción personalizada rota sigue:
using Microsoft.Deployment.WindowsInstaller;
namespace Framework.Installer.Database {
public class CustomActions {
[CustomAction]
public static ActionResult RunMigration(Session session) {
return ActionResult.Success;
}
}
}
No hay mucho a ella. Las partes pertinentes de los .wxs son los siguientes:
<InstallExecuteSequence>
<Custom Action="DotNetMigratorCustomActionPreviousUp" After="SetMigrationPropertiesPreviousUp"><![CDATA[(&Database = 3)]]></Custom>
</InstallExecuteSequence>
<Binary Id="DotNetMigratorCustomActionDll"
SourceFile="$(var.Framework.Installer.Database.CustomActions.TargetDir)\SoftwareAnswers.Framework.Installer.Database.CustomActions.dll" />
<CustomAction Id="DotNetMigratorCustomActionPreviousUp"
Return="check"
BinaryKey="DotNetMigratorCustomActionDll"
DllEntry="RunMigration"
Execute="deferred" />
¿Cómo hiciste esta acción personalizada? ¿Estás usando DTF? –
Si uso la Deployment Tools Foundation (DTF - explicada para futuros buscadores - no supe de qué se trataba hasta que la busqué) No lo sé. Como sugerí, estoy usando el soporte de Custom Action en votive para llevarme a la acción desarrollada. Creo que está usando DTF por debajo, pero eso no está realmente expuesto directamente, lo mejor que puedo decir. –