如何获得ProgramFiles路径?

时间:2012-10-03 14:45:16

标签: c#

我有一个奇怪的问题。

我正在使用Windows 7 enterprise sp1 64位。

我需要为我的项目获取程序文件和程序文件X86目录路径。这就是我所做的:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);

但这两行都返回程序文件X86文件夹。

我该如何解决?

7 个答案:

答案 0 :(得分:50)

这适用于x86,x64或任何CPU配置:

string programFiles = Environment.ExpandEnvironmentVariables("%ProgramW6432%");
string programFilesX86 = Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%");

因为使用环境变量ProgramW6432将始终返回Program Files文件夹,而ProgramFiles将根据您的应用程序编译选项而有所不同。

答案 1 :(得分:16)

结果取决于您的项目定位的平台。如果您定位x86,则Environment.SpecialFolder.ProgramFilesEnvironment.SpecialFolder.ProgramFilesX86将返回相同的路径。

答案 2 :(得分:3)

Environment.SpecialFolder.ProgramFiles应返回32位应用程序的x86文件夹和64位Windows上64位应用程序的Program Files。检查项目配置设置。

答案 3 :(得分:2)

使用Visual Studio中的配置管理器(Build - > Configuration Manager)更改目标平台。

在平台列中,查看x64是否可用。如果不是,请单击下拉列表并选择“新建”。然后,您就可以将x64添加为目标平台。再次调试,您会看到Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)将返回C:\Program Files

答案 4 :(得分:1)

如果你的程序是32位,那么这总是返回x86文件夹

答案 5 :(得分:1)

根据Dan Nolan的评论,David的答案仅适用于Windows 7及更高版本。

这是一个适用于x86,x64或任何CPU配置并且适用于Windows较早版本的解决方案。

string ProgramFiles = Environment.ExpandEnvironmentVariables("%ProgramFiles%");

if (ProgramFiles[ProgramFiles.Length-1].Equals(')'))  // If ProgramFiles(x86)
    ProgramFiles = ProgramFiles.Substring(0, ProgramFiles.Length - 6);

基本上,只要将(x86)放在那儿(不应该的话)就删除。

OR:

查看此注册表值似乎也是一个可靠的解决方案: 计算机\ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ ProgramFilesDir

答案 6 :(得分:0)

您采用的方法绝对正确。我们只需要告诉编译器不喜欢特定的构建平台

就像

一样简单

转到Visual Studio>项目属性>构建>取消选中“首选32位”