Пользовательское действие Installshield с повышенными правами не выполняется должным образом - PullRequest
0 голосов
/ 16 октября 2018

Я работаю с 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 (т. Е. «Устанавливается вместе с продуктом»), оно работает нормально.Я не пробовал это раньше, потому что я думал о том, чтобы заставить это работать с модулем слияния.(Я знаю, что было бы возможно определить пользовательское действие в модуле слияния, но тогда я не могу точно настроить параметры командной строки)

Я все еще не до конца понимаю, почему.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

На самом деле не достаточно информации для отладки, потому что в основном это сбой вашей программы.Как правило, возникают следующие проблемы:

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

  2. Программа не запускается из Windows Explorer, поэтому текущий рабочий каталог не будет установлен.Путь к вашим файлам должен быть явно указан (и это может быть причиной того, почему работает «запуск из установленного места»).

Обычно вам не нужно регистрироваться во время установки.Информация почти всегда является статической и может быть извлечена во время сборки в (например) таблицу Registry файла MSI.Вероятно, для этого в InstallShield есть что-то вроде настройки регистрации.

0 голосов
/ 17 октября 2018

Мне кажется, что файл, который вы запускаете, не имеет необходимых зависимостей.Если вы, например, запускаете dll и помещаете ее в двоичную таблицу, то эта dll не должна иметь никаких зависимостей.Если вы указываете на dll, установленную с продуктом, то в этой же папке должны существовать любые необходимые зависимости.
Конечно, есть обходные пути, но ограничение для установки с продуктом - это то, где вы можете поместить его в последовательностьтак как вы должны ждать, пока ваши вещи будут установлены, прежде чем запускать пользовательское действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...