我的程序应如何决定安装在“Program Files(x86)”下?

3
只是好奇,如果我正在创建一个程序安装程序,我应该如何决定安装到哪个“Program Files”目录?在32位系统上,环境变量“%programfiles%”就足够了。然而,在64位系统上,32位程序不应安装到那个文件夹,而应该安装到“%programfiles(x86)%”,据我所知,它指向“C:\Program Files (x86)”。我的问题是:安装程序应该如何决定使用哪个环境变量?对于32位应用程序,“%programfiles%”的值会改变吗?还是应该先检查“%programfiles(x86)%”是否存在,然后再使用“%programfiles%”,或者应该完全采取不同的方法?
谢谢!这只是出于我的好奇心,因为我试图适应64位操作系统。
2个回答

4
当32位程序(在您的情况下是安装程序)要求系统解析ProgramFilePath常量(请在MSDN中检查确切的名称)时,系统不会返回C:\ Program files,而是返回C:\ Program files(x86)。因此,是系统决定而不是应用程序。

4
我很确定我在某个地方读到过,Windows会自动为你执行此操作。换句话说,如果你的安装程序是32位的,它将被路由到x86目录变体,即使你试图安装到Program Files中。
我确定我在The Old New Thing上读到过这篇文章,但在我找到那篇文章之前,这里有一个链接支持这个观点。
啊,是的,在这里,来自永远有用的Raymond Chen
评论者Koro正在编写一个32位程序形式的安装程序,检测到它正在64位系统上运行,并希望将文件复制(并可能设置注册表项和执行其他安装程序任务)到64位目录中,但仿真层将操作重定向到32位位置。问题是“如何从32位应用程序中找到x64 Program Files目录?”
答案是“与其对抗系统,不如与其合作”。如果你是一个32位程序,那么每次尝试与外部世界交互时,你都将与仿真器进行斗争。相反,只需将安装程序重新编译为64位程序。让32位安装程序检测到它正在64位系统上运行,并启动64位安装程序。64位安装程序不会在32位仿真层中运行,因此当它尝试复制文件或更新注册表键时,它将看到真正的64位文件系统和真正的64位注册表。

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