在C++和C# / VB.NET中使用环境变量搜索ProgramFiles和ProgramFiles(x86)

3

可能是重复问题:
C# - 如何在Windows Vista 64位上获取Program Files(x86)

我正在试图从我的程序中启动第三方程序。 我已经在Program FilesProgram Files(x86)中进行了快速搜索,我才意识到getenv(“ProgramFiles”)返回的路径实际上取决于我是在x64还是Win32中运行。

如何使用环境变量而不是硬编码的名称搜索(无论是在C ++和C#或VB.NET中同时进行搜索),以便在用户机器上运行我的程序的版本不同的情况下,用户可能已经安装了另一个版本?

我的代码现在:在C ++中:

fs::path root_directory = fs::path(getenv("ProgramFiles"));
// and then I change to 
root_directory = fs::path(getenv("ProgramFiles(x86)"));

在VB.NET中:

System.Environment.GetEnvironmentVariable("ProgramFiles")

我看了这个资源:http://msdn.microsoft.com/zh-cn/library/aa365743

但是如果我按照他们说的实现,我一直得到的是x86...

2个回答

1

您可以使用以下方式获取它:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

1

1
根据System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles),在64位机器上返回"c:\Program Files",除非代码构建为x86目标,在这种情况下它将返回"C:\Program Files (x86)"。 - KF2
我马上试一下,你有在C++中如何做这个的想法吗? - Thalia
1
对于程序文件:TCHAR pf[MAX_PATH]; SHGetSpecialFolderPath( 0, pf, CSIDL_PROGRAM_FILES, FALSE ); - KF2
2
这两行代码将获取所需的目录:string prog32 = Environment.GetEnvironmentVariable("ProgramFiles");string prog64 = Environment.GetEnvironmentVariable("ProgramW6432"); 结果为:C:\Program Files (x86)和C:\Program Files - KF2

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