目前我正在开发一个使用MSI包部署的项目.要修补程序,我们只需部署另一个与MSP相对的MSI安装程序包.这是一种有效/高效的方法,还是我们应该部署MSP补丁包?我有MSI的经验但不是MSP.我还将如何创建MSP补丁?我在互联网上搜寻,似乎无法找到任何东西.
提前致谢!
我正在学习Windows-Installer和Wix,并且有很多与它如何工作有关的问题:
我正在尝试提供一个简单的安装程序包(MSI),我希望通过取代所有以前的补丁的更新(补丁)来支持它。所以我有一个MSI V1.0.0和2个补丁V1.0.1和V1.0.2。用户应该能够只安装最新的补丁,无论系统上已经应用了哪些先前的补丁。我的项目包含 2 个功能(客户端和服务器)。补丁的基础始终是 RTM 包(HelloWorld 1.0.msi / HelloWorld 1.0.wixpdb)。
所有补丁的生成(构建)都有效,因此更新过程 1.0.0 -> 1.0.1 和 1.0.0 -> 1.0.2 可以,但是当我尝试从 1.0.1 更新到 1.0.2 时,补丁失败并显示以下错误消息:“Windows Installer 服务无法安装升级补丁,因为要升级的程序可能丢失,或者升级补丁可能会更新程序的不同版本。请验证要升级的程序是否存在于您的计算机并且您有正确的升级补丁。” 更糟糕的是,当我在已安装 1.0.2 的系统上运行 1.0.1 补丁时,该补丁会用旧版本覆盖现有安装!?我完全困惑了...
我还在网上找到了一些有关修补的博客文章,但没有任何内容适合我的替代方案。
wix 修补代码 - “patch1.wxs”:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch
AllowRemoval="yes"
Manufacturer="My Company"
MoreInfoURL="http://www.mycompany.com/"
DisplayName="HelloWorld V1.0 Patch 1"
Description="Patch intaller updating HelloWorld V1.0.x to V1.0.1"
Classification="Update">
<Media Id="32000" Cabinet="HelloWorldRTM.cab">
<PatchBaseline Id="HelloWorldRTM">
<Validate ProductId="yes" UpgradeCode="yes" ProductVersionOperator="LesserOrEqual" />
</PatchBaseline>
</Media>
<PatchFamilyRef Id="HelloWorldPatchFamily"/>
</Patch>
<Fragment>
<PatchFamily Id='HelloWorldPatchFamily' Version='1.0.1.0' Supersede='yes'>
<PropertyRef Id="ProductVersion"/>
<ComponentRef …Run Code Online (Sandbox Code Playgroud) 我负责创建多个 MSI 及其 MSP。我使用 MSI 安装了所有这些,并且我的公司名称正确显示,即在“程序和功能”下。然而,在我使用 MSP 安装了他们的更新后,我发现他们的“程序和功能”->“已安装的更新”中的“发布者”列对于某些产品来说是空白的,而其中一些产品却有我的公司名称。
看到那些空白的发布者后,我感到非常惊讶,因为我总是使用以下 Patch.wxs 作为模板并添加 componentRef:
<?xml version="1.0" encoding="UTF-8"?>
<?include ..\PatchVersion.wxi ?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch AllowRemoval="yes"
Manufacturer="MyCompany"
MoreInfoURL="http://www.mycompany.com/"
DisplayName="My Studio Patch1"
Description="My Studio Patch1"
Classification="Update Rollup"
>
<Media Id="5000" Cabinet="RTM.cab">
<PatchBaseline Id="RTM" ><Validate ProductId='no' ProductVersionOperator='LesserOrEqual'/></PatchBaseline>
</Media>
<PatchFamilyRef Id="MyStudio_1_Rollup"/>
</Patch>
<Fragment>
<PatchFamily Id='MytStudio_1_Rollup' Version='$(env.PATCH_VERSION)' Supersede='yes'>
<ComponentRef Id="..." />
</PatchFamily>
</Fragment>
</Wix>
Run Code Online (Sandbox Code Playgroud)
我认为 Patch/@Manufacturer 是出版商专栏的专栏。谁能帮我?
我有一个在InstallShield 12中构建的项目.它是一个需要多次安装的Web应用程序,并且需要修补这些安装.
我可以在WiX和InstallShield中创建变换和补丁.
当我尝试从InstallShield修补转换后的安装时,我收到错误:
"The upgrade patch cannot be installed by the Windows Installer service because the program to be upgraded may be missing, or the upgrade patch may update a different version of the program. Verify that the program to be upgraded exists on your computer and that you have the correct upgrade patch."
Run Code Online (Sandbox Code Playgroud)
在InstallShield中,我尝试通过"修补程序设计"选项卡将转换中的新产品代码添加到"目标产品代码列表"中.执行此操作会错误地创建补丁程序并显示错误:
"ERROR: At least one of the GUIDs '{ORIGINAL-GUID},{TRANSFORM-GUID}' defined in the ListOfTargetProductCodes property in the Properties table of the .pcp file is invalid."
Run Code Online (Sandbox Code Playgroud)
在WiX(3.5)中,我使用dark.exe将我的项目从InstallShield转换为WiX.我已经足够远,我可以为变换安装补丁,但我收到了警告: …
我需要使用Patch Design和Installshield 2012创建一系列可卸载的补丁.前两个补丁在卸载时工作正常.但是,第三个补丁,当且仅当已经应用补丁1和/或补丁2时才会卸载,会产生错误:
MSI (c) (48:C4) [19:02:54:135]: Font created. Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg
Error 1308.Source file not found: {pathToFile}. Verify that the file exists and that you can access it.
Run Code Online (Sandbox Code Playgroud)
关于不同的文件有26个这样的错误.文件或组件或功能没有明显的模式
注意:如果我只应用了补丁3,卸载不会产生此错误.
我在Patch Design中使用相同的选项创建了所有三个补丁.我理解的唯一明显的区别是补丁3包含比前两个更多的更改(文件更新).让我再说一遍:更多的变化.
我的问题是:
为什么只在安装了一系列补丁的情况下才会发生这种情况,而不仅仅是第三个补丁本身?
为了防止修补程序卸载尝试从构建修补程序时仅用于设计时的位置获取文件,我该怎么办?或者这可能是设计中的提取,但缓存太过重载或混淆..?
更新 - 更多信息(由Glytzhkof请求):补丁包含96个文件更改,大约是基本MSI包大小的一半.它实际上是在'Dev'分支工作之外.添加了几个新文件.有些人最初被删除了(当我发现我们真的在做补丁时,不得不把它们放回去......).如果我不再描述这种情况,它可能会冒犯你作为该领域的专业人士.
我一直在尝试销售大型升级,只需要对安装程序进行一些调整就可以使其过时需要补丁.卸载我们的产品需要参数,以便它是非交互式的(我们需要此参数在Major Upgrade场景中工作,它目前只是卸载序列的一部分).这是唯一真正的问题 - 但修复它会支付成本.然而,决定不解决这个问题.我尝试在每次迭代时"碰撞"这个问题.没有骰子.我告诉我们需要主要版本的补丁 - 所以在这里我试图让尾巴摇尾巴.
是的,补丁可以更快(让我在这里扮演魔鬼的拥护者).但实际上,30到90秒之间的差异,当这些东西自动部署时?是的,我还考虑通过调整文件成本来找到优化安装程序的方法,看看它是否能让它变得更快,但即使这样,我也确定会有另一个原因要求修补程序.
另一个更新:1308错误中提到的文件不在目标系统上 %windir%Installer\$PatchCache$\Managed\{PackedProductCodeOfMyBaseMSI??}
夹.这可能会导致1308,因为如果我从此缓存中删除更多文件,我会得到与丢失文件相对应的相同错误.问题可能是,为什么不是这个PatchCache文件夹中的所有文件?
我有一个 Wix 安装程序,它将程序安装为我已成功制作补丁以实现以下升级的版本:
1.0.0 -> 1.0.1
1.0.0 -> 1.0.2
1.0.1 -> 1.0.2
这是有效的,我每次都必须制作从 1.0.0 到目标内部版本号的新 .msp 文件。因此,根据我对补丁在幕后如何工作的理解,如果我最初有一个从 1.0.0 到 1.0.1 的补丁,那么如果我要运行,我会创建一个从 1.0.0 到 1.0.2 的新补丁新补丁,旧补丁将被卸载,新补丁将替换它。
如果我的理解是正确的,那么这意味着补丁文件的大小会随着您更改代码的次数而继续增加,所以我想要一个解决方案来解决这个问题,在某个时候我会增加次要版本,然后重新开始修补过程.
例如,我想这样做:
1.0.0 -> 1.0.12 可以用 patch1.msp 处理。然后我创建了一个 patch2.msp,它将开始创建基于 1.0.12 版本的补丁。示例升级路径可能如下所示:
1.0.0 -> patch1.msp -> 1.0.12 -> patch2.msp -> 1.1.0 -> patch3.msp 1.1.0 -> 1.1.x
有什么办法可以做到这一点吗?或者我是否需要使用 .msi 文件重新安装并继续从那里修补?
我知道超级账本网络中的每个实体都需要一个身份。此身份由证书颁发机构提供。本地和频道 MSP 将此身份与组织映射,并为该身份赋予角色。
几个问题:
msi-patch ×8
wix ×5
msp ×3
patch ×3
blockchain ×1
guid ×1
installation ×1
package ×1
windows ×1