2010-01-28 56 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文件副本。这有点痛苦,但我很肯定这会起作用。