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