当前位置:  开发笔记 > 后端 > 正文

你如何强制VB6使用app目录中的DLL和OCX?

如何解决《你如何强制VB6使用app目录中的DLL和OCX?》经验,为你挑选了5个好方法。

我想将我的依赖文件放在app目录中.

我似乎记得你可以强制VB6只使用本地目录中的文件.

任何提示?



1> rpetrich..:

您可能还想尝试为您的项目设置Reg-Free COM.有一个名为Make My Manifest的免费软件将为您完成大部分工作

编辑 MMM网站已关闭.我在这里看到作者在托管方面遇到了麻烦,并提供了另一个位置来获取Make My Manifest - 在此处下载.



2> MarkJ..:

Clay Nichol关于搜索顺序的答案并不完全正确.该搜索顺序仅适用于非COM组件.即只有一些DLL,而不是OCX.如果注册COM对象,除非使用无注册COM或.local文件,否则将从注册目录中使用它们,而不管本地目录中的内容是什么.

编辑:

MakeMyManifest是一个自动工具,用于为VB6项目创建清单,我自己没有尝试过. DirectCOM也有粉丝,我还没试过.

编辑 MMM网站已关闭.我在这里看到作者在托管方面遇到了麻烦,并提供了另一个位置来获取Make My Manifest - 在此处下载.

有一种半自动技术可以生成无reg的COM清单.您可以使用Visual Studio 2008创建清单(您可以使用Visual Basic Express Edition之类的免费版本).然后手动进行一些编辑,使清单适合VB6使用.有关逐步说明,请参阅本 MSDN文章的此部分 - 忽略本文的其余部分,即ClickOnce.



3> 小智..:

将组件库放置在EXE文件夹中(带或不带.local文件)也可能对目标机器的卫生有害.

如果以前没有注册,VB6程序将通过背后的自我入口点在这里注册组件.然后,如果移动或移除应用程序,则会使用户的注册损坏 - 可能对使用某些相同组件的后续安装的应用程序造成致命影响.对于特定于应用程序的组件,即您自己的DLL或OCX,这可能是其他应用程序永远不需要的.

.local技巧实际上并不适用于VB6程序,如果使用它,安装程序需要注意并正确安装和注册组件(如果它们尚未在机器上).它意味着手动破解以解决单个机器上的DLL版本兼容性问题,而不是部署策略.

升级到SxS应用程序和程序集清单(Reg-Free COM等)以获得更好的解决方案.DLL/COM重定向(.local)是一个很好的尝试,但它有很多瑕疵.



4> Clay Nichols..:

自己找到了:

Windows确实首先在App Directory中查找:如果启用了SafeDllSearchMode,则搜索顺序如下:

    加载应用程序的目录.

    系统目录.使用GetSystemDirectory函数获取此目录的路径.

    16位系统目录.没有函数可以获取此目录的路径,但会搜索它.

    Windows目录.使用GetWindowsDirectory函数获取此目录的路径.

    当前目录.

    PATH环境变量中列出的目录.请注意,这不包括App Paths注册表项指定的每个应用程序路径.计算DLL搜索路径时不使用App Paths键.

如果禁用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

但你可以重定向它寻找的地方.dll使用Manifest:

http://msdn.microsoft.com/en-us/library/aa375365(VS.85).aspx



5> Joel Spolsky..:

它可能有点混乱,因为每个版本的Windows,规则都会改变.旧版本的Windows搜索当前目录之前的路径.

没有清单的简单解决方案:

如果您的可执行文件是A.EXE,则在名为的同一目录中添加(0字节,空)文件A.EXE.local- 对于旧版本的Windows,这会将应用程序目录放在搜索顺序中的路径之前.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有