Запустите исполняемый файл от имени администратора в InstallScript
Я использую следующий скрипт для запуска исполняемого файла в качестве администратора:
#include "ifx.h"
export prototype MyFunction(HWND);
///////////////////////////////////////////////////////////////////////////////
//
// Function: MyFunction
//
// Purpose: Calls into Companion to execute the detect camera and all init setup
// code
//
///////////////////////////////////////////////////////////////////////////////
function MyFunction(hMSI)
begin
if REMOVEALLMODE ==0 then //only run if they are installing the product
LAAW_SHELLEXECUTEVERB = "runas";
LaunchApplication (INSTALLDIR ^ "Companion.exe",
"-detect -test -wsdl -exit -nimbus",
"",
SW_NORMAL,
0,
LAAW_OPTION_WAIT_INCL_CHILD | LAAW_OPTION_USE_SHELLEXECUTE);
endif;
end;
На XP приведенный выше скрипт откроет диалоговое окно, спрашивающее пользователя, от какого пользователя должен запускаться исполняемый файл. Это позволяет им выбрать администратора для запуска исполняемого файла. Однако в Windows 7 ничего не происходит. Установка ничего не запрашивает у пользователя, и установка завершается неудачно.
Любые идеи о том, почему это может быть или какие-либо другие предложения о том, как запустить исполняемый файл в качестве администратора?
2 ответа
Вы можете различить XP и все не-XP операционные системы, как это:
if ( SYSINFO.WINNT.bWinXP ) then
LAAW_SHELLEXECUTEVERB = "open"; // target PC is on Windows XP
else
LAAW_SHELLEXECUTEVERB = "runas"; // Windows 7 (or Vista)
endif;
Вот совет из библиотеки справки InstallShield:
Если вы используете LAAW_OPTION_USE_SHELLEXECUTE в системах, работающих под управлением Windows Vista или более поздней версии, и хотите запустить приложение с использованием полной учетной записи администратора (аналогично щелчку правой кнопкой мыши исполняемого файла, который нужно запустить, и нажатием кнопки "Запуск от имени администратора"), установите LAAW_SHELLEXECUTEVERB на runas перед использованием LaunchApplication. в вашем скрипте:
LAAW_SHELLEXECUTEVERB = "runas";
Это гарантирует, что приложение всегда запускается с полными привилегиями администратора независимо от того, имеет ли запускаемое приложение манифест приложения с соответствующими настройками. Обратите внимание, что это может вызвать запрос контроля учетных записей (UAC) для получения согласия или учетных данных.
В системах под управлением операционных систем, предшествующих Windows Vista, если используется runas, отображается диалоговое окно "Запуск от имени". Поведение аналогично щелчку правой кнопкой мыши на исполняемом файле, который нужно запустить, и щелчком по Запуску от имени. Это диалоговое окно позволяет конечному пользователю выбрать учетную запись пользователя, которую следует использовать для запуска приложения.
Что происходит, когда вы запускаете приложение самостоятельно под Win7, я имею в виду вне InstallShield?
Я думаю, что это может быть связано с UAC. Программа, запускаемая сценарием установки, не наследует автоматически права администратора от сценария установки.