2015-04-02 23 views
0

因此,我有一個WIX項目,可以安裝全新安裝,也可以安裝以前的產品安裝。本產品(如果已安裝)有3個不同文件夾中的多個文件需要保留。該項目還需要將這3個不同文件夾的內容複製到另一組文件夾中(兩個不同位置的內容相同)。爲了做到這一點,我已經建立了我的項目,首先嚐試寫入原始文件夾,如果文件不存在,然後複製這些文件夾的內容。在這些文件已經存在的升級中,這可以正常工作。在全新安裝中,第二組文件夾不會被創建,但所有文件都可以。WIX:在新安裝時沒有複製文件

我的假設,我可能不正確,是msi試圖在文件夾甚至創建之前複製文件夾。這會導致文件夾不存在於它們應該被複制的區域,因爲沒有任何可複製的地方。有沒有一種方法可以確保在嘗試複製文件之前生成文件?有沒有更好的方法去解決這個問題,我沒有看到?

編輯:

我將盡力澄清這一點。我想要做的是以下(僞):

1)看看選項文件(hi.opt)是否存在於c:\ options中,如果沒有創建它。 2)將該文件複製到c:\ options \ opt2015。

我爲3個不同的文件夾做了3次。我使用NeverOverwrite參數在c:\ options文件夾中使用Wix創建初始文件。這部分工作很棒;文件創建時沒有問題,如果它們已經存在,則不會覆蓋它們。問題出在哪裏,是我使用CopyFile Wix命令的第二步。這隻會將一些文件從c:\ options文件夾複製到c:\ options \ opt2015文件夾中。根據系統的初始設置(如果c:\ options中的文件存在或不存在),某些文件將被複制,而其他文件則不會複製。這不是隨機的,結果每次都是可重複的,但似乎沒有理由爲什麼某些文件複製,而其他文件不依賴於系統的初始設置。

我希望這是有道理的,並且有點更清楚,但我認爲這會讓事情變得更糟!這是奇怪的行爲,因爲對我來說,它看起來像一切都應該工作,但它不(但並不是每個錯誤)。

EDIT2:

後更多的工作,創造其運行完全維克斯的超出了我和我的團隊已經確定,這些文件就是不被維克斯即使他們確實存在在安裝過程中出現了VB腳本。我們沒有發現任何權限問題,並且安裝以管理員身份在管理員帳戶中運行。通過VBS或通過Wix CopyFile命令執行復制,結果相同;系統中已存在的文件不會被複制。還有什麼想法?如果我們找到解決方案,我一定會發布它,因爲這太奇怪了。

+0

我現在發現如果文件存在,它有時無法工作。我將嘗試使用自定義操作。 – 2015-04-03 17:05:31

回答

1

我相信只要您嘗試在InstallFiles操作運行後複製文件,您的安裝程序設計就應該可以工作。

  • 運行執行InstallFiles後
  • 遞延自定義操作使用MoveFiles行動
:你應該通過執行下列操作之一來複制從第一組文件夾複製到第二組的文件夾中的文件
+0

我一直在使用以下內容: 2015-04-03 17:04:04

+0

當您查看完成的MSI的InstallExecuteSequence表時,以下順序是什麼操作:RemoveExistingProducts,InstallFiles,MoveFiles? – jbudreau 2015-04-03 17:08:46

+0

刪除現有的產品是1401,InstallFiles是4000,MoveFiles 3800 – 2015-04-03 21:15:31

1

這是太長的評論,但可能不是答案....

沒有像「以前的產品安裝」這樣的事情,特別是如果最終在程序/功能中包含多個實例,並且可能包含或不包含相同組件id的文件可能會相互替換 - 那將是一團糟。如果您需要升級已安裝的產品,請使用主要升級,這似乎是您要使用此功能的位置。如果您已經在編寫自定義操作來完成這項「首次嘗試寫入原始文件夾」,那麼我不知道發生了什麼或在安裝過程中如何執行此操作。一般來說,如果您在新安裝中需要這些文件,請將它們添加到新的主要升級MSI中。如果您需要從舊產品中複製較舊的現有文件,請使用afterInstallExecute進行重大升級,並編寫自定義操作代碼以在InstallFiles操作之前複製它們。或者CopyFile WiX元素可以做到這一點,查看關於沒有fileid的組件下的元素部分。

http://wixtoolset.org/documentation/manual/v3/xsd/wix/copyfile.html

0

嗯,有時會發生,錯誤完全是在其他地方。事實證明,在同一時間安裝的程序鏈中的另一個程序的卸載程序正在銷燬該文件夾。不幸的是,這是產品10年未碰觸時發生的情況。感謝您的貢獻,他們非常有幫助。儘管我一直在錯誤的道路上走下去,但我仍然在測試中使用它們,並且更加堅定地檢查安裝順序。

相關問題