看来,我想用FileExists()查看的一些文件,即使它们在那里也永远不会被找到,每次都会找到其他文件.
如果我将文件"driver.sys"放入"C:\ Windows\System32\drivers \"目录中,则永远不会找到它(每次调用该函数时FileExists都为false).如果我将文件移动到Windows根目录"C:\ Windows \",则会找到它.
这不起作用(文件肯定在文件夹'C:\ Windows\System32\drivers \'):
function isNotDriverInstalled(): Boolean;
begin
if (FileExists('C:\Windows\System32\drivers\driver.sys')) then begin
Log('File exists');
Result := False;
end else begin
Log('File doesn''t exist');
Result := True;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这有效(当文件位于'C:\ Windows \'文件夹中时):
function isNotDriverInstalled(): Boolean;
begin
if (FileExists('C:\Windows\driver.sys')) then begin
Log('File exists');
Result := False;
end else begin
Log('File doesn''t exist');
Result := True;
end;
end;
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我使用的是Windows 7,64位.
以前有人经历过这样的案子吗?有什么建议?
Thx提前!
您的System32目录将映射到SysNative路径File System Redirector,因为您可以看到,这样的目录路径的硬编码并不那么容易.更好地使用下面列出的内置常量之一:
1. {sys}常量:
您可以使用{sys}常量,但请确保允许设置以64位模式运行.有关如何执行此操作的详细信息,请参阅ArchitecturesInstallIn64BitMode指令参考,并务必阅读该64-bit Installation Limitations主题.
从{sys}常量参考:
系统的System32目录.例如:如果您在条目上使用了{sys}\CTL3D32.DLL且系统的Windows系统目录是"C:\ WINDOWS\SYSTEM",则安装或卸载会将其转换为"C:\ WINDOWS\SYSTEM\CTL3D32.DLL" ".
在64位Windows上,默认情况下,此常量返回的System32路径映射到包含32位系统文件的目录,就像在32位Windows上一样.(这可以通过启用64位模式来覆盖.)
以下是如何使用它:
if FileExists(ExpandConstant('{sys}\drivers\driver.sys')) then
Log('File exists');
Run Code Online (Sandbox Code Playgroud)
2. {syswow64}常量:
从{syswow64}常量参考:
在64位Windows上,系统的SysWOW64目录,通常为"C:\ WINDOWS\SysWOW64".这是32位系统文件所在的实际目录.在32位Windows上,32位系统文件驻留在"System32"或"System"中,而不是位于单独的SysWOW64目录中,因此如果在此处使用,此常量将解析为与{sys}相同的目录.
除非您特别需要获取32位系统文件所在的实际目录的名称,否则请勿使用此常量.无条件地在{sys}足够的地方使用{syswow64}可能会导致问题.(有关一个示例,请参阅[Files]部分的sharedfile标志的文档.)
以下是如何使用它:
if FileExists(ExpandConstant('{syswow64}\drivers\driver.sys')) then
Log('File exists');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4586 次 |
| 最近记录: |