如何以编程方式检索“Program Files”文件夹的实际路径?

22

12
赔率并不那么小——在西班牙语版中,默认路径是C:\Archivos de programa\,因此任何一个明智的开发者都应该从系统中检索路径,而不是硬编码它。 - sharptooth
1
...而对于瑞典版本,默认路径为 c:\program\。绝对避免硬编码。 - lemonad
1
而在意大利,它是C:\Programmi。 - M.Turrini
6个回答

35

5
如果我没记错的话,这里有一个要注意的地方:它不能区分 Windows 的 x64 和 x86 版本。如果你正在寻找 %programfiles(x86)%,你需要找到另一种方法。 - Jimmy
3
确实!有一个相关的问题涵盖了x64问题:https://dev59.com/9nVC5IYBdhLWcg3wvT_g - brasskazoo
3
在64位操作系统上,这取决于你编译的平台。例如,如果你编译的是AnyCPU或x64,那么这将会给你C:\Program Files路径。如果你编译的是x86,那么这将会给你C:\Program Files (x86)路径。 - Helen

28

只是为了补充一下。

如果你在32位模式下运行(即使在64位操作系统上),SpecialFolder.ProgramFiles和%PROGRAMFILES%将返回..Program Files (x86)。

如果您特别需要其中之一,或两者都需要,则需要按以下方式检查:

32位系统:

SpecialFolder.ProgramFiles = ..Program Files\

32位进程的64位系统: SpecialFolder.ProgramFiles = ..Program Files (x86)\ Environment.GetEnvironmentVariable("ProgramW6432") = ..Program Files\

64位进程的64位系统: SpecialFolder.ProgramFiles = ..Program Files\ Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") = ..Program Files (x86)\

显然,这取决于您的区域设置等...


1
谢谢!只是作为跟进(因为我需要),还有CommonProgramW6432环境变量用于公共文件夹。 - testalino

5

您可以在 Environment 类中使用 GetFolderPath 方法。

try {
    Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles )
catch( ArgumentException ex ) {
    Console.Out.WriteLine( ex.StackTrace );
}

2

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) 可能是最佳解决方案,但另一种可能的变体是评估 ProgramFiles 环境变量的值。为此,您可以使用 GetEnvironmentVariableExpandEnvironmentVariables 方法来访问 Environment 类:

Environment.GetEnvironmentVariable("ProgramFiles")

Environment.ExpandEnvironmentVariables("%ProgramFiles%")

还是 Environment.GetEnvironmentVariable("ProgramFiles")? - brasskazoo

1

你可以访问名为:%PROGRAMFILES% 的环境变量。

i.e:

%PROGRAMFILES%\Maxis\SimCity

用C#:

System.Environment.SpecialFolder.ProgramFiles

更正:应为 %PROGRAMFILES%\Maxis\SimCity。%PROGRAMFILES% 变量已经包含了 'C:'。 - Merus

1
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

在64位Windows中获取“program files(x86)”,而在32位中获取“program files”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接