1

我正在使用以下脚本以管理员身份运行可执行文件:



#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 上,什么也没有发生。安装不要求用户提供任何东西,安装失败。

关于为什么会这样的任何想法或关于如何以管理员身份运行可执行文件的任何其他建议?

4

2 回答 2

0

当您在 Win7 下自己启动应用程序时会发生什么,我的意思是在 InstallShield 之外?

我认为这可能是由于UAC。由 installscript 启动的程序不会自动从 installshield 脚本继承管理员权限。

于 2011-06-10T12:31:00.093 回答
0

您可以像这样区分 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 帮助库的提示:

如果您在运行 Windows Vista 或更高版本的系统上使用 LAAW_OPTION_USE_SHELLEXECUTE,并且您想使用完整的管理员帐户启动应用程序(类似于右键单击要运行的可执行文件并单击以管理员身份运行),请在使用 LaunchApplication 之前将 LAAW_SHELLEXECUTEVERB 设置为 runas在你的脚本中:

LAAW_SHELLEXECUTEVERB = "运行";

这确保了应用程序始终以完全管理员权限运行,无论要启动的应用程序是否具有具有相关设置的应用程序清单。请注意,这可能会触发用户帐户控制 (UAC) 提示以获取同意或凭据。

在运行早于 Windows Vista 的操作系统的系统上,如果使用 runas,则会显示“运行方式”对话框。该行为类似于右键单击要运行的可执行文件并单击运行方式。此对话框使最终用户能够选择应用于运行应用程序的用户帐户。

于 2013-10-06T02:34:39.787 回答