【问题标题】:Checking if a file exists on a 64 bit Vista machine with a 32 bit program使用 32 位程序检查文件是否存在于 64 位 Vista 机器上
【发布时间】:2010-01-05 15:12:16
【问题描述】:

所以,我有一个 32 位程序需要检查文件是否存在。但是,这些位置(可以来自快捷方式和注册表)通常使用环境字符串。我使用ExpandEnvironmentStrings api 来扩展它们,然后检查文件是否存在。但是,由于它是 32 位应用程序(注意 environmental strings emulation),因此在某些情况下路径会扩展到错误的位置。由于我不知道我给出的路径是 32 位还是 64 位,一种简单的解决方案是手动使用 64 位位置和 32 位位置扩展相关的环境字符串(ProgramFiles 和 CommonProgramFiles)。但是,这感觉有点hacky。有没有更好的办法?

【问题讨论】:

  • 出于好奇,我最终使用了有点老套的方法。我给了 Bob 答案,因为他的问题谈到了一个也适用于我的情况的不同问题(即路径也会因为文件系统重定向而出错,而不仅仅是因为环境字符串分配。

标签: winapi vb6 windows-vista 64-bit environment-variables


【解决方案1】:

也许File System Redirector 会有所帮助。特别是见 Wow64DisableWow64FsRedirection Function 和它的亲密朋友那里描述的。

即便如此,您可能仍需要进行一些检查以确定您需要扩展哪些字符串以及您需要 32 位还是 64 位扩展。为此,我怀疑一个简单的字符串表无济于事。正如您所说,%ProgramFiles% 在某些情况下可能表示 32 位路径,而在其他情况下可能表示 64 位路径。

【讨论】:

  • 文档没有说明(我看到的)这个影响环境的字符串。无论如何我都对它们进行了测试,但它们不起作用。
  • 当这些文件位于 system32 目录中时,这对于检查文件是否存在很有用,尽管我认为可以通过在检查存在时将“system”替换为“sysnative”来避免它。
猜你喜欢
  • 2011-02-10
  • 1970-01-01
  • 2023-03-24
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 2012-03-08
  • 1970-01-01
相关资源
最近更新 更多