2016-03-05 107 views
1

在linux中,我希望我的updater運行腳本文件進行回滾操作(實際上是將某些文件權限更改爲另一個用戶而不是根目錄)。所以,我能想到的可能途徑有:Install4j:運行用於回滾操作的批處理文件/腳本文件

  1. 使用行爲:「運行可執行文件或批處理文件」在執行回滾和運行腳本,因爲它使用的root權限。

  2. 在執行回滾操作時,運行已創建的腳本或調用的任何方法均爲InstallerEventListener,具有root權限的「運行可執行文件或批處理文件」。

  3. 使用回滾操作裏面的ProcessBuilder(我已經用於正常操作)

但形成install4j文件我找不到任何方法,可以幫助我做到這一點。我正在閱讀關於InstallerContext.runElevated的文檔,但它看起來並不是我正在尋找的東西。

UPDATE:

原來直接運行使用ProcessBuilder在最大提升權限(root)的「運行腳本」的動作腳本,使完成任務。但是我仍然有興趣知道事件監聽器是否有可能從中觸發一個動作。

+0

你爲什麼不能使用「運行可執行文件或批處理文件」操作及其「使用回滾可執行文件」屬性? –

+0

但是隻對特定的「運行可執行文件或批處理文件」操作有效嗎?對於我的情況,我設置了一個執行回滾函數的動作偵聽器,我通常爲任何動作定義回滾函數。我想在這裏實現的是以某種方式在回滾函數 – ShaDooW

回答

1

在事件偵聽器的代碼,你可以像這樣的編程方式運行操作:

import com.install4j.runtime.beans.actions.misc.*; 

RunExecutableAction action = new RunExecutableAction(); 
action.setExecutable(...); 
action.setWorkingDirectory(...); 
// other configuration 
action.execute(context); 

以最高權限執行它,執行這樣的操作:

context.runElevated(new RemoteCallable() { 
    @Override 
    public Serializable execute() { 
     return action.execute(context); 
    } 
}, true); 
+0

真棒運行腳本!它將以最大特權執行? – ShaDooW

+0

看我的編輯... –