Я работаю с InstallShield 2018. Я пытаюсь заставить установщик выполнить программу (с некоторыми параметрами командной строки) в конце установки.Когда установка достигает точки, где программа должна быть запущена, я получаю сообщение: «Есть проблема с этим пакетом установщика Windows.Программа, необходимая для завершения этой установки, не может быть запущена ». (С некоторыми более подробными сведениями - см. Ниже)
Программа, которую я пытаюсь выполнить, была разработана нами с использованием C #, и для ее запуска требуются права администратора.,Он имеет (интегрированный) файл манифеста для обеспечения этого.В настоящее время я устанавливаю его с модулем слияния, потому что эта программа должна многократно использоваться между различными версиями программного обеспечения.
Для этого я добавил право действия «Отложенное выполнение в контексте системы» (тип 3682).перед «InstallFinalize» с условием «НЕ УДАЛЯТЬ».Я создал запись в таблице каталогов, которая указывает на папку установки исполняемого файла, причем источник настраиваемого действия указывает на эту запись, а целью является имя исполняемого файла и параметры командной строки, а именно: VersionManager.exe / Зарегистрировать «[ProductName]» / loglevel info
Обработка возврата установлена на «Синхронный [Проверить код выхода]».Я попытался настроить его так, чтобы он игнорировал код выхода - это работает в той степени, в которой установка кажется завершенной без проблем, но когда я проверяю файл журнала, он не может запустить программу, и я вижу что-то вроде этого:
MSI (s) (F0:0C) [10:09:49:724]: Executing op: CustomActionSchedule(Action=RegisterAfterInstall,ActionType=1122,Source=C:\Companyname\VersionManager\,Target=VersionManager.exe /Register "Fully parsed product name" /loglevel info,)
MSI (s) (F0:0C) [10:09:49:740]: Note: 1: 1721 2: RegisterAfterInstall 3: C:\Companyname\VersionManager\ 4: VersionManager.exe /Register "Fully parsed product name" /loglevel info
Info 1721.There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. Action: RegisterAfterInstall, location: C:\ Companyname\VersionManager\, command:VersionManager.exe /Register "Fully parsed product name" /loglevel info
Когда я запускаю данную команду в указанном месте (с правами администратора), установка завершается без проблем.Единственное, о чем я могу думать, это то, что программа почему-то не выполняется с правами администратора.
Когда я проверяю диск в тот момент, когда появляется сообщение (при проверке кода выхода), файлы на самом делеприсутствовал в системе (у меня была проблема с этим ранее, он выдал другое сообщение об ошибке).
Я нашел где-то пост, в котором предлагалось изменить тип действия на «Фиксация выполнения в контексте системы» (потому что программазависит от .NET-материала, зарегистрированного в GAC, и который, по-видимому, недоступен до завершения installfinalize), но это не помогло.
Я не могу поделиться своим исходным кодом (или, по крайней мере, не всем)), но если приведенной выше информации недостаточно, возможно, я смогу создать небольшой пример проекта, который демонстрирует ту же проблему.
РЕДАКТИРОВАТЬ:
Хотя мне все еще интересно, почему подход вышене работает, мне удалось найти обходной путь.Если я включаю файлы программы напрямую (а не через модуль слияния) и определяю настраиваемое действие типа 3602 (т. Е. «Устанавливается вместе с продуктом»), оно работает нормально.Я не пробовал это раньше, потому что я думал о том, чтобы заставить это работать с модулем слияния.(Я знаю, что было бы возможно определить пользовательское действие в модуле слияния, но тогда я не могу точно настроить параметры командной строки)
Я все еще не до конца понимаю, почему.