【发布时间】:2019-05-24 15:34:18
【问题描述】:
应用最初以 32 位形式交付。现在发布了 32 位和 64 位版本。
现在,当 64 位 Windows 用户将应用程序从 32 位版本升级到 64 位版本时,默认安装文件夹应指向“程序文件”(无 x86)。
我已经以这种方式更新了我的wsx 文件:
<?if $(var.Platform) = x64 ?>
<?define bitness = "(64 bit)" ?>
<?define Win64 = "yes" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
<?define bitness = "(32 bit)" ?>
<?define Win64 = "no" ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>
....
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.PlatformProgramFilesFolder)">
<Directory Name="COMPANY" Id="D.COMPANY">
<Directory Name="Product name" Id="APPDIR">
</Directory>
</Directory>
</Directory>
</Directory>
这非常适合全新安装:
在 64 位系统上安装 32 位应用程序时,它安装在“程序文件 x86”中,在所有其他情况下,安装到“程序文件”中。
如果从 32 位升级到 64 位,默认目标文件夹仍然是“Program files x86”,如果将其移至“Program files”,我喜欢这样。
有什么好的方法吗?还是我必须在我的 C++ 代码中覆盖这个自定义操作?
编辑/更新:
只是要清楚。我的应用程序是后台服务。机器用户根本看不到该应用程序(极端极端情况除外)。在大多数情况下,此服务由其他可以静默远程安装所需软件的服务安装/取消分级。
在此升级期间,所有 32 位组件都将被清除(一个 exe 和几个 dll-s)并替换为 64 位等效组件。配置数据和缓存数据被传输到升级后的应用程序。
RemoveExistingProducts 设置为<RemoveExistingProducts After="InstallInitialize" />
【问题讨论】:
-
RemoveExistingProducts是如何安排的?我对这些位/迁移问题生疏了。好的,现在我看到您将提供两个版本 - 最初我读到您希望完全迁移到 64 位。您是否考虑过并排安装?我将在下面取消删除我有些相关的答案,以便您快速查看。
标签: wix windows-installer