2015-07-10 2109 views
0

朋友們,我正在編寫一個腳本,它可以完成很多工作 - 安裝我的應用程序+其他開源軟件,將s/w設置爲服務,執行批處理文件做一些東西等Inno Setup:安裝完成後執行命令/批處理文件

  1. 我在開始設置一些環境變量。在Inno腳本執行完畢(即安裝結束)之前,它們當然不會生效。
  2. 安裝服務需要環境變量。
  3. 安裝,配置和啓動服務的命令在一個批處理文件中,我需要在安裝完成後執行。我只需要執行一次這個批處理文件。

安裝完成後,如何使用Inno執行此批處理文件?它可以在用戶完成安裝過程後立即運行,或者在系統重新啓動時運行一次。它可以通過Inno腳本實現嗎?

或者有沒有辦法讓我的環境變量生效,以便我的批處理文件可以運行?

我知道有安裝程序在用戶完成安裝過程並且系統重新啓動後執行部分安裝。 Inno是否支持這種功能?

我不知道CurStepChanged + ssPostInstall方法會在這裏工作,因爲它基本上與Inno開始的環境相同,而且我的變量尚未生效。

如果這不能通過Inno腳本實現,我會在系統啓動時放置批處理文件 - 在這種情況下,我需要檢查服務是否已安裝/正在運行並採取適當的措施。但那會很粗糙。

請幫助任何指針/建議。

謝謝。

+0

* ...他們當然不會生效,直到Inno腳本完成執行... *您可以使用SetEnvironmentVariable函數爲安裝過程設置它(從它創建的進程將繼承它)。 – TLama

回答

1

要安排一個批處理文件將在下次系統啓動/登錄時運行,值添加到HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce關鍵:

[Registry] 
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\RunOnce"; \ 
    ValueType: string; ValueName: "MyProg"; ValueData: """{app}\MyBatch.bat""" 

RunOnce鍵的值是由Windows自動,當程序/批處理刪除運行。

閱讀Run and RunOnce Registry Keys

默認情況下,運行命令行之前的RunOnce鍵的值將被刪除。您可以在RunOnce值名稱前加一個感嘆號(!),以推遲刪除該值,直到該命令運行。如果沒有感嘆號前綴,如果RunOnce操作失敗,則下次啓動計算機時將不會要求關聯的程序運行。

執行順序:

如果不止一個程序在任何特定的鍵註冊,在這些程序運行的順序是不確定的。

其實程序並行運行。有些條目很容易成爲運行到Windows會話結束的應用程序。所以Windows在啓動另一個程序之前不能等待程序結束。

如果您需要按照特定順序運行批處理文件,只需創建一個指向批處理文件的條目,該文件按您需要的順序運行其他批處理文件。

+0

謝謝馬丁。批處理文件在下次啓動後運行後,註冊表項會發生什麼變化?這會只運行一次嗎?我會試試這個。 –

+0

謝謝馬丁。這很有幫助。我只是想知道是否可以讓批處理文件按特定順序運行,還是按照鍵在註冊表中的順序執行? –

+0

謝謝Martin ... –