如何確定包含使用VBA的32位程序的文件夾的完整路徑?它在32位Windows系統上稱爲「程序文件」,但在64位系統上稱爲「Program Files(x86)」。獲取包含32位程序的「程序文件」文件夾的路徑
回答
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。
UPDATE:基於談話我已經受夠了基督教,並根據我的意見,我看着這個多一點。
我有我上測試了兩種機器:
- 機1:Win 7的極限,64位,Office 2010的64位
- 機2:Win 7的極限,32位,辦公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//
因此,基於這些有限的研究結果,您可能希望看到的,如果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並執行相同的操作。
我不會說任何一種方法都是萬無一失的,但應該讓你走上正軌。
偉大的解決方案;快速的問題,如果我們在32位機器上運行,會發生什麼,Environ(「PROGRAMFILES(X86)」)只是返回空白?對不起,我沒有一個人。 – James 2012-01-02 15:30:26
我還沒有一個方便,但environ(「HELLO_WORLD」)返回一個空字符串,所以我會想象你會得到相同的結果,如果該變量只用於64位機器。虛擬PC(和其他操作系統模擬器)是免費的。如果你有一個x86操作系統躺着,把灰塵吹掉,在虛擬環境中安裝,看看會發生什麼。 :) – ray 2012-01-02 17:33:24
另外,我剛剛看到Christian的回答,我應該注意到,在我的機器上,我得到了var「ProgramFiles」與「PROGRAMFILES(X86)」的不同文件夾。您可能最好使用他的建議獲取x64文件夾;並且在這裏推測,如果「PROGRAMFILES(X86)」和「ProgramW6432」都返回空白值,那麼「ProgramFiles」將適用。 – ray 2012-01-02 17:36:44
下面是文章向您展示如何從註冊表中讀取信息:
在這篇文章的評論也暗示如何從環境變量中的信息「PROGRAMFILES」 。但要小心,如果你有不同的分區,可能會有多個「Program Files」文件夾,例如"C:\Program Files"
和"D:\Program Files"
。
ray023's answer基本上是正確的,但一個加法:
至少在我的機器上(Win 7的家庭高級版64位,Access 2000中安裝),都
Environ("ProgramFiles")
和
Environ("PROGRAMFILES(X86)")
...返回相同的文件夾,C:\Program Files (x86)
。
要在我的64位Windows上獲得「非x86文件夾」(C:\Program Files
),我需要使用Environ("ProgramW6432")
。
Here's another link關於Environ
函數,包括代碼如何列出所有環境變量(這就是我如何找到ProgramW6432
)。
編輯:
正如我已經評論說,我只是測試它在我的另一臺機器上的結果似乎不僅依賴於操作系統,但在安裝微軟Office版本還有:
本機運行在Win XP SP3 32位,和Access 2000安裝:
Environ("ProgramFiles")
回報C:\Programme
。
(這是「程序文件」的德文 - 我在德國和我的Windows是德語)
Environ("PROGRAMFILES(X86)")
和Environ("ProgramW6432")
返回一個空字符串。
- >因此,確定「x86文件夾」(無論是在Win XP還是Win 7上)最安全的方式似乎是Environ("ProgramFiles")
。
我無法證實這一點;我得到了預期的結果?我使用的是64位版本的辦公軟件,我可以確認您是否正確,因爲我懷疑您不是?儘管感謝幫助。 – James 2012-01-02 16:37:33
不,我使用的是32位版本(Access 2000,具體 - 這是安裝在此機器上的MS Office的唯一部分)。 – 2012-01-02 16:48:44
@ChristianSpecht這是有趣的B/C我有64位的單詞,我使用ProgramFiles與PROGRAMFILES(X86)獲得不同的文件夾。我不知道這個命令在使用時是否起作用;而不是我想花時間去測試它,但可能是詹姆斯的一些事情。 :P – ray 2012-01-02 17:44:15
我想我會總結這次討論的結論。
的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
請注意,對於Windows 64位+ Office 32位設置,Environ("ProgramFiles")
的輸出確實是而不是與Windows中的ProgramFiles
環境變量的實際值匹配!在命令提示符處,echo %ProgramFiles%
返回C:\Program Files
,而不是C:\Program Files (x86)
。
如果需要(64位Windows C:\Program Files
32位Windows和C:\Program Files (x86)
)的路徑,32位程序文件的文件夾,那麼你可以使用這個功能:
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
- 1. VBS - 獲取程序文件的文件夾路徑?
- 2. Java - 獲取「程序文件」路徑
- 3. 在Cocoa應用程序中獲取文件夾的路徑
- 4. 如何獲取ClickOnce應用程序的文件夾路徑
- 5. 獲取winform程序的文件夾路徑
- 6. 獲取包含lua文件的路徑
- 7. 如何獲取位於sdcard0中的應用程序文件夾的路徑?
- 8. 在Centennial應用程序中獲取文件的文件路徑
- 9. 獲取遠程文件路徑位置
- 10. 批處理文件中的Windows 7 32位程序文件路徑問題
- 11. 如何從應用程序中的文件夾獲取文件路徑[iOS]
- 12. 如何獲取路徑到Android資源文件夾中的應用程序包
- 13. 應用程序文件夾中的Android Studio文件路徑
- 14. 獲取包含主文件的.class文件的目錄路徑
- 15. 獲取包含在項目中的文件的文件路徑
- 16. 如何將使用cmake的文件夾路徑包含到C/C++程序中
- 17. 使用包含文件獲取文件的路徑/名稱?
- 18. 32位網絡應用程序的Framework64文件夾中的Aspnet_regiis
- 19. 如何訪問程序集文件夾中的XML文件的文件路徑?
- 20. 共享文件夾中的Linux應用程序文件路徑位置[Java應用程序]
- 21. WIX將文件安裝到32位和64位程序文件夾中
- 22. 如何獲取winforms應用程序中的文件路徑
- 23. 獲取當前應用程序設置文件的路徑
- 24. 在wcf服務程序集中獲取文件的路徑
- 25. 程序作爲服務運行時獲取文件夾的路徑
- 26. Java(maven web應用程序),獲取資源文件夾中文件的完整文件路徑?
- 27. 如何獲取應用程序包中的腳本文件夾?
- 28. 頭文件包含路徑
- 29. 無法讀取文件絕對路徑(以應用程序包)
- 30. 如何編譯包含32位asm的C程序到.o文件中?
您切換32和64位 – rene 2012-01-02 14:31:27
在特定的操作系統上? – rene 2012-01-02 14:33:26
@rene:這取決於他的意思。在32位的Win XP上,只有一個「Program Files」文件夾。 「程序文件(x86)」通常只在64位窗口下可用。 – 2012-01-02 14:40:11