Создайте пользовательское действие, которое msiexec будет игнорировать своим кодом ошибки - PullRequest
4 голосов
/ 11 мая 2011

Я использую Visual Studio 2010 для создания установочного пакета с .NET Framework 4.0 для моего проекта.Я создаю пользовательское действие, используя класс Installer с DLL, созданной с помощью .NET Framework 4.0.Мой установочный пакет успешно установлен.

Если я удаляю свой пакет и после этого удаляю .NET Framework 4, все в порядке.

Однако, если я удаляю .NET Framework, после этого я удаляюмой пакет установки, я получаю ошибку: «1001 InstallUtilLib.dll неизвестная ошибка».Я думаю, что причина, по которой я не могу удалить свой установочный пакет, потому что msiexec будет вызывать мое настраиваемое действие, которое является классом Installer, использующим .NET Framework 4.0, в то время как .NET Framework 4.0 удален ранее -> DLL установщика не может быть вызван и возвращает ошибку -> удаление ошибки MSI.

Пожалуйста, помогите мне, как избежать этой ошибки или как игнорировать код ошибки этого пользовательского действия.Спасибо.

Ответы [ 3 ]

4 голосов
/ 11 мая 2011

Вы можете попробовать это:

Visual Studio не делает 'не поддерживает это напрямую.

1 голос
/ 08 января 2015
Ответ

mrnx помог мне, но я подумал, что расширю этот ответ тем, что я в итоге сделал.В моем случае я включал драйвер в несколько программ, где драйвер всегда возвращает 1 вместо 0.

  1. На основе процедуры mrnx , чтобы открытьMSI-файл и просмотр таблицы CustomAction , я обнаружил, что все мои пользовательские действия имели тип "3090".Чтобы установить флаг msidbCustomActionTypeContinue, мне нужно было добавить 64, что означало изменение значения на 3154.

  2. Поскольку я хотел автоматизировать это в процессе сборки, я нашел этот Вопрос, в котором объясняется, как создать преобразование MSI.Это решение работает, но оно не было переносимым между проектами, поскольку преобразование будет работать только для одного файла MSI.Вместо этого я обнаружил, что простой VB-скрипт, вызываемый на этапе пост-сборки проекта установки, работает для различных проектов MSI:

Dim msiInstaller
Dim msiDatabase
Dim msiView
Dim pathToMsi

If WScript.Arguments.Count <> 1 Then
    WScript.Echo "Usage:" & vbCrLf & "  " & WScript.ScriptName & " <path-to-msi>"
    WScript.Quit 1
End If

pathToMsi = WScript.Arguments(0)
Set msiInstaller = CreateObject("WindowsInstaller.Installer")

Set msiDatabase = msiInstaller.OpenDatabase(pathToMsi, 1)
Set msiView = msiDatabase.OpenView("UPDATE CustomAction SET Type=3154 WHERE Type=3090")
msiView.Execute msiRecord

msiDatabase.Commit

Использование (установлено в PostBuildEventсвойств проекта):

"$(ProjectDir)..\patchMsiForDriver.vbs" "$(BuiltOuputPath)"
1 голос
/ 11 мая 2011

Эту ошибку можно избежать, если иметь условие запуска Framework 4.0, чтобы при запуске установки (для установки или удаления) она сначала проверяла Framework 4.0

.
...