windows-server-2012-r2 - 可以创建 Scripting.FileSystemObject 64 位但不是 32 位

标签 windows-server-2012-r2 vb6

我的客户端在虚拟机中运行 Windows 2012 R2 64 位。我给了客户端一个用 VB6 编译的 32 位程序,它在这一行失败了:

Set Run.FileSys = CreateObject("Scripting.FileSystemObject")

其中 Run.FileSys 的类型为 Variant。多年来,该程序已在许多系统上运行,但在这种情况下它失败了
Run-time error '429':
ActiveX component can't create object

客户端运行时
regsvr32 scrrun.dll

在 SysWow64 文件夹中,它说它已成功注册。我指示她运行以下命令:
reg query "HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLSID"
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows Script Host\Settings\Enabled"
reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Script Host\Settings\Enabled"

它说 CLSID 值为 {0D43FE01-F093-11CF-8940-00A0C9054228},并且“已启用”键(可用于禁用脚本主机)不存在。

检查 SysWow64 文件夹中的文件 SCRRUN.DLL,其版本号为 5.8.9600.17415。

我可以访问 Windows 2012 R2 的另一个实例,并且我的程序在这台计算机上运行没有错误。我们比较了我的计算机和客户端计算机上 Dependency Walker 的输出。在两台计算机上,Dependency Walker 输出看起来相同,直到序列中的某个点。这是我的计算机输出的最后一部分:
Loaded "SXS.DLL" at address 0x681A0000 by thread 1.
Loaded "DWMAPI.DLL" at address 0x73E30000 by thread 1.
Loaded "CLBCATQ.DLL" at address 0x755D0000 by thread 1.
Loaded "SCRRUN.DLL" at address 0x67BB0000 by thread 1.
Loaded "VERSION.DLL" at address 0x74910000 by thread 1.

以下是出现故障的客户端计算机的同一部分:
Loaded "SXS.DLL" at address 0x72B70000 by thread 1.
Loaded "DWMAPI.DLL" at address 0x724F0000 by thread 1.
Loaded "CLBCATQ.DLL" at address 0x74DE0000 by thread 1.
Loaded "CRYPTSP.DLL" at address 0x747E0000 by thread 1.
Loaded "RSAENH.DLL" at address 0x74710000 by thread 1.
Loaded "BCRYPT.DLL" at address 0x747C0000 by thread 1.
Thread 2 started in "NTDLL.DLL" at address 0x77324A00.
Thread 3 started in "NTDLL.DLL" at address 0x77324A00.
Thread 4 started in "COMBASE.DLL" at address 0x74C8D7E0.
First chance exception 0xC000008F (Float Inexact Result) occurred in "KERNELBASE.DLL" at address 0x75BC4598 by thread 1.
First chance exception 0xC000008F (Float Inexact Result) occurred in "KERNELBASE.DLL" at address 0x75BC4598 by thread 1.
Thread 2 exited with code 0 (0x0).
Thread 3 exited with code 0 (0x0).
Thread 1 exited with code 0 (0x0).
Exited "VB6SCRIPTINGTEST.EXE" (process 0x94) with code 0 (0x0) by thread 4.

因此,虽然程序应该加载 SCRRUN.DLL,但它会加载 CRYPTSP.DLL 和其他。客户说未打开驱动器加密。我没有真正受过教育的猜测是,这是病毒保护将自身插入进程的结果。客户端运行 MacAfee Virus Scan Enterprise 8.8,无权将其关闭。

客户刚刚做了一个测试,让我怀疑这个关于病毒扫描程序的假设。她创建了自己的 VBScript、VB6 程序和 VB.Net 程序,这些程序创建了 Scripting.FileSystemObject。结果是:
  • VBScript:成功(我想这一定是 64 位的?)
  • VB6(32 位):失败
  • VB.Net,32 位:失败
  • VB.Net,64 位:成功

  • 因此,似乎没有任何东西阻止 SCRRUN.DLL 的 64 位版本,但 32 位版本不起作用。我想告诉客户端重新安装 Windows Scripting Host,但我不知道如何完成或者是否可能。有谁知道我该如何解决这个问题?

    最佳答案

    我有一个类似的问题(我认为)。我有一个 VB6 程序,它在 32 位 Windows 7 上运行得很好。当我移动到 64 位(在 Windows 7 和 Windows 8 上)时,程序会失败。我使用的是打印的 32 位 DLL。经过多次搜索,我发现 Microsoft 已意识到此问题并表示不会修复。 32 位 DLL 似乎可以工作,直到您访问某些类型的硬件。

    关于windows-server-2012-r2 - 可以创建 Scripting.FileSystemObject 64 位但不是 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30814226/

    相关文章:

    c# - 在 Visual Studio 中添加 VB6 引用会得到 "Type library importer encountered an error during type verification"

    VB6 构建后崩溃

    vb6 - 编译VB 6程序时如何修复 "Unexpected error (32801)"?

    iis - IIS 8.5 的 DynamicCompressionModule 问题

    powershell - 使用 PowerShell Write-Output 创建后损坏的 Cmd 脚本

    python - 使用ctypes导入dll函数

    vb6 - Textwidth 无法以毫米为单位正确显示 vb6

    authentication - 使用 OAuth 和持久刷新 token 的 ADFS 3.0

    amazon-web-services - AWS EC2 实例自发关闭

    powershell - 无法删除项目。该目录不为空