2010-01-28 62 views
0

當試圖在添加刪除我們的應用程序/刪除程序,下面的錯誤彈出,並且應用程序,無法卸載:卸載錯誤,如果原來的安裝DVD不在驅動

錯誤

「 mFileBagIDE.dll'不是有效的短文件名。

奇怪的是,如果原始安裝DVD不在驅動器中,您只會收到此錯誤。如果DVD在驅動器中,則卸載完美。

這裏是真正的踢球者:我們沒有抓住這個錯誤,直到經過我們的應用程序已經被廣泛使用,我們的客戶的情況是這樣的,它很可能許多人不再有原來的DVD。這意味着,在未來版本的安裝程序(做一個Windows安裝程序重大升級)將失敗,因爲它無法先刪除以前的版本。

所以,我的問題是雙重的:

  • 我們做了什麼來創建這個問題,所以我們能避免它在未來的版本?
  • 有沒有辦法告訴我們的下一個Windows安裝程序忽略此錯誤並繼續前進,刪除以前的版本?

我們當前的安裝程序(導致問題的安裝程序)是使用InstallAware生成的。我們可能會轉向WiX。但任何平臺(InstallAware,WiX,原始MSI表)的解決方案,我們感謝!

更新:我有兩個在我的MSI的InstallExecuteSequenceInstallUISequence表,這很可能是相關的下一行,但我不知道是什麼SRCDIREX屬性,或者它被設置。

| Action  | Condition | 
|---------------|--------------| 
| ResolveSource | NOT SRCDIREX | 

回答

2

引用原始MSI的操作(標準或自定義)中的一種可能不是僅在安裝時運行(例如,ResolveSource應該被限制爲「未安裝」)。您可以通過修改相關操作條件的修補程序(MSP文件)來解決此問題。

+0

我想這可能是它!我在InstallExecuteSequence和InstallUISequence中都有一個ResolveSource操作。兩者的條件是「不SRCDIREX」。我對這個房產是一片空白。如何檢查該財產的價值在哪裏設置? – 2010-01-28 16:09:23

+0

你可以用orca打開MSI並搜索SRCDIREX,也許你可以找到一些東西。 – 2010-01-28 16:14:35

+0

是的,我試過了,除了ResolveSource操作中的兩個沒有匹配。還有其他地方可能嗎? – 2010-01-28 16:17:50

-1

您是否嘗試將這些文件複製到%WinDir%/ system32文件夾?

編輯:做一個安裝程序將所有的安裝MSI包複製到軟盤上,並從盤驅動安裝。 刪除uneeded到卸載每一個文件。 Adobe,惠普和許多其他公司正在這樣做。

+0

我還沒有。你的意思是在嘗試卸載之前,將一些文件複製到system32文件夾中?或者作爲新安裝的一部分?我不熟悉Windows安裝程序,但這是一個典型的最佳做法?用system32文件夾手動進行混音對我來說聽起來有點嚴厲。 :) – 2010-01-28 15:29:16

+0

不,這不行。 MSI正在特定位置查找文件,並且不會搜索路徑樹來查找它。 – ewall 2010-01-28 16:20:31

+0

我編輯了答案,我希望它有幫助:) – CuSS 2010-01-28 17:06:35

0

我會通過確定哪些行爲導致錯誤開始。下面是我會怎麼做:

  • 從DVD
  • 複製MSI文件一些本地文件夾將應用程序安裝,讓我們說「C:\ TEMP」
  • 取出DVD
  • 開球卸載如下:「msiexec /x yourapp.msi /L*v c:\temp\uninst.log

當出現錯誤時,卸載將被有效暫停。然後,您可以檢查日誌的結尾,以確切查看序列中的位置。這應該有助於您進行調試。

如果答案確實是ResolveSource,則定期修補可能不是一個選項。 希思·斯圖爾特提到了這個在他的博客 - http://blogs.msdn.com/heaths/archive/2007/10/25/resolvesource-requires-source.aspx

「一般情況下,不要安排ResolveSource如果運行安裝補丁時,例如,用戶必須插入原始媒體是否原本需要。是否。「

如果這是您所處的位置,您可以創建一個轉換,以更新ResolveSource操作的條件,並將其手動應用到緩存的msi文件副本。這有點痛苦,但我很肯定這會起作用。