总是在次要升级(如何)中更新文件

问题描述 投票:3回答:4

我正在使用InstallShield Pro X创建安装软件包。升级正常进行。但是,即使创建日期!=修改文件上的日期,产品经理也希望升级在升级时替换所有文件。

我看到要执行此操作,我需要设置REINSTALLMODE = vamus而不是vomus。但是,我看不到如何告诉InstallShield我希望它使用该设置。默认情况下,setup.exe始终将vomus传递给Windows安装程序。

[InstallShield项目中有一个名为ReinstallModeText的属性,我从omus更改为amus,但似乎没有效果。

所以,我如何在安装项目中设置什么,以便当setup.exe检测到要运行升级时,它将发送REINSTALLMODE = vamus?谢谢。

更新:尝试在“发布”部分的MSI命令行值中添加以下内容:

REINSTALLMODE = vamus

这没有用。 Setup.exe没有在命令行上设置REINSTALL = ALL,而我这样做了。我将其添加到MSI命令行中,升级按预期进行。但是,问题不在于如果它是全新安装,那些属性仍会被设置并且安装程序将失败。

wix windows-installer installer installshield
4个回答
3
投票

不要将REINSTALLMODE设置为amusvamus强制覆盖文件)。这些设置适用于MSI中的所有组件,因此理论上可以降级系统文件或至少降级共享文件-这通常涉及通过合并模块包含的文件。通常将REINSTALLMODE设置为emus替换版本号相同或更低的文件号)是安全的。如果尝试在具有Windows Resource Protectionwikipedia)(Windows Server 2008和Vista及更高版本)的较新版本的Windows上覆盖系统保护的文件,即使这样做也会触发文件替换错误。在较早的Windows版本上,文件可能会被覆盖,然后通过Windows File Protection feature从dllcache恢复为正确的版本,前提是该功能运行良好。有(并且是)一个用于系统文件检查的关联工具:System File Checker

如果在编辑后仍存在替换文件的问题,则可以使用RemoveFile table安排在安装过程中删除文件(然后将其重新安装)。

真正的解决方案将%ProgramFiles%中的安装文件夹视为只读,并且不让应用程序保存任何设置或更改任何文件。所有配置文件都应转到用户概要文件或alluser概要文件,应用程序EXE文件应负责将其复制到概要文件位置。

请参见my answer here


2
投票

为了进一步调查并测试更多选项,我认为最好的答案是除了产品版本以外,还要修改产品代码,并将其编写为主要升级,从而先删除先前的版本,然后再安装新文件。

主要问题是安装程序需要花费更长的时间才能运行。我也认为您不能将此补丁作为补丁发布,但是在这一点上我可能是错误的。


1
投票

我没有IS X,但是在更高版本的InstallShield中,您将转到“发布”,突出显示您的发行版,转到“ Setup.exe”部分,并且有一个名为“ MSI Command Line Arguments”的字段。在此处,您将指示希望Setup.exe传递到Windows Installer的所有命令行参数。例如。 REINSTALLMODE = vamus


1
投票

您提到您将ReinstallModeText与“ amus”一起使用。您是否尝试过等于“ vamus”的ReinstallModeText。 “ v”导致安装程序运行源软件包,而不是缓存的软件包,这可能是您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.