Управляемое (C #) пользовательское действие в WIX не работает (код ошибки 1154) - PullRequest
3 голосов
/ 20 сентября 2011

Я разрабатываю настраиваемое действие для установки одного и того же файла в несколько папок (которые определяются во время выполнения).

Настраиваемое действие находится в проекте настраиваемого действия Wix C #. Это код выглядит так:

public class CustomActions
{
    [CustomAction]
    public static ActionResult InstallToTrunks(Session session)
    {
        // some logic
    }
}

Соответствующая разметка WIX выглядит следующим образом:

    <Binary Id='CustomActions' SourceFile='..\CustomActions\bin\$(var.Configuration)\CustomActions.dll' />
<CustomAction Id='InstallToTrunks' BinaryKey='CustomActions' DllEntry='InstallToTrunks' Execute='deferred' Return='check'/>

<InstallExecuteSequence>
  <Custom Action='InstallToTrunks' After='InstallInitialize'></Custom>
</InstallExecuteSequence>

Однако, когда я пытаюсь запустить установку, происходит сбой, и журнал говорит: CustomAction InstallToTrunks вернул фактический код ошибки 1154 (обратите внимание, что это может быть не на 100% точно, если перевод произошел внутри песочницы)

Любая помощь будет приветствоваться. В качестве альтернативы, если у вас есть предложение о том, как добиться того, что я пытаюсь сделать (установить один и тот же файл в несколько папок, которые можно определить только во время перенастройки) без пользовательских действий, это также будет полезно.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 сентября 2011

Похоже, вы ссылаетесь на сборку настраиваемого действия, а не на DLL настраиваемого действия.Эти проекты с настраиваемыми действиями создают неуправляемую DLL-библиотеку настраиваемых действий с именем xxxx.CA.dll, которая содержит сжатую копию сборки настраиваемого действия и ее зависимостей.

Попробуйте:

<Binary Id='CustomActions' SourceFile='..\CustomActions\bin\$(var.Configuration)\CustomActions.CA.dll' />
3 голосов
/ 22 сентября 2011

Несмотря на то, что вы приняли ответ и, похоже, вы пойдете по пути настраиваемых действий, я хотел бы обратить ваше внимание на то, что подход CopyFile является рекомендуемым и поддерживаемым способом выполнения таких действий, которые вы описываете в своем сценарии.Если вы точно не знаете, сколько файлов и папок копировать, вы можете добавить временные строки в таблицу CopyFile во время установки, выполнив немедленное настраиваемое действие.Таким образом вы дадите установщику Windows точные инструкции о том, что делать, и дадите ему выполнить свою работу.

3 голосов
/ 20 сентября 2011

WiX уже поддерживает это через элемент CopyFile .

По сути, вы создаете элемент CopyFile для каждой копии, которую хотите сделать.Затем можно установить для атрибута DestinationProperty пользовательское свойство для каждой копии.Эти свойства могут быть установлены динамически во время установки.

Однако, если вы хотите использовать настраиваемое действие, есть несколько решений:

Пользовательские .NET DLL не поддерживаются.Если у вас есть .NET DLL, преобразуйте ее в действие класса установщика.

...