win7(64位)下的某些文件,用VB6开发的程序无法判断是否存在

探讨了使用VB6开发的程序在Win7 64位系统中无法正确检测system32目录下文件存在的问题,揭示了32位程序访问限制及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我用VB6开发的程序,想在WIN7(64位)上运行,其中有个功能是查找WIN7(64位)系统目录下的某个文件是否存在。
结果发现,那个文件确实存在,但程序就是提示找不到文件,同样的程序在XP下运行没有问题。
假如WIN7的系统目录是 C:\Windows\system32,这里面一定有desktop.ini与kernel32.dll这2个文件,
我用如下VB代码判断这2个文件是否存在

Private Sub Command1_Click()
Dim fs As New FileSystemObject
If fs.FileExists("c:\windows\system32\kernel32.dll") Then
MsgBox "kernel32.dll文件存在"
Else
MsgBox "文件不存在"
End If

End Sub
Private Sub Command2_Click()
Dim fs As New FileSystemObject
If fs.FileExists("c:\windows\system32\desktop.ini") Then
MsgBox "文件存在"
Else
MsgBox "desktop.ini文件不存在"
End If
End Sub

结果提示desktop.ini不存在,kernel32.dll存在
我也选了以兼容模式运行这个VB程序,也选了以管理员身份运行。
如果我把那个desktop.ini文件放在其它地方,例如 D:\Test下,再判断是否存在,就能准确判断出是否存在。
我怀疑是WIN7的安全问题,控制了一些程序不让访问系统目录下的某些文件。不知道如何解决。
有人说desktop.ini 是隐藏的,但若你在system32下建立一个非隐藏的文件,再用vb的函数判断那个文件是否存在,也是找不到那个文件的.

这个问题我问了好几天,没有满意的答复,不过今天似乎有个答复不错,好象解决了我的问题.
答复如下:
32位应用程序在64位系统中是没有权限访问Environ$("SystemRoot%") & "\System32"的,64位系统只运行64位应用程序访问System32,对于32位程序考虑兼容性会强制转换到SysWOW64中。
所以你的desktop.ini这个文件要放到SysWOW64中,然后判断Environ$("SystemRoot%") & "System32\desktop.ini"。
-----------------------------
回到最上面我的2个判断文件存在的代码,之所以提示kernel32.dll这个文件存在,是因为SysWOW64里面有kernel32.dll这个文件,而syswow64里面是没有desktop.ini的,所以提示没有.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值