2014-04-14 137 views
1

我有當它與ShellExec做到了啓動一個應用程序的InnoSetup項目。問題是我的安裝程序在啓動時升級,但我希望啓動的應用程序不會升級。這可能有某種方式嗎?Inno Setup的ShellExec特權

procedure LaunchApplication(shortcut: String); 
var 
    ErrorCode: Integer; 
begin 
    ShellExec('', ExpandConstant('{userprograms}\' + shortcut),'', '', SW_SHOW, ewNoWait, ErrorCode); 
end; 
+1

你的意思是你的安裝程序以*高*(管理員)模式運行 - 對吧?或者你的意思是*我的安裝程序升級*? –

回答

2

在這裏,我假設你使用

[Setup] 
PrivilegesRequired=admin 

提升安裝(UAC)

在非高架模式使用運行任何程序ExecAsOriginalUser功能:

原型:

功能ExecAsOriginalUser(常量文件名,則params,工作目錄: 字符串; const ShowCmd:Integer; const Wait:TExecWait; var ResultCode: Integer):Boolean;描述:

使用最初啓動安裝程序的用戶(通常爲 未提升)憑證執行指定的可執行文件或批處理文件。 見Exec和更多 信息[運行]節標誌runasoriginaluser。備註:

此功能不卸載時的支持。

在極不尋常的失敗的案例(例如,如果初始安裝過程中死亡 意外),有可能這個函數引發異常 而不是隻返回false。

+1

看來OP可能會打開一個快捷方式(可能是* .lnk文件;奇怪,我知道,但也許它只是一個錯誤的參數名稱)。如果是這樣,必須使用'ShellExecAsOriginalUser'。 – TLama

+0

這正是我所需要的。我以前看過這個,但忘了它。我正在啓動一個lnk文件。它可能稍微不符合常規,但是它是一個Silverlight應用程序,所以快捷方式包含了id等,使其成爲最簡單的路線。 – thecaptain0220

1

如果使用[Run]條目以postinstall標誌(這樣一個複選框出現在成品頁面上),然後運行非提升是默認行爲。 (您也可以使用runasoriginaluser標誌設置這個對於非postinstall條目。)

不過請注意,無論這和ExecAsOriginalUser功能等不保證他們運行非升高 - 如果安裝程序最初是從提升上下文(例如,升高的命令提示,另一個升高的安裝程序,或用戶右鍵單擊運行管理員),則「原始用戶」也升高的用戶運行。但在這些情況下,您可以假設用戶正在得到他們要求的內容。