我想将我的相关文件放在app目录中。
我似乎记得您可以强制VB6仅使用本地目录中的文件。
任何提示?
答案 0 :(得分:12)
您可能还想尝试为项目设置Reg-Free COM。有一个名为Make My Manifest的免费软件将为您完成大部分工作
编辑 MMM网站已关闭。我看到here作者在托管时遇到了问题,并提供了另一个获取Make Make Manifest的位置 - download it here。
答案 1 :(得分:6)
Clay Nichol关于搜索顺序的答案并不完全正确。该搜索顺序仅适用于非COM组件。即只有一些DLL,而不是OCX。如果您注册COM对象,它们将从注册目录中使用,无论本地目录中有什么,除非您使用无注册COM或.local文件。
编辑:
MakeMyManifest被广泛称为用于为VB6项目创建清单的自动工具,我自己没有尝试过。 DirectCOM也有粉丝,我还没试过。
编辑 MMM网站已关闭。我看到here作者在托管时遇到了问题,并提供了另一个获取Make Make Manifest的位置 - download it here。
有一种半自动技术可以生成无reg的COM清单。您可以使用Visual Studio 2008创建清单(您可以使用Visual Basic Express Edition之类的免费版本)。然后手动进行一些编辑,使清单适合VB6使用。有关分步说明,请参阅此MSDN文章的this section - 忽略本文中有关ClickOnce的其余部分。
答案 2 :(得分:6)
将组件库放置在EXE文件夹中(带或不带.local文件)也会对目标机器的卫生造成损害。
如果以前没有注册过,VB6程序会通过你背后的自我输入点在这里注册组件。然后,如果移动或移除应用程序,则会使用户的注册损坏 - 可能对使用某些相同组件的后续安装的应用程序造成致命影响。对于特定于应用程序的组件,这可能很好,即您自己的DLL或OCX,其他应用程序永远不会。
.local技巧实际上并不适用于VB6程序,如果使用它,安装程序需要知道并正确安装和注册组件(如果它们尚未在机器上)。它可以作为手动破解来解决单个机器上的DLL版本兼容性问题,而不是部署策略。
升级到SxS应用程序和程序集清单(Reg-Free COM等)以获得更好的解决方案。 DLL / COM重定向(.local)是一个很好的尝试,但它有很多瑕疵。
答案 3 :(得分:5)
自己找到它:
Windows首先会在App Directory中查找: 如果启用了SafeDllSearchMode,则搜索顺序如下:
如果禁用SafeDllSearchMode,搜索顺序如下:
1。加载应用程序的目录。 2.当前目录。 3.系统目录。使用GetSystemDirectory函数获取此目录的路径。 4. 16位系统目录。没有函数可以获取此目录的路径,但会搜索它。 5. Windows目录。使用GetWindowsDirectory函数获取此目录的路径。 6. PATH环境变量中列出的目录。请注意,这不包括App Paths注册表项指定的每个应用程序路径。计算DLL搜索路径时不使用App Paths键。
根据:http://msdn.microsoft.com/en-us/library/ms682586.aspx
但是你可以使用Manifest重定向它寻找的地方.dll:
http://msdn.microsoft.com/en-us/library/aa375365(VS.85).aspx
答案 4 :(得分:5)
它可能有点令人困惑,因为每个版本的Windows,规则都会发生变化。旧版本的Windows搜索当前目录之前的路径。
没有清单的简单解决方案:
如果您的可执行文件是A.EXE
,请在名为A.EXE.local
的同一目录中添加(0字节,空)文件 - 对于旧版本的Windows,这会将应用程序目录放在路径之前在搜索顺序中。