2013-08-16 140 views
0

我想建立一個MSI,將升級安裝的MySQL。RemoveExistingProducts之前和之後CustomActions

我可以執行文件的基本升級,並在乾淨的安裝一​​切工作正常,我遇到的問題是,執行升級時,我需要執行一些操作周圍的卸載以前的版本。

我遇到的麻煩的唯一操作是使用下面的命令行

mysql.exe -u root --host=127.0.0.1 --port=5002 mysql --execute="SET GLOBAL innodb_fast_shutdown=0" 

我這樣做MySQL的全局設置之一的變化,因爲它建議升級數據庫InnoDB的時候應該執行慢關機,這是我能看到的最簡單的方法。

目前我使用下面的維克斯執行此操作

  <CustomAction Id="Innodb_slowshutdown" Property="OLDMYSQLEXE" Execute="immediate" 
       ExeCommand="&quot;[MYSQLINSTALLBINPATH]mysql.exe&quot; -u root --host=127.0.0.1 --port=5002 mysql --execute=&quot;SET GLOBAL innodb_fast_shutdown=0&quot;" 
       Return="check" Impersonate="yes"/> 

    ... 

       <Custom Action="Innodb_slowshutdown" After="InstallInitialize">UPGRADEFOUND and NOT UPGRADINGPRODUCTCODE and NOT REINSTALL and MYSQLINSTALLBINPATH</Custom> 
       <RemoveExistingProducts After="Innodb_slowshutdown" /> 

然而,這總是失敗,我不明白爲什麼當故障發生時,我確切的命令行從MSIEXEC日誌複製,並通過運行命令行。

這和我所期望的完全一樣,但我無法弄清楚自定義操作在做什麼不同。

在安裝過程中,控制檯會短暫打開,似乎MySQL可執行文件運行但是有些參數有問題,並且會導致大量幫助信息出現,儘管我無法確定這是怎麼回事它通過非常快。

有什麼辦法暫停安裝在這個時候,所以我可以看到控制檯中有什麼?

任何人都可以看到我的WIX的任何明顯的問題?

編輯 -

而且我不知道這有什麼用的用戶權限,我運行MSIEXEC從命令提示符打開「系統管理員」,但如果我確實需要提升權限我怎麼能這樣做這是什麼時候我需要執行類型立即行動?

請注意我知道立即不允許提升的權利,但我不能使用延期,因爲它不會允許我在RemoveExistingProducts之前執行命令。

我甚至不確定這與權利有什麼關係,我只是指出我認爲這是一個可能的原因,但我無法證明這一點。

回答

0

好的我發現我的錯誤,這是因爲不知道Type 50 CaustomAction是如何工作的。

我所要做的就是使用含有我想執行,並在ExecuteCmd財產

<CustomAction Id="Innodb_slowshutdown" Property="OLDMYSQLEXE" Execute="immediate" 
     ExeCommand="-u root --host=127.0.0.1 --port=5002 mysql --execute=&quot;SET GLOBAL innodb_fast_shutdown=0&quot;" 
     Return="check" Impersonate="yes"/> 
1

Windows安裝程序不支持使用提升的權限運行的即時自定義操作。要使用提升的權限執行自定義操作,它必須標記爲Deferred="yes"Impersonate="no"

+0

是我所知道的只使用命令行參數的可執行文件的完整路徑的屬性,這這就是爲什麼我以管理員身份運行MSIEXEC的觀點。正如我所說,我甚至不確定這是否與權利有關。你是否可以解釋這是我的問題的一個可能的原因?你能回答我的任何問題嗎? – Kezza

+0

另一個說明我不能執行這個動作,因爲我必須在RemoveExistingProducts之前執行它,並且如果我嘗試這樣做,它會在創建msi時引發錯誤。 – Kezza