既然你可以合理地保证:如系统安装在同一驱动器上存在
- 程序文件目录。
- 它们被命名为x64和x86的Program Files,以及x64的Program Files(x86)。
然后,你可以做这样的事情:
public static void Main(string[] args)
{
string baseDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));
string programFiles = "Program Files";
string programFilesX86 = "Program Files (x86)";
Console.WriteLine(Environment.Is64BitProcess ? "64-Bit Process" : "32-Bit Process");
if (Environment.Is64BitOperatingSystem)
{
Console.WriteLine("64-bit operating system");
Console.WriteLine("Program Files Directory: " + Path.Combine(baseDirectory, programFiles));
Console.WriteLine("Program Files x86 Directory: " + Path.Combine(baseDirectory, programFilesX86));
}
else
{
Console.WriteLine("32-bit operating system");
Console.WriteLine("Program Files Directory: " + Path.Combine(baseDirectory, programFiles));
}
Console.ReadKey(true);
}
不过,有一点需要注意:
程序文件目录可以被改变,虽然它不被支持微软可能会导致其他系统问题。
所以,我会跟着那些好Directory.Exists
,如果你没有找到他们,那么你可以看看注册表。你正在寻找的关键是:
HKLM \ SOFTWARE \微软\的Windows \ CurrentVersion \
- ProgramFilesDir的
- ProgramFilesDir的(86)
但同样,有注册表访问是一些难以获得的警告,当使用Registry
类时,它将根据处理器体系结构选择64位或32位注册表请求它的过程。您可以指定64位目录。不想太过分,有很多关于如何阅读注册表的教程。
另外请注意,这只适用于Windows Vista和以上,我不记得奇怪的Windows XP-64如何处理它,或旧版本的Windows Server。
最后一个注释,Linux/Android/iOS(也就是Mono兼容的操作系统或Micro Framework)没有“Program Files”目录,因此请确保您意识到您正在编写特定于操作系统的代码。如果您希望使其更加独立于操作系统,请考虑编写一个函数,该函数可以基于当前操作系统为默认安装目录返回一组字符串。
将您的项目的构建属性更改为Build -'Platform target = AnyCpu'如果您不熟悉,则右键单击该项目,然后选择属性,然后单击左侧的Build节点并将x86更改为AnyCPU' – MethodMan
@MethodMan这是我的项目中已选择的选项。任何其他建议? –
什么是选择的选项改变它..因为我刚刚建议..我试着你的代码和'AnyCPU和x64'都返回'C:\ Program Files文件'与'C:\ Program Files文件(x86)' – MethodMan