Установите выпуск Shield 2009 Premier Custom Action в Vista Home / Premium / Ultimate - PullRequest
0 голосов
/ 18 мая 2009

Среда: установите Shield 2009 Premier, Vista (для дома / премиум-класса, Ultimate)

У меня есть специальное действие в Install Shield 2009, которое запускается во время установки. Если setup.exe работает нормально, но при запуске MyApplication.msi в Vista (обратите внимание, что в других ОС настраиваемые действия работают нормально), он показывает исключение при выполнении настраиваемого действия. Пользовательское действие просто выполняет exe с аргументами командной строки.

Этот exe-файл прекрасно работает в этой ОС. Но когда MyApplication.msi хочет запустить его, он показывает исключение.

Я думаю: MyApplication.msi не может дать этому настраиваемому действию (файл .exe) надлежащие привилегии (административные) для запуска. Но setup.exe может.

Как это можно решить ...?


В мастере настраиваемых действий для настраиваемого действия для значения «Выполнение в сценарии» я выбрал «Отложенное выполнение в контексте системы»

1 Ответ

1 голос
/ 18 мая 2009

Вы не заявили, но, похоже, ваш файл setup.exe имеет манифест, требующий прав администратора (если вы получаете приглашение UAC при запуске setup.exe, это так). Также вероятно, что исполняемый файл, который вы пытаетесь запустить из своего настраиваемого действия, имеет аналогичные требования к административным привилегиям. Пользовательское действие exe в MSI использует CreateProcess, который не может быть повышен.

Если ваше действие выполняется в последовательности пользовательского интерфейса, вам нужно каким-то образом использовать ShellExecute или ShellExecuteEx - это можно сделать с помощью настраиваемого действия InstallScript с помощью LaunchApplication с флагом LAAW_OPTION_USE_SHELLEXECUTE или с C ++, который напрямую вызывает ShellExecuteEx.

Если ваше действие выполняется в последовательности «Выполнить», вы должны пометить его «Отложено в системном контексте», чтобы оно началось с повышенного контекста для начала. Это, как правило, предпочтительнее (по крайней мере, с точки зрения взаимодействия с пользователем), поскольку оно позволяет избежать дополнительного запроса UAC, который будет показан другим методом. Однако любое отложенное действие имеет ограничения (например, минимальный доступ к свойству), с которыми вам может потребоваться ознакомиться.

...