Пользовательское действие в C#, используемое через WiX, завершается ошибкой 1154
Я использую 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 files). Я изменил нерабочее .wxs для вызова рабочего настраиваемого действия вместо нерабочего настраиваемого действия, и он работает как epxected.
что еще я могу посмотреть, чтобы получить эту работу?
Edit: просто для завершения 1154 относится к недопустимой DLL-net helpmsg переводит его (на английском языке) в "один из файлов библиотеки, необходимых для запуска этого приложения поврежденный."
второе редактирование: ran peverify против dll (схватил копию из windowsinstaller во время работы установщика), и он говорит, что все в порядке в 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" />
7 ответов
Я только что нашел ту же проблему (используя правильный .CA.dll файл) и в моем случае это было потому, что я не использовал статический метод. У меня было такое:
public ActionResult MyMethod(Session session)
вместо этого:
public static ActionResult MyMethod(Session session)
после изменения метода он работал просто отлично.
надеюсь, это кому-то поможет.
при создании настраиваемого действия в Visual Studio (Votive) убедитесь, что вы создали проект действия Wix Custon, а не библиотеку классов, иначе для упаковки настраиваемого действия необходимо использовать средство MakeSfxCA.
я наткнулся на другую очень простую (и глупую) причину ошибки 1154: неправильное написание имени записи DLL в элементе CustomAction...
сравнение различных причин, которые другие люди нашли, мне кажется, что ошибка 1154 означает в большинстве случаев "запись DLL не найдена".
еще одна причина, по которой я увидел эту ошибку, заключалась в том, что я забыл добавить атрибут [CustomAction] к имени моей функции c#.
Попробуйте поместить пользовательский вызов действия в
<InstallExecuteSequence/>
в надежде получить лучшее сообщение об ошибке. Я получил различные сообщения об ошибках в зависимости от того, как акция называлась. Кроме того, попробуйте использовать fuslogvw.исполняемый. Это может дать вам довольно хорошее сообщение об ошибке.
в моем случае это была длина имени функции. Это было 27 символов, и мы получили ошибку. Мы изменили имя функции на 24 символа, и это сработало.