Пользовательское действие в 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 ответов


похоже, вы используете DTF. Если вы видите:

using Microsoft.Deployment.WindowsInstaller;

Я только что нашел ту же проблему (используя правильный .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 символа, и это сработало.