22

可能重复:
C# - 如何在 Windows Vista 64 位上获取程序文件 (x86)

我意识到用户更改 Windows 默认值的可能性C:\Program Files很小,但奇怪的事情发生了!

如何Program Files从系统获得正确的路径?

4

6 回答 6

35

.NET为 Program Files、My Documents 等提供了“特殊文件夹”的枚举。

从枚举转换为实际路径的代码如下所示:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

http://msdn.microsoft.com/en-us/library/14tx8hby.aspx

于 2009-07-06T05:52:13.243 回答
28

只是为了补充这一点。

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

如果您特别需要一个和/或另一个,那么您需要检查如下:

32位系统:

SpecialFolder.ProgramFiles= ..程序文件\

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)\

显然,这取决于您的语言环境等...

于 2010-01-12T23:19:43.427 回答
5

您将在Environment类中使用GetFolderPath 。

try {
    Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles )
catch( ArgumentException ex ) {
    Console.Out.WriteLine( ex.StackTrace );
}
于 2009-07-06T05:57:41.173 回答
2

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)可能是最好的解决方案,但另一个可能的变体是评估ProgramFiles环境变量的值。为此,您可以使用类的GetEnvironmentVariableorExpandEnvironmentVariables方法Environment

Environment.GetEnvironmentVariable("ProgramFiles")

Environment.ExpandEnvironmentVariables("%ProgramFiles%")
于 2009-07-06T06:23:06.190 回答
1

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

IE:

%PROGRAMFILES%\Maxis\SimCity

在 C# 中:

System.Environment.SpecialFolder.ProgramFiles
于 2009-07-06T05:52:05.193 回答
1
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

在 64 位 Windows 中获取“程序文件 (x86)”,在 32 位中获取“程序文件”。

于 2010-12-14T18:04:04.657 回答