2016-10-01 352 views
0

在问题之前,对不起我的英语,不是我的母语。即使文件不存在,File.Exists也会返回true

我认为标题说明了自己,我想知道用户PC是否在system32文件夹中有dll,但即使我将.dll移动到桌面(用于测试目的),File.Exists也会返回True。

我正在使用的代码:

Imports System.IO 
Public sys32Path As String = "C:\Windows\System32\" 

If File.Exists(sys32Path + "d3dx9_42.dll") = True Then 
       ListBox1.Refresh() 
       ListBox1.Items.Add(sys32Path + "d3dx9_42.dll | Found !") 
       fstDLL = True 

ElseIf File.Exists(sys32Path + "d3dx9_42.dll") = False Then 
       ListBox1.Refresh() 
       ListBox1.Items.Add("d3dx9_42.dll | Missing !") 
       fstDLL = False 
End If 
+0

除了这个问题,并不重要,你不需要把'= True'或'= False','File.Exists'已经返回True或False,所以你应该没有为True测试做任何事情,并且使用'Not'来进行False测试。更多,你根本不需要'ElseIf'部分,并且可以使用'Else',因为如果Exists不是True,它只能是False。 – Sehnsucht

+0

@Sehnsucht是的,因为ElseIf是一个习惯,当我重新阅读时,我改变了这个(已经改变了,btw) 关于= True的事情是,没有它,我遇到了问题,返回的值是 – SokomoKud

回答

0

请记住,如果你运行在64位系统上的32位应用程序,然后file system redirection导致C:\Windows\System32被重定向到C:\Windows\SysWOW64这是“System32下“32位应用程序的文件夹。

如果您要访问的实际System32文件夹中,那么你既可以:

+0

是的,我只是想了几分钟前,但感谢您的选项来纠正,我只是做代码来检查这两个文件夹,但这个系统性的路径似乎更简单。 – SokomoKud

+0

@SokomoKud:是的,正如我在第一篇文章中指出的那样,我链接到Sysnative将被解释为System32。所以,如果你输入System32它将导致SysWOW64,但如果你输入Sysnative它将导致System32。 –

0

我发现了“问题”。真的很简单;( 因为我在x64体系结构中,即使dll不在system32中,sysWOW64中的dll也可以在File.Exists中将值设置为true(并且程序在sysWOW64中使用它,如果不在system32,我认为)

+0

正如我所解释的那样使用“C:\ Windows \ Sysnative”,并且您将能够检查它是否真的在实际的System32中:)。只有32位程序使用SysWOW64文件夹。 –

相关问题