2011-05-23 195 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對話框。行爲是 類似於右鍵單擊要運行的可執行文件並單擊 運行方式。此對話框允許最終用戶選擇應該用於運行應用程序的用戶 帳戶。