2015-11-26 23 views
0

我正在使用Inno安裝程序創建安裝程序和更新程序。
我想更新不得不爲一個服務和一個正常的過程(取決於我是否運行安裝程序作爲管理員或不上)運行的能力。
我創建了我的應用程序,它具有作爲服務和正常進程運行的能力,所以我可以假設這在inno setup中也是可以實現的。
我可以創建一個類似服務和正常進程的安裝程序嗎?我可以將Inno Setup作爲服務和正常流程使用嗎?

+0

是什麼意思*「希望更新不得不作爲服務運行的能力。」 *?爲什麼你需要將它作爲服務運行?該服務會做什麼? –

回答

2

Inno安裝程序不可能運行作爲服務,因爲它不是服務應用程序。

可能有一個服務進程啓動一個Inno安裝程序從非用戶上下文到例如。自動升級。但是這樣做需要非常小心的關注。

例如,你必須:

  • 啓動與/VERYSILENT /SUPPRESSMSGBOXES /NORESTART安裝程序可以隱藏所有標準UI。

  • 使用AppMutex(在Global命名空間中使用相應的互斥鎖)確保安裝程序等待直到服務在啓動安裝程序後自行終止。

  • 確保啓動過程已經提升到管理員(注意,這是一個安全隱患,因爲它意味着服務正常運行期間使用管理員權限運行)。

  • 確保在啓動安裝程序之前,該服務使得非常可靠它正在運行合法的升級包而不是某些惡意軟件。強烈建議數字簽名驗證。

  • 確保腳本不使用MsgBox或以其他方式顯示UI。 (如果需要的交互式安裝使用SuppressibleMsgBox。)

TLDR:而你可以,你不應該。很難做到正確,打開安全漏洞非常容易。讓用戶自己下載並運行安裝程序。

+0

你可能想使用['CheckForMutexes'功能(http://www.jrsoftware.org/ishelp/index.php?topic=isxfunc_checkformutexes)(中環),以等待互斥體,而不是['AppMutex'指令](http://www.jrsoftware.org/ishelp/index.php?topic=setup_appmutex)。 'AppMutex'會中止安裝程序(靜默模式)。如果服務未在安裝程序進入互斥檢查之前退出(您幾乎不能保證),安裝程序將不會運行。 –

+0

我的目標是創建一個靜音自動更新程序。當沒有用戶登錄時,作爲服務運行的應用程序是否有可能自己調用​​更新程序?我知道,當沒有用戶登錄服務可以運行的,所以我認爲我還需要一個upater是一種服務,所以它可以在不登錄的任何用戶進行更新。 – yuval

+0

我還需要從高架源運行更新,因此UAC不會出現。如果我從服務調用更新程序,UAC是否會彈出? – yuval

相關問題