我使用以下脚本以管理员身份运行可执行文件:
#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上,没有任何反应。安装不会询问用户任何内容,安装失败。
关于为什么会这样做的任何想法或关于如何以管理员身份运行可执行文件的任何其他建议?
在Win7下自己启动应用程序时会发生什么,我的意思是在InstallShield之外?
我想这可能是由于UAC。由installscript启动的程序不会自动从installshield脚本继承管理员权限。
您可以区分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 =“runas”;
这可确保应用程序始终以完全管理员权限运行,无论要启动的应用程序是否具有具有相关设置的应用程序清单。请注意,这可能会触发用户帐户控制(UAC)提示同意或凭据。
在运行早于Windows Vista的操作系统的系统上,如果使用runas,则会显示“运行方式”对话框。该行为类似于右键单击要运行的可执行文件并单击“运行方式”。此对话框使最终用户可以选择应该用于运行应用程序的用户帐户。