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

时间:2021-07-30 23:16:39
我用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的,所以提示没有.