我在一个安装程序项目中有一个组件(用一个旧的Installshield版本创建)。
在MSI中创建的类表条目是正确的。但是,当安装程序运行时,注册表中的条目(LocalServer32)是用一个短的8.3名创建的。
如何使注册表中的条目使用完整的32位长文件名生成?
其背后的问题是:
我的组件试图用文件名定位本地化的DLL。但是,当使用8.3文件名启动组件时,GetModuleFilenameis还以8.3格式返回了它的外国名。因此,当它只是将DEU附加到名称并将扩展名更改为DLL以定位本地化DLL时,有时会失败。我不能修改这个组件。(即CompenentName.exe试图找到CompenentNameDEU.dll)
当我手动注册组件(ComponentName.exe -register)时,条目是用完整的长文件名生成的,一切都很完美。
发布于 2014-07-31 15:07:58
解决问题的一种方法是使用GetLongPathName() API将路径转换为文件名的长版本。
无论参数是缩短的8.3路径还是已经很长的路径,这都应该有效。
发布于 2014-07-29 19:16:47
查看创建的其他注册表项。我怀疑您会发现类似于LocalServer32数据项(而不是键)的东西,其中包含明显的垃圾。如果是这样的话,所发生的情况就是8.3的名称不用于定位COM服务器。该“垃圾”包含ProductCode和组件guid的编码,这些编码与MSI一起用于定位目标文件,必要时调用修复。
因此,如果这是您所看到的,那么简单的回答是“不要使用Class表”,因为它创建了一个MSI链接来查找目标,而不是文件路径。
https://stackoverflow.com/questions/24999942
复制相似问题