簡體   English   中英

通過WIX生成的MSI在卸載時不會刪除應用程序根文件夾

[英]MSI generated through WIX does not delete application root folder on uninstall

我無法讓MSI刪除我的根應用程序文件夾。 除根文件夾外,所有文件在卸載時均已正確刪除。 MSI由WIX Toolset生成。 奇怪的是,這僅發生在我們的構建服務器發出的MSI上。 在我的本地計算機上生成的MSI可以正常工作,並且可以正確清理應用程序文件夾。 我以詳細模式運行了卸載,但是找不到任何令人震驚的東西。

過去,甚至我的本地計算機MSI都不起作用。 但是我在.wixproj中添加了KeepEmptyDirectories =“ true” GenerateGuidsNow =“ true”-如果這是有用的信息。 如何解決此問題? 我應該尋找什么可能的危險信號?

我會做幾件事:

  1. 對組件規則及其含義有深入的了解。 (當您破壞它們時出了什么問題。)

  2. 檢查卸載日志文件,以獲取有關Windows Installer為什么選擇不刪除文件夾的線索。

  3. 在干凈的機器上測試。 (VM快照是最簡單的。)

盡管有些人會很幸運,但我不建議使用任何形式的動態wxs代碼生成,但動態ProductCode除外以支持主要升級。 這包括從組件的動態向導到組件收集(也稱為動態文件鏈接)的所有內容。 這些往往最終會破壞組件規則,並產生副作用,包括您在此處看到的內容。

就是說,我知道手工編寫WiX XML的痛苦,並且我在CodePlex上有一個名為IsWiX的開源項目。 它由項目模板(腳手架)和圖形設計器組成,可以極大地幫助創作和維護WiX項目。 然后,您可以根據需要手動編輯XML,以聲明IsWiX尚未處理的內容。

聽起來文件夾本身有鎖。 您是否正在運行要在卸載過程中停止的任何服務? 您是否正在運行任何自定義操作,將其作為操作的一部分從根文件夾加載文件? 您是否在根目錄ACL上設置了任何自定義權限? 根文件夾是IIS文件夾嗎? 您是否在卸載后嘗試重新啟動以查看文件夾是否仍然存在?

顯而易見的第一步是要確保服務在卸載之前被刪除之前正確停止。 在不同的盒子上,此行為可能有所不同(但聽起來您在同一個盒子上進行測試)。 看到這個線程: http : //forum.installsite.net/index.php?showtopic=16458

接下來, 嘗試一些版本比較的MSI文件本身和安裝他們提供/文件夾,以驗證這可能是不同的(如果有的話)。

嘗試在兩個不同的MSI文件上使用Wix工具包中的 dark.exe 這會將它們解碼為Wix XML,然后使用比較工具(例如Beyond Compare或類似的磁盤差異工具)來確定它們之間是否存在任何重大差異。

來自http://www.scootersoftware.com/的 Beyond Compare –是一個出色的工具(顯然沒有從屬關系)。 我一直在使用它,它的用處是立即的,並且所有使用文件的專業人員每天都會從中受益。 試試吧 看截圖

另外,在已安裝的文件夾上運行文件差異以查看是否存在明顯差異。 要特別注意配置文件,並進行完整的二進制級別差異(不僅僅是CRC /哈希)。

HKCUHKLM 導出注冊表配置單元 (僅針對您的應用程序,而不是整個注冊表),並在狀態之前和之后進行比較(4個導出)。

至於機器之間的差異-聽起來您正在使用測試虛擬機,但是我只想補充一點,即使其他條件相同,盒子上Visual Studio的存在也會影響事物。 除此之外,硬件,網絡和防火牆配置聽起來都一樣,並且您正在測試盒上進行測試。

您是否嘗試過使用依賴行者 我從未將其用於服務,但概要分析選項對於檢查常規應用程序( 方法 )非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM