获取包含32位程序的“程序文件”文件夹的路径

时间:2012-01-02 14:26:21

标签: windows vba

如何使用VBA确定包含32位程序的文件夹的完整路径?它在32位Windows系统上称为“程序文件”,但在64位系统上称为“程序文件(x86)”。

5 个答案:

答案 0 :(得分:14)

Environ会做到这一点:

debug.print Environ("ProgramFiles") 
debug.print Environ("PROGRAMFILES(X86)")

'If you want to check if current PC is x64
debug.print Environ("PROCESSOR_IDENTIFIER")

可以找到环境变量列表here


更新:根据我与Christian的对话并根据我的评论,我对此进行了一些调查。

我测试了两台机器:

  • 计算机1 :Win 7 Ultimate,64位,Office 2010 64位
  • Machine 2 :Win 7 Ultimate,32位,Office 2007 32位

我在即时窗口中运行了以下语句:

? Environ("ProgramFiles") 
? Environ("PROGRAMFILES(X86)")
? Environ("ProgramW6432")

<强>结果

机器1:

C:\Program Files 
C:\Program Files (x86) 
C:\Program Files

机器2:

C:\Program Files
//Blank//
//Blank//

因此,基于这些有限的发现,您可能希望看到if ProgramW6432 具有值。如果没有,假设32位并使用 ProgramFiles

IF Environ("ProgramW6432") <> "" THEN
   'I'm 64 bit so check both ProgramW6432 and PROGRAMFILES(X86)
ELSE
   'I'm 32 bit so check ProgramFiles
END IF

相反,您可以使用PROCESSOR_IDENTIFIER来确定x64与x86并执行相同的操作。

我不会说任何一种方式都是万无一失的,但应该让你走上正轨。

答案 1 :(得分:9)

一站式商店

我认为我总结了可以从这里所有答案中散布的信息中得出的结论,以及我的一些整合。所有以前的答案海报的积分!

对于任何给定的“程序文件”相关环境变量,Environ的输出将根据Windows(32或64位)以及Office(32位或64位)而变化,如下所示:

Windows Office  ProgramFiles            PROGRAMFILES(X86)       ProgramW6432
------- ------  ----------------------  ---------------------   ----------------
32-bit  32-bit  C:\Program Files        [empty string]          [empty string]
64-bit  32-bit  C:\Program Files (x86)  C:\Program Files (x86)  C:\Program Files 
64-bit  64-bit  C:\Program Files        C:\Program Files (x86)  C:\Program Files

请注意,对于Windows 64位+ Office 32位设置,Environ("ProgramFiles")的输出与Windows中ProgramFiles环境变量的实际值匹配!在命令提示符处,echo %ProgramFiles%返回C:\Program Files,而不是C:\Program Files (x86)

如果需要32位程序文件文件夹的路径(32位Windows为C:\Program Files,64位Windows为C:\Program Files (x86)),则可以使用此功能:

Function Get32BitProgramFilesPath() As String
    If Environ("ProgramW6432") = "" Then
       '32 bit Windows
       Get32BitProgramFilesPath = Environ("ProgramFiles")
    Else
       '64 bit Windows
       Get32BitProgramFilesPath = Environ("ProgramFiles(x86)")
    End If
End Function

答案 2 :(得分:6)

ray023's answer基本上是正确的,但还有一个补充:

至少在我的机器上(Win 7 Home Premium 64位,安装了Access 2000),两者都是 Environ("ProgramFiles")
Environ("PROGRAMFILES(X86)")

...返回相同的文件夹C:\Program Files (x86)

获取&#34;非x86文件夹&#34; (C:\Program Files)在我的64位Windows上,我需要使用Environ("ProgramW6432")

关于Environ函数的

Here's another link,包括如何列出所有环境变量的代码(这就是我找到ProgramW6432的方式)。


修改

正如我在评论中已经说过的那样,我只是在我的其他机器上进行了测试,结果似乎不仅取决于操作系统,还取决于已安装的MS Office版本:

本机在Win XP SP3 32位上运行,并安装了Access 2000:

Environ("ProgramFiles")返回C:\Programme (&#39;&#34; Program Files&#34;德语 - 我在德国,我的Windows是德语)

Environ("PROGRAMFILES(X86)")Environ("ProgramW6432")返回一个空字符串。

- &GT;所以最安全的方法来确定&#34; x86文件夹&#34; (无论是在Win XP还是Win 7上)似乎都是Environ("ProgramFiles")

答案 3 :(得分:4)

这篇文章介绍了如何从注册表中读取此信息:

http://accesstips.wordpress.com/2010/01/08/get-a-computers-program-files-folder-path-with-access-vba-and-wmi/

在该文章的评论中还提示如何从环境变量“ProgramFiles”中检索信息。但请注意,如果您有不同的分区,则可能有多个“Program Files”文件夹,例如"C:\Program Files""D:\Program Files"

答案 4 :(得分:1)

Environ(“ ProgramFiles”)对于32位和64位系统都足够了……在64位中,您将获得 结果C:\ Program Files(x86)