Попробовал запустить установку с журналированием. Делается это, напомню, командой:
msiexec /i пакет.msi /L*V журнал.log
В файле журнал.log в результате оказывается много всего, но сориентироваться, с какого момента всё пошло не так, можно. В моём случае это оказалась некая CustomAction. Имя этой CustomAction из журнала выудить можно, а что именно она делает - загадка.
Однако, оказалось, всё не так плохо. Есть специальный просмотрщик/редактор инсталляционных пакетов, Orca.exe, входящий в состав Windows SDK, который позволяет посмотреть эти самые CustomAction-ы.
В моём случае это оказалась проверка на наличие .NET 4. Проверка представляет собой VB-скрипт, который, будучи вытащен в отдельный vbs-файл, запускается без проблем, а вот в русле инсталляции работать отказывается. Скрипт этот выглядит так:
NetFrameworkTargetVersion = GetRegistryKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\TargetVersion", "0.0.0")
if NetFrameworkTargetVersion = "0.0.0" or NetFrameworkTargetVersion <> "4.0.0" then
NetFrameworkUrl = "http://www.microsoft.com/ru-ru/download/details.aspx?id=17718"
InfoMsg = "Для корректной работы требуется Microsoft .Net Framework 4 или более старшая версия"
InfoMsg = InfoMsg + "Ссылка для скачивания представлена ниже"
InputBox InfoMsg, "Программа - Установка", NetFrameworkUrl
Err.Clear
Err.Raise 100
end if
function GetRegistryKey(RegistryKey, DefaultValue)
Dim WSHShell, value
On Error Resume Next
Set WSHShell = CreateObject("WScript.Shell")
Value = WSHShell.RegRead(RegistryKey)
if Err.number <> 0 then
GetRegistryKey = DefaultValue
else
GetRegistryKey = Value
end if
Set WSHShell = Nothing
end function
Почему он так себя ведёт, так и осталось загадкой. В сети, правда, есть слухи, что из соображений безопасности вызов WScript.Shell не приветствуется в CustomAction-ах.Однако, пакет-то развернуть надо. Пришлось в инталляционном пакете при помощи всё той же Orca.exe удалить все CustomAction-ы, содержащие проверки такого рода, и тогда инсталляция прошла нормально.
P.S. Там правда, есть ещё одна тонкость. Если программа была установлена раньше, а теперь не даёт себя изменить/удалить из-за вышеописанной проблемы, то патч msi-пакета ничего не даст: дело в том, что копия установочного пакета сохранена в папке C:\Windows\Installer (имя копии можно узнать из вышеупомянутого файла журнал.log). Поэтому при запуске пакета будет запущена его сохраненная копия. Если же перед запуском прибить эту самую копию, тогда пропатченный пакет отработает нормально.
Комментариев нет:
Отправить комментарий