Запустите исполняемый файл от имени администратора в 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. Программа, запускаемая сценарием установки, не наследует автоматически права администратора от сценария установки.

Другие вопросы по тегам