Запустите исполняемый файл от имени администратора в InstallScript - PullRequest
1 голос
/ 23 мая 2011

Я использую следующий скрипт для запуска исполняемого файла от имени администратора:



#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 ]

0 голосов
/ 06 октября 2013

Вы можете различить 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 используется, диалоговое окно Run As отображается. Поведение аналогично щелчку правой кнопкой мыши по исполняемому файлу и щелчком Беги как. Это диалоговое окно позволяет конечному пользователю выбрать пользователя учетная запись, которая должна использоваться для запуска приложения.

0 голосов
/ 10 июня 2011

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

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

...