【问题标题】:How should my program decide to install under "Program Files (x86)"?我的程序应该如何决定安装在“Program Files (x86)”下?
【发布时间】:2011-05-20 06:56:52
【问题描述】:
出于好奇,如果我正在创建程序安装程序,我应该如何决定安装到哪个“程序文件”目录?在 32 位系统上,环境变量“%programfiles%”就足够了。但是,在 64 位系统上,32 位程序不应安装到该文件夹,而应安装到“%programfiles(x86)%”,据我了解,它指向“C:\Program Files (x86)”。我的问题是:安装程序应该如何决定使用哪个环境变量?对于 32 位应用程序,“%programfiles%”的值会发生变化,还是我应该在使用“%programfiles%”之前始终先检查“%programfiles(x86)%”是否存在,还是应该做一些完全不同的事情?
谢谢!这只是出于我自己的好奇心,因为我正在尝试习惯 64 位操作系统。
【问题讨论】:
标签:
windows
installation
64-bit
【解决方案1】:
当 32 位程序(在您的情况下为安装程序)要求系统解析 ProgramFilePath 常量(检查 MSDN 中的确切名称)时,系统不会返回 C:\Program 文件,而是 C:\Program文件(x86)。所以决定的是系统,而不是应用程序。
【解决方案2】:
我很确定我在某处读到 Windows 会自动为您执行此操作。换句话说,如果您的安装程序是 32 位的,即使您尝试安装到 Program Files,它也会被路由到 x86 目录变体。
我确定我在 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 位注册表。