如何使用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)
可以在此处找到环境变量列表.
更新:根据我与基督徒的谈话,根据我的评论,我对此进行了一些调查.
我有两台我测试过的机器:
我在即时窗口中运行了以下语句:
? 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并执行相同的操作.
我不会说任何一种方式都是万无一失的,但应该让你走上正轨.
我想我总结了可以从这里所有答案中分散的信息中得出的结论,以及我的一些整合.所有以前的答案海报的积分!
的输出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)
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").
这是一篇文章,向您展示如何从注册表中读取此信息:
在那篇文章的评论中还提示了如何从环境变量“ProgramFiles”中检索信息。但要注意,如果您有不同的分区,可能会有多个“Program Files”文件夹,例如"C:\Program Files"和"D:\Program Files"。
| 归档时间: |
|
| 查看次数: |
15848 次 |
| 最近记录: |