2011-05-23 143 views
1

我使用下面的脚本来运行一个可执行文件作为admin管理员:运行可执行文件中的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上,没有任何反应。安装不会询问用户任何内容,并且安装失败。

任何想法,为什么这可能是或任何其他建议如何作为管理员运行可执行文件?

回答

0

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

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

+0

使用LAAW_SHELLEXECUTEVERB = “运行方式” 应引起W7和Vista把一个UAC提示。 – ajs410 2012-02-29 17:57:43

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之前运行:

LAAW_SHELLEXECUTEVERB =“runas”;

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

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