2010-10-07 73 views
1

我已經創建了基於文章WiX 3 Tutorial: Understanding main WXS and WXI file的WiX安裝項目,主要是因爲它提供了執行應用程序關閉所需的WiX。WiX CloseApplication for exe和dll

但是,我對結果感到困惑。這裏的情況:

我們有一個可執行文件使用DLL並創建安裝可執行文件和DLL的設置。我們執行設置。

CASE 1:接下來,我們更改可執行文件,而不是dll,然後再次創建安裝程序。然後我們開始安裝的應用程序,並確保也加載了dll。如果我們現在執行第二個設置,將顯示一個對話框,要求用戶按照我們的預期關閉可執行文件。

CASE 2:但是如果在應用程序運行和加載DLL我們不改變應用程序,但只有DLL,然後執行安裝,沒有顯示對話框。在安裝結束時會出現一個對話框,詢問我們是否要重新啓動計算機。

這是預期的行爲,以及如何才能強制CASE 1的應用程序關機對話框也是當只有一個DLL改變如CASE 2?我不希望用戶必須重新啓動計算機,因爲應用程序在無法重新啓動的服務器上運行。

回答

0

這一切都由成本計算過程中的Windows安裝程序確定。安裝程序決定需要安裝/更新哪些文件,並計算需要多少磁盤空間以及是否有文件鎖定。如果存在文件鎖定,它會嘗試使用窗口句柄將鎖定解析爲進程。如果它可以做到這一點,你會得到對話框。如果不行,你不會。這並不意味着不需要重新啓動,它不能爲您提供有關如何避免的有用信息。

幾個附加分:

確保您版本的EXE和DLL。如果舊的DLL是1.0.0.0,並且新的DLL是1.0.0.0,則成本計算將會顯示「這裏沒有任何事情要做」。

EXE如何在運行時使用DLL?在整個過程中,它可能根本就沒有鎖定它。

記者瞭解到,微星的重新啓動操作可以通過使用諸如REBOOT性質的改變= REALLYSUPPRESS

這裏的一些好文章閱讀:

InstallValidate FileInUseDialog System Reboots

0

我沒有檢查了代碼,但我認爲正在發生的事情是CloseApplication操作未運行,因爲它發現該exe文件沒有更改。據我所知,你不能使用CloseApplication來定位DLL。如果您使用日誌記錄運行安裝,則應該能夠查看是否觸發了該操作。我假設你在安裝的最後階段安裝了RemoveExistingProducts,如果你在InstallValidate之後移動它,它會每次刪除exe,並因此觸發該操作。