3

最近有人要求我对一个 VB6 应用程序进行一些维护。这涉及到一些文件 IO。我发现通过引用 windows 脚本主机和使用 FileSystemObject 提供的 IO 操作比 VB6 附带的 IO 操作友好得多。

但这是否会因为安全问题,或者因为脚本主机将在某些用户的计算机上被禁用而导致问题?

更新(2012 年 8 月 20 日):自从提出这个问题以来,我们在 3000 名客户中遇到了 3 次无法使用 scrrun.dll 的问题。我们必须通过远程支持手动修复这些问题。似乎有时病毒扫描程序是罪魁祸首。

4

3 回答 3

4

正如罗伯特哈维在他的评论中提到的,这在实践中通常不是问题。但是,scrrun.dll可能未安装或未在给定计算机上正确注册。在客户机器上安装我们自己的 VB6 应用程序时,我们遇到了这两种情况。

至于脚本被禁用,我们实际上已经在其他应用程序(例如 Microsoft InfoPath)中遇到了这个问题,并且通过将 InfoPath 表单(需要执行一些文件 I/O)调用到 VB6 来解决这个问题使用 WSH 的 DLL FileSystemObject,因此,如果有的话,您实际上可以通过将该库与 VB6 结合使用来解决脚本安全问题。据我所知,WSH 安全设置专门适用于实际脚本,而不适用于碰巧使用脚本运行时组件的程序。

事实上,您可以在您的机器上完全禁用 Windows Scipt HostFileSystemObject ,并且仍然可以从 VB6 应用程序访问 WSH 组件,例如。

于 2010-05-17T01:46:06.583 回答
3

由于从 Q/BASIC 继承,VB 中的文件 IO 总是有一些语法“奇怪”,但如果您坚持直接读/写(避免行输入/写/获取),它使用起来很简单。使用本机方法将比 FSO 更快,并避免任何依赖问题,无论它们多么罕见。

另一个考虑因素是,如果您想执行二进制文件 IO,则无论如何都必须使用本机方法,因为 FSO 仅是文本。

于 2010-05-17T11:46:58.893 回答
3

我偶尔会遇到FileSystemObject不工作的客户机器,大概是因为偏执的 IT 部门以某种方式禁用了它。我现在尽量避免FileSystemObject

您通常可以FileSystemObject用本机 VB6 代码或直接对 Windows API 的 API 调用替换。例如 Karl E Peterson 的优秀VB6 网站有一些完全用 VB6 编写的很棒的对象。

一些例子

于 2010-05-17T13:08:35.773 回答