Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WiX项目允许并排安装_Wix_Windows Installer_Side By Side - Fatal编程技术网

WiX项目允许并排安装

WiX项目允许并排安装,wix,windows-installer,side-by-side,Wix,Windows Installer,Side By Side,我正在为我们的产品创建一个MSI。我希望该产品能够并排安装。所以我可以先安装1.0.0,然后再添加1.0.1,这样两个版本都可以安装 我正在使用WiX创建msi,想知道如何在WiX中实现这一点?比如说 我是否需要为所有组件创建新的guid 我应该如何将版本信息添加到wix中,还是完全重命名我的产品 如何创建项目,以便发布新版本需要对wix项目进行最小更改 您好, Martijn您应该能够通过更改顶级productcode和UpgradeCode GUID使两个产品完全不相关,并使用Produ

我正在为我们的产品创建一个MSI。我希望该产品能够并排安装。所以我可以先安装1.0.0,然后再添加1.0.1,这样两个版本都可以安装

我正在使用WiX创建msi,想知道如何在WiX中实现这一点?比如说

  • 我是否需要为所有组件创建新的guid
  • 我应该如何将版本信息添加到wix中,还是完全重命名我的产品
  • 如何创建项目,以便发布新版本需要对wix项目进行最小更改
您好,
Martijn

您应该能够通过更改顶级productcode和UpgradeCode GUID使两个产品完全不相关,并使用Productversion来识别版本。您可以在产品之间共享组件guid(这就是合并模块的工作方式),这样安装程序的核心(组件定义)就不需要调整,仍然可以共享


您面临的主要挑战是确保这两个解耦的产品不会相互干扰,例如,使用相同的默认安装文件夹、开始菜单项和相同的添加/删除程序项。您可以通过在ProductName属性中包含产品版本号来实现这一点,这在您的安装UI中看起来有点技术性,但这并非闻所未闻。

关于您的第一个问题:不,您不需要。
但是为什么呢

在我的并行场景中,我很难理解windows installer规则。 你真的需要理解和的概念。WiX不会抽象这些方面

已突出显示可能的干扰。 让我们考虑几个例子。

  • 不需要更改具有应用程序可执行文件的组件的GUID。这打破了组件规则,但它可以工作,因为产品的两个版本都以互不干扰的方式定义相同的组件
  • 不直接支持两个版本共享的资源。一个突出的例子是使用ProgIDs使用文件扩展名,如图所示

    如果更改GUID(在使用“*”GUID时也会发生),则在卸载任一版本时将删除扩展名

    如果不更改GUID,则将保留扩展,但指向最近安装的版本。您可以将此选项作为两个魔鬼中的较小者使用,至少支持这样一种情况,即用户按照安装它们的相同顺序卸载版本。
    这里有一个陷阱:扩展需要是组件的关键路径。这使得并行场景中ProgID元素的使用出现问题,因为如果您没有将ProgID元素与引用的文件放在同一组件中,您将收到ICE69警告。此外,它是WiX的一个实现细节,它生成的注册表项将是密钥路径


感谢您的回答!我会更新我的进度。我基本上按照你说的做了:更改升级代码。接下来,我还必须更改programsmenudir(在startmenu中)的guid,以便在卸载时删除文件夹(如果我安装了两个版本),如果您安装了版本2,并且在安装之后您希望安装旧版本,会发生什么情况。又是第1版?