相关疑难解决方法(0)

WiX技巧和提示

我们现在已经使用WiX一段时间了,尽管人们普遍抱怨易用性,但它还是相当不错.我正在寻找的是有用的建议:

  • 设置WiX项目(布局,参考,文件模式)
  • 将WiX集成到解决方案和构建/发布流程中
  • 为新安装和升级配置安装程序
  • 任何好的WiX黑客你都想分享

wix wix3 wix3.5

264
推荐指数
23
解决办法
21万
查看次数

Windows安装程序在产品升级期间删除版本化文件,而不是降级它

我们使用wix来创建我们的设置.对于升级,我们使用主要升级,如Rob Mensching的回答所示.(在较新的wix版本中,您可以使用MajorUpgrade元素.)这通常很有效.删除旧产品,然后安装新产品.

但是,显然上述内容并不完全等同于手动卸载旧产品然后手动安装新产品.

考虑例如以下场景:

  • 我们的产品版本1.0已发布,包含第三方dll的5.0版本
  • 我们的产品版本1.1已发布,包含相同thirdparty dll的5.1版
  • 我们产品的1.2版本已经发布,再次降级到第三方dll的5.0版本,因为我们发现新版本引入了比解决的问题更多的问题.

显然,使用上面链接的wix升级逻辑,从1.1版升级到1.2时,3rdparty dll将消失.修复是必要的,以恢复它.

还有另一种升级方式,这适用于这种情况吗?我想我正在寻找的是升级逻辑,它允许降级组件,其行为就像手动卸载旧产品然后手动安装新产品一样.

windows-installer wix

29
推荐指数
2
解决办法
4692
查看次数

如何使WIX MSI始终删除以前的版本?

我有CI构建系统在开发人员检查更改时构建MSI.我们对已安装的MSI进行自动验收测试.

基本上每个MSI都是产品的完整安装,因此我们本身没有任何版本控制(ala Windows安装程序).

每个MSI具有相同的产品GUID和升级GUID,以及相同的版本号.但是有一个不同的包GUID(在wix中使用'*').

我想要实现的是,当安装程序运行时,它将"卸载"任何以前安装的产品版本,并安装新的..所有这些都来自一个MSI(我们有一个不受我们控制的复杂安装过程.. citrix和sccm,所以我们想给他们一个简单的安装路径)

我试过了:

<Property Id='PREVIOUSVERSIONSINSTALLED' Secure='yes' />
<Upgrade Id='$UPGRADE_GUID'>  
  <UpgradeVersion Minimum='1.0.0.0'
                  Maximum='99.0.0.0'
                  Property='PREVIOUSVERSIONSINSTALLED'
                  IncludeMinimum='yes'
                  IncludeMaximum='no' />
</Upgrade>
Run Code Online (Sandbox Code Playgroud)

并有:

<InstallExecuteSequence>
  <RemoveExistingProducts After='InstallFinalize' />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

并尝试过:

<InstallExecuteSequence>
  <RemoveExistingProducts After='InstallInitialize' />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从后续版本安装msi时,我得到:

Another version of this product is already installed. Installation of this version cannot continue. 
To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel. 
Run Code Online (Sandbox Code Playgroud)

这不是我真正想要的......

我知道我可以只更新产品标签中的Version属性,但这很难管理.首先,我可以每天生成20多个msi构建,因为我有许多生成MSI的构建管道,并且不确定如何以有意义的方式处理版本编号.

也许Windows Installer不允许这种类型的"始终覆盖安装版本"安装?

windows-installer wix wix3.5

19
推荐指数
3
解决办法
3万
查看次数

MSI vs nuget包:哪个更适合持续交付?

我们来讨论以下主题.目前正在部署的应用程序有很好的知道xcopy方法.这种方法很难管理依赖项,文件更新等.有一些软件包的帮助下启动应用程序部署的想法,你知道你在Linux的帮助下RPM,但适用于Windows.

所以我有疑问:在Windows经典Windows安装程序(msi)或nuget或其他东西上使用什么包系统更好?

.net windows-installer wix continuous-deployment nuget

12
推荐指数
1
解决办法
2万
查看次数

