Пользовательское действие C # в Wix

Когда мое приложение удаляется, сервер должен быть уведомлен, чтобы он мог освободить лицензионный ключ, назначенный клиенту. Это делается через вызов веб-службы.

Я создал настраиваемое действие C #, которое делает это. Проблема в том, что программа удаления завершает работу, говоря, что не может найти dll.

Журнал ошибок для msi содержит следующую ошибку:

Ошибка 1723. Проблема с этим пакетом установщика Windows. Не удалось запустить DLL, необходимую для завершения этой установки. Обратитесь в службу поддержки или к поставщику пакета. Действие ReadLicenseKeyFromFile, запись: ReadLicenseKey, библиотека: C: \ Windows \ Installer \ MSI4F42.tmp

У меня есть функция ReadLicenseKey, помеченная как настраиваемое действие. Настраиваемое действие называется ReadLicenseKeyFromFile.

<Custom Action="ReadLicenseKeyFromFile" After="InstallInitialize">
    REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE
</Custom>

<CustomAction Id="ReadLicenseKeyFromFile" BinaryKey="UnInstallCA.CA.dll" DllEntry="ReadLicenseKey" Execute="immediate" Return="check" />

<Binary Id="UnInstallCA.CA.dll" SourceFile="$(var.UnInstallCA.TargetDir)UnInstallCA.CA.dll" />

Проект настраиваемого действия выводит файл .CA.dll. Я попытался установить файл как часть установки, вручную скопировал вставленный файл, ничего не сделал с файлом ... в основном перепробовал все возможные комбинации.

Должно быть что-то, чего мне не хватает, пожалуйста, помогите.


person Amith George    schedule 31.07.2009    source источник


Ответы (2)


Мне жаль, что я потратил на это все время.

Решение было слишком простым. Я забыл разместить атрибут [CustomAction] в этом конкретном методе. Таким образом, хотя это было последнее действие, которое я написал в моем файле CustomAction.cs, оно было первым, которое вызывалось в InstallExecuteSequence. И из-за этого я ввел себя в заблуждение, думая, что он не может найти файл. Ну, а также то, что я, должно быть, очень хотел спать ...

В любом случае, в поисках ответа мне удалось найти много хороших ресурсов, особенно Сериал Алекса Шевчука на Wix. Еще я понял, что мне не нужно устанавливать dll-файл с настраиваемыми действиями. Я просто ссылаюсь на него из своего проекта Wix и указываю путь к нему. Библиотека DLL встраивается в установку и передается оттуда при вызове настраиваемых действий удаления.

person Amith George    schedule 02.08.2009
comment
Когда я вызвал у себя ту же проблему, которую использовал, нужно посмотреть на DLL и проверить, действительно ли экспортируются правильные символы. / Л - person leiflundgren; 24.04.2010
comment
Спасибо, что разместили свой ответ, я совершил ту же (простую) ошибку, не осознавая этого, такое загадочное сообщение об ошибке! - person si618; 06.08.2014

Копируется ли UnInstallCA.CA.dll на целевой компьютер во время установки? Похоже, при деинсталляции его нет.

Если он туда попал - он может работать? (попробуйте запустить его с целевой машины, чтобы узнать, может ли он делать то, что должен делать - возможно, вам нужно отправить какую-то другую dll, которую вы используете, с этого - или, может быть, какой-нибудь распространяемый пакет)

person da_m_n    schedule 31.07.2009
comment
да, установочная dll копируется при установке. нет, я не знаю, как имитировать использование библиотеки DLL. если вы имеете в виду создание нового проекта, который ссылается на dll, а затем вызов функции, да, это произойдет. - person Amith George; 01.08.2009
comment
@Anton Tykhyy - меня уведомили, что вы отправили ответ на мой вопрос час назад, но я не вижу этого ответа. В моем профиле я мог видеть только часть ответа. проект настраиваемого действия запускает необходимую утилиту из DTF, которая преобразует управляемую dll в неуправляемую .CA.dll. и этот .CA.dll - это то, что я устанавливаю вместе с моей установкой. есть ли способ, с помощью которого я могу проверить, какой путь установка ищет, чтобы найти dll? - person Amith George; 01.08.2009
comment
одной проблемой может быть переменный путь. Я никогда не использовал его таким образом :) - жестко запрограммируйте реальный путь, чтобы увидеть, работает ли что-то. - person da_m_n; 02.08.2009