Я использую WiX 3.5.1930 в Visual Studio 2010, ориентируясь на .NET Framework 3.5. ( Более поздние еженедельные сборки WiX, похоже, сильно повреждены в отношении их шаблона настраиваемого действия, по крайней мере, на данный момент. 1930 - это самая последняя сборка, которая, кажется, создает сборку C # CA с рабочими ссылками.)
У меня есть два настраиваемых действия сборки написаны на C #. одна из них работает нормально. Другой сбой со следующей ошибкой:
CustomActionnNameHere returned actual error code 1154 (note this may not be 100% accurate if translation happened inside sandbox)
Я сравнил файлы .csproj и .wixproj, и, насколько я могу судить, различия уместны (например, список включенных файлов .cs). Я изменил нерабочие .wxs так, чтобы они вызывали рабочее настраиваемое действие вместо нерабочего настраиваемого действия, и оно работает так, как нужно.
Что еще можно посмотреть, чтобы получить это работающее?
Редактировать: Просто для быть завершенным 1154 ссылается на недопустимую DLL - net helpmsg переводит ее (на английском языке) в «Один из файлов библиотеки, необходимый для запуска этого приложения, поврежден».
Второе редактирование: запустил peverify против dll (вытащил копию из \ windows \ installer, в то время как установщик был запущен), и он говорит, что все хорошо в dll. В DLL есть только метод настраиваемого действия с «возвращаемым успехом», так что проверять его не так уж много, но он подтверждает, что DLL не повреждена.
Третье редактирование: код в нарушенном настраиваемом действии следует:
using Microsoft.Deployment.WindowsInstaller;
namespace Framework.Installer.Database {
public class CustomActions {
[CustomAction]
public static ActionResult RunMigration(Session session) {
return ActionResult.Success;
}
}
}
Не так много. Соответствующие части .wxs следующие:
<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" />
Попробуйте поместить свой вызов пользовательского действия в
<InstallExecuteSequence/>
в надежде получить лучшее сообщение об ошибке . Я получил разные сообщения об ошибках в зависимости от того, как было вызвано действие. Кроме того, попробуйте использовать fuslogvw.exe. Это также может дать вам довольно приятное сообщение об ошибке.