基于要在MSBUILD中使用的用户定义目录创建wix片段文件的最佳方法

在这个问题的精神中,Si在这里:WiX技巧和提示.我试图确定基于目录获取创建wix片段的最佳方法.文件收获,可以这么说.例如,在bin\release文件夹下,我可以拥有许多不同的文件夹以及我想要在片段中轻松捕获的文件.我一直在键入或使用wixedit这样做.

请注意我在这里没有尝试任何东西:A)我读了一点关于热量.(http://installing.blogspot.com/2006/04/heatexe-making-setup-easier.html)我我不确定从msbuild运行它?B)我从Newagesolution发现了这篇博客文章,该文章讨论了使用t4脚本:http://blog.newagesolution.net/2008/06/how-to-use-msbuild-and-wix-to-msi.html

我想知道其他人正在做些什么来解决这个问题.

问候,Brian

msbuild wix wix3

10
推荐指数
1
解决办法
5729
查看次数

在Visual Studio 2008和WiX(v3)中使用heat.exe收集.csproj

我发现Wix v3使用工具(heat.exe)将信息"收集"到WiX片段中.要么我正在寻找错误的位置,要么这是一个很薄的文件.

对于包含媒体文件的复杂文件夹结构,自动生成WiX片段(可能使用heat.exe)的最佳方法是:

  • 各种类型(ico/png/xaml/etc)
  • 这可能会定期更改(名称/位置/添加/删除)
  • 它被归类为"内容"并包含在.csproj中

这样他们可以通过WiX内置到安装程序中,并且可以承受升级和补丁吗?

背景资料

  1. 我找到了heat.exe,这似乎解决了自动生成WiX片段的要求
  2. 让"dir"收割机工作,我注意到"项目"收割机(命令行帮助)
  3. 媒体已经在C#项目文件中,因此注意到"-pog:Content"可能做得很好
  4. 粗略搜索发现过时的文档没有提到"项目"收割机
  5. 实现完整的项目安装程序可能与"项目"收割机完成,但不确定这是如何得到支持,以及陷阱是什么.
  6. 看到"PUT-GUID-HERE"的产生,并意识到guid的自动生成可能会有升级/补丁的影响.
  7. 意识到必须有人将这些工具用于类似目的,并且可能会指出我正确的方向.

它(相当)指出v3还没有"完成"(因此文档和教程的稀缺性).我现在的感觉是,在我的构建脚本中自动执行此操作并非易事,而且现在工具正在增长以简化此操作.

wix wix3 csproj fragment heat

7
推荐指数
1
解决办法
3803
查看次数

当产品ID为*时,在WiX中卸载快捷方式以允许重大升级?

我在这里按照教程开始菜单中实现卸载快捷方式.

简而言之,创建卸载条目的方法如下:

 <Shortcut Id="UninstallProduct"             
           Name="Uninstall My Application"
           Target="[SystemFolder]msiexec.exe"
           Arguments="/x [ProductCode]"
           Description="Uninstalls My Application" />
Run Code Online (Sandbox Code Playgroud)

根据罗布Mensching的建议在这里,如果应用程序是足够小,你不需要处理小更新和次要升级(我不),你可以强制每次更新是一个重大的升级.这在这里显示.我用Rob的建议是这样的:

<Product Id="*" UpgradeCode="PUT-GUID-HERE" Version="$(var.ProductVersion)">
 <Upgrade Id="PUT-GUID-HERE">
    <UpgradeVersion OnlyDetect="yes" Minimum="$(var.ProductVersion)" Property="NEWERVERSIONDETECTED" IncludeMinimum="no" />
    <UpgradeVersion OnlyDetect="no" Maximum="$(var.ProductVersion)" Property="OLDERVERSIONBEINGUPGRADED" IncludeMaximum="no" />
</Upgrade>

<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如果产品ID是随机的(*)以允许进行重大升级,是否有其他方法可以将卸载快捷方式添加到开始菜单,还是我们必须通过添加/删除程序来实现?我更喜欢在开始菜单中创建快捷方式,因为它对用户来说更容易.显然它现在的方式,它将无法工作,因为msiexec参数中使用的[ProductCode]将在每次安装时更改.谢谢.

wix uninstall upgrade

6
推荐指数
1
解决办法
2015
查看次数

WiX3主要升级无法正常工作

我正在尝试进行重大升级,但它无法正常工作.它只是将新程序与旧程序一起安装.他们是在不同的目录(如我的新版本改变了目录结构),所以没有冲突,但旧的需求,以被删除我的产品正常运行.

<Property Id="UPGRADE_NEEDED" Secure="yes" />
<Property Id="SAME_OR_NEWER_VERSION" Secure="yes" />
<InstallExecuteSequence>
    <RemoveExistingProducts After="InstallFinalize" />
</InstallExecuteSequence>
<Upgrade Id="{PUT-YOUR-GUID-HERE}">
    <UpgradeVersion Minimum="5.1.3" OnlyDetect="yes" IncludeMinimum="yes" Property="SAME_OR_NEWER_VERSION" />
    <UpgradeVersion Minimum="5.1" Maximum="5.1.3" Language="1033" Property="UPGRADE_NEEDED" MigrateFeatures="yes" IncludeMinimum="yes" />
Run Code Online (Sandbox Code Playgroud)

这是我的升级元素(当然删除了GUID).如果有人能找到问题所在,我将非常感激.

wix wix3

5
推荐指数
1
解决办法
2178
查看次数

WIX - 无法卸载MSI包

我创建了一个WIX安装程序(使用WIX 3.6),运行得很好.我在IIS上"安装"网站并使用VSDBCMD命令自定义操作部署数据库.数据库自定义操作是在卸载期间创建问题的操作.它在unistall期间实际上不应该运行,现在在卸载期间它失败并出现错误 - "删除成功或错误状态:1603".(来自应用程序日志)

所以我现在有两个问题 - > 1.如何指示WIX在卸载过程中不运行自定义操作?2.如何卸载早期MSI的剩余部分.有手动的方法吗?

提前致谢!

wix wix3.6

4
推荐指数
1
解决办法
3927
查看次数

使用Wix升级

我尝试了几乎所有解决方案列表页面如何实施WiX安装程序升级?,但没有升级成功.升级时始终提示此消息:

"已安装此产品的另一个版本.此版本的安装无法继续.要配置或删除此产品的现有版本,请使用"控制面板"上的"添加/删除程序".

当我跟踪安装程序日志时,它显示:

已安装此产品的另一个版本.此版本的安装无法继续.要配置或删除此产品的现有版本,请使用"控制面板"上的"添加/删除程序".{CCA05551-C990-4ACA-9B01-A65AA9FBF884} MSI(c)(50:40)[13:49:33:462]:产品: - 配置失败.

MSI(c)(50:40)[13:49:33:462]:Windows Installer重新配置了该产品.产品名称:产品版本:2.0.1.6.产品语言:1033.重新配置成功或错误状态:1638.


我错过了任何配置?

windows-installer wix

4
推荐指数
1
解决办法
1780
查看次数

Wix:禁止安装组件:因为存在具有更高版本密钥文件的相同组件

在部署到生产环境之前,我正在OPS环境中对MSI进行兼容性检查.

我正在部署的第一部分是最新的MSI说"在MSIv1之上的MSIv2到OPS环境,MSIv2自动卸载MSIv1并安装MSIv2而没有任何问题.

现在,当我在MSIv2上安装MSIv1时.MSIv1已安装,它在安装的控制面板中显示.但是当我看到目录路径时,bin文件夹中没有.dll文件.

我正在日志文件中记录MSI的操作告诉...日志:不允许安装组件:{AC7BC9EB-4F1D-4FEE-B0C2-478966229D8E}因为存在具有更高版本密钥文件的相同组件

windows-installer wix wix3

3
推荐指数
2
解决办法
1810
查看次数

如何在发布新版本时重新安装MSI?

我已经在我的电脑上安装了设置.然后我在代码中做了一些更改,并用新的MSI构建了MSI.现在,当我尝试安装应用程序时,我收到一个错误,因为"已经安装了该产品的另一个版本,请删除旧版本".

我想重新安装它,而不是显示此警告.这可能吗?

installer windows-installer

2
推荐指数
1
解决办法
2451
查看次数