您的位置:首页 > 编程语言 > VB

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

2014-01-20 22:34 246 查看
我用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的,所以提示没有.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: