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

Jam*_*mes 10 windows vba

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

ray*_*ray 15

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")
Run Code Online (Sandbox Code Playgroud)

可以在此处找到环境变量列表.


更新:根据我与基督徒的谈话,根据我的评论,我对此进行了一些调查.

我有两台我测试过的机器:

  • 机器1:Win 7 Ultimate,64位,Office 2010 64位
  • 机器2:Win 7 Ultimate,32位,Office 2007 32位

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

? Environ("ProgramFiles") 
? Environ("PROGRAMFILES(X86)")
? Environ("ProgramW6432")
Run Code Online (Sandbox Code Playgroud)

结果

机器1:

C:\Program Files 
C:\Program Files (x86) 
C:\Program Files
Run Code Online (Sandbox Code Playgroud)

机器2:

C:\Program Files
//Blank//
//Blank//
Run Code Online (Sandbox Code Playgroud)

因此,基于这些有限的发现,您可能希望看到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
Run Code Online (Sandbox Code Playgroud)

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

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


Jea*_*ett 9

一站式商店

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

的输出Environ对于任何给定"程序文件"相关的环境变量将取决于视窗(32或64位),以及办公室(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
Run Code Online (Sandbox Code Playgroud)

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

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

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
Run Code Online (Sandbox Code Playgroud)


Chr*_*cht 6

ray023的答案基本上是正确的,但还有一个补充:

至少在我的机器上(Win 7的家庭高级版64位,Access 2000中安装),都
Environ("ProgramFiles")
Environ("PROGRAMFILES(X86)")

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

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

这是关于该Environ函数的另一个链接,包括如何列出所有环境变量的代码(这就是我发现的ProgramW6432).


编辑:

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

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

Environ("ProgramFiles")回报C:\Programme.
(这是德语中的"程序文件" - 我在德国,我的Windows是德语)

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

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


Doc*_*own 5

这是一篇文章,向您展示如何从注册表中读取此信息:

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"