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

时间:2010-12-04 17:55:13

标签: windows installer 64-bit

出于好奇,如果我正在创建程序安装程序,我该如何决定安装哪个“Program Files”目录?在32位系统上,环境变量“%programfiles%”足够好。但是,在64位系统上,32位程序不应安装到该文件夹​​,而应安装到“%programfiles(x86)%”,据我所知,它指向“C:\ Program Files(x86)”。我的问题是:安装程序应该如何决定使用哪个环境变量?对于32位应用程序,“%programfiles%”的值是否会更改,或者在使用“%programfiles%”之前是否应始终先检查“%programfiles(x86)%”是否存在,还是应该执行完全不同的操作?< / p>

谢谢!这只是出于我自己的好奇心,因为我试图习惯64位操作系统。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

我很确定我在某处读到Windows自动为您做这件事。换句话说,如果您的安装程序是32位,即使您尝试安装到x86,它也会被路由到Program Files目录变体。

我确定我在The Old New Thing上阅读了这篇文章但here's a link支持了这个争论,直到找到那个。


啊,是的,here it is,来自有用的Raymond Chen

  

评论员Koro正在以32位程序的形式编写安装程序,检测它是否在64位系统上运行,并希望将文件(并且可能设置注册表项并执行其他安装程序)复制到64-位目录,但仿真层将操作重定向到32位位置。问题是“从32位应用程序中查找x64 Program Files目录的方法是什么?”

     

答案是“与系统合作比使用系统更好。”如果你是一个32位程序,那么每次你尝试与外界交互时,你都会与模拟器作斗争。相反,只需将安装程序重新编译为64位程序即可。让32位安装程序检测到它在64位系统上运行并启动64位安装程序。 64位安装程序不会在32位仿真层中运行,因此当它尝试复制文件或更新注册表项时,它将看到真正的64位文件系统和真正的64位注册表。