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

Любые идеи о том, почему это может быть, или любые другие предложения о том, как запустить исполняемый файл в качестве администратора?


person user489041    schedule 23.05.2011    source источник


Ответы (2)


Что происходит, когда вы сами запускаете приложение под Win7, я имею в виду вне InstallShield?

Я думаю, что это может быть из-за UAC. Программа, запускаемая сценарием установки, не наследует автоматически права администратора из сценария установки.

person Bart Gijssens    schedule 10.06.2011
comment
Использование LAAW_SHELLEXECUTEVERB = runas должно привести к тому, что W7 и Vista выведут запрос UAC. - person ajs410; 29.02.2012

Вы можете отличить 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 = "руны";

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

В системах с более ранними операционными системами, чем Windows Vista, если используется runas, отображается диалоговое окно «Запуск от имени». Поведение аналогично щелчку правой кнопкой мыши исполняемого файла, который нужно запустить, и выбору «Запустить от имени». Это диалоговое окно позволяет конечному пользователю выбрать учетную запись пользователя, которую следует использовать для запуска приложения.

person Nothing 2 Lose    schedule 06.10.2013