Dll与同名的windows Dll混淆,导致WiX安装程序中的“正在使用文件”对话框

Dll与同名的windows Dll混淆,导致WiX安装程序中的“正在使用文件”对话框,dll,wix,windows-installer,wix3.8,file-in-use,Dll,Wix,Windows Installer,Wix3.8,File In Use,通过设置以下属性,我使用wix进行了几次设置,以抑制所有“正在使用的文件”和“请立即/稍后重新启动应用程序/计算机”对话框: <Property Id="REINSTALLMODE" Value="amus" /> <Property Id="MSIRESTARTMANAGERCONTROL" Value="Disable" /> <Property Id="REBOOT" Value="Suppress" /> 但有一款产品附带了一个名为“

通过设置以下属性,我使用wix进行了几次设置,以抑制所有“正在使用的文件”和“请立即/稍后重新启动应用程序/计算机”对话框:

  <Property Id="REINSTALLMODE" Value="amus" />
  <Property Id="MSIRESTARTMANAGERCONTROL" Value="Disable" />
  <Property Id="REBOOT" Value="Suppress" />

但有一款产品附带了一个名为“KernelBase.dll”的dll,在卸载时仍会提示“正在使用的文件”对话框,其中列出了一些奇怪的标准windows应用程序,如cmd、paint、notepad等等。。。 我可以按“忽略”或“重试”继续。卸载成功,没有留下任何文件

问题似乎是C:\ProgramFiles(x86)\ProductName\中的KernelBase.dllC:\Windows\SysWOW64\de\中的KernelBase.dll.mui相混淆。 重命名dll后,“正在使用的文件”对话框不再显示

我不敢相信DLL是以它们的名字来引用的。我对dll注册不太了解,但完整路径似乎是dll的常见UID,那么Windows Installer指的是哪个糟糕的列表? 人们不知道任何windows dll的名称,所以我想如果有任何冲突,应该有什么东西阻止我构建(或至少使用)这样的dll

所以我的问题是:Windows Installer在这里做什么?我能做些什么来取悦它,这样它就不会混淆这两个DLL了。重命名我们自己的dll应该是紧急解决方案

MSI版本:5.0(.7601.17807)

操作系统:Windows 7 Professional 64位


提前感谢。

KernelBase.dll是在System32/SysWow64文件夹中找到的一个众所周知的Windows dll。将DLL重命名为与O/S系统文件不冲突。如果你不这样做,坏事(DLL地狱)很可能接踵而至

我模模糊糊地记得这是Windows Installer中的一个bug,但我没有尝试查找它。您使用的MSI引擎的版本是什么?操作系统版本


Christopher是对的-您应该更改Dll的名称

有一天,在喝啤酒的时候问我,1996年的时候,我们的应用程序的“security.dll”和Windows 3.1的“security.dll”之间发生了冲突或者,当我们的应用程序目录中的.bmp与系统目录中的.bmp之间以相同的名称发生冲突时,因为有人决定为我们的.bmp制作更高级的版本/更高的分辨率,并将其用作墙纸。两者都没有好的结局,都教会了我今天必须遵守的教训。