Articles of wix

Wix – 卸载不同的产品

我们的主要安装者调用另一个产品(产品B)安装程序 这将在“”添加删除程序“窗口中创build两个条目。 当我卸载主要产品时,产品B未从机器上移除。 卸载主产品时,是否可以卸载产品B?

我想检测是否已经在用户的系统上使用WIX安装了特定的Microsoft修补程序。 什么是最简单的方法来实现呢?

我一直在读这个,但我开始怀疑这是越来越多的工作。 我以为我将能够简单地扫描registry中的问题的修补程序。 在尝试这样做的过程中,我了解到修补程序ID不再存储在registry中。 相反,MSFT鼓励人们通过他们的Windows Update API。 显然,WIX并不支持Windows Update API。 这是否意味着我需要使用自定义操作,与Windows Update API交互,将结果返回给WIX,然后使用该结果控制代码stream?

在WiX中使用防火墙扩展

我试图写一个使用防火墙扩展到WiX的WiX脚本,它似乎没有find扩展DLL(我认为)。 我看到的错误是这样的: File元素包含一个未处理的扩展元素“fire:FirewallException”。 请确保提供了“http://schemas.microsoft.com/wix/FirenetExtension”命名空间中元素的扩展名。 而我的WiX源码的相关部分是这样的: <?xml version =“1.0”encoding =“windows-1252”?> <Wix xmlns =“http://schemas.microsoft.com/wix/2006/wi” 的xmlns:火= “http://schemas.microsoft.com/wix/FirewallExtension”> <Component Id =“Firewall”Guid =“7278f07d-de6f-497f-9267-d5feb5216a5c”Directory =“NotUsed”> <File KeyPath =“yes”Source =“C:\ Program Files \ Java \ jdk1.6.0_32 \ bin \ java.exe”> <fire:FirewallException Id =“FWX1”Name =“My Program”Port =“80”Protocol =“tcp”/> 如果我尝试注册与regsrv32 WixFirewallExtension.dll文件我得到此错误: 加载了C:\ Program Files(x86)\ Windows Installer XML v3.5 \ bin \ WixFirewallExtension.dll模块,但未find入口点DllRegisterServer。 确保C:\ Program […]

防止Wix安装我的产品中的所有function?

安装MSP补丁后,Windows Installer决定安装初始MSI中提供的所有function。 我如何防止MSP补丁安装所有可用function? function请求显示如下: Installed: Absent Request: local Action : local 为什么要求安装全部?

Windows安装程序在Win 10上失败,但不是Win 7在使用WIX

我最近被分配到更新我们的项目安装程序在Windows 10上运行,我在如何让它工作有点损失。 我没有做安装程序的经验,并且正在不断熟悉我自己的stream程,以及我们的项目如何处理它。 到目前为止,安装程序可以正常运行在我们的Windows 7虚拟机上,但是在Windows 10虚拟机上运行时,安装程​​序会在最后失败,并开始回滚。 我已经得到它吐出一些日志文件,我正在挖掘他们,但是相当损失。 我追查了这一点: MSI (s) (B0:F4) [17:39:02:883]: Note: 1: 1708 MSI (s) (B0:F4) [17:39:02:883]: Note: 1: 2205 2: 3: Error MSI (s) (B0:F4) [17:39:02:883]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1708 MSI (s) (B0:F4) [17:39:02:883]: Note: 1: 2205 2: 3: Error MSI […]

WiX入门build议?

我find了一个WiX的教程 ,但它真的很啰嗦,似乎比我想要的更多。 什么是快速入门的最佳方式? 我的最终目标并不复杂:安装ISAPIfilter的安装程序。

如何从我的安装程序中设置此registry值

在我的.msi安装程序包中,我有一个C#自定义操作,将registry值写入: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 自定义操作是推迟的,因为我需要提升一些我试图安装的密钥的权限。 但是,因为它被延迟,所以此操作将写入系统帐户的当前用户,因为它是以提升的权限启动的,所以我的registry值实际上被写入: HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run 如何让安装程序将此registry值写入启动安装软件包的用户的registry中而不是系统帐户的registry中?

使用WiX检测.NET Framework 4.5.1

我正在使用WiX 3.8在我的解决scheme中创build一个安装程序项目。 作为此安装的一部分,我创build了一些启动条件,其中之一是检查是否安装了Microsoft .NET Framework 4.5.1。 要做到这一点,我想使用WixNetFxExtension库中的一些属性,似乎适用于较旧版本的.NET框架。 有一个如何在http://wixtoolset.org/documentation/manual/v3/howtos/redistributables_and_install_checks/check_for_dotnet.html上这样做的例子。这不适用于.NET 4.5.1,但是因为没有NETFRAMEWORK451属性检查。 查看NetFx451.wxs模块的源代码( http://wix.codeplex.com/SourceControl/latest#src/ext/NetFxExtension/wixlib/NetFx451.wxs ),似乎没有单独的属性可用于.NET 4.5.1,而是它也使用相同的NETFRAMEWORK45。 据我所知,v4.5.1是v4.5的就地升级,所以它使用相同的registry键(我认为)。 无论如何,在这个模块中,他们只需检查从NETFRAMEWORK45返回的版本号如下: DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx451MinRelease)" 所以我认为我可以写下如下的条件: <PropertyRef Id="NETFRAMEWORK45" /> <Condition Message="The .NET Framework 4.5.1 was not found. Stopping installation."> <![CDATA[Installed OR (NETFRAMEWORK45 >= 378675)]]> </Condition> 但是,这在我知道安装了.NET Framework 4.5.1的计算机上返回了错误消息。 所以我创build了这样的条件,所以我只能看到从registry中返回的版本号: <PropertyRef Id="NETFRAMEWORK45" /> <Condition Message ="[NETFRAMEWORK45]">0</Condition> 这将显示一个消息框,其中包含以下文本:#378758所以我知道registry中的值是正确的。 所以我有点困惑为什么我的情况失败了。 有没有什么明显的我在这里失踪,还是有其他的方式来比较条件元素中的值? 这里是修复包括由PhilDWbuild议的哈希符号: <PropertyRef Id="NETFRAMEWORK45" /> […]

使用WiX生成和安装Typelib

在询问Visual Studio如何注册一个COM库之后 ,很明显,VS为COM注册做了两件事情: 注册COM库 创build并注册一个types库 Visual Studio似乎使用regasm.exe执行此注册。 对于第一部分(直接COM注册)使用tallow或heat (WiX 2.0或WiX 3.0)似乎得到正确的所有基本COM注册信息。 然而,牛油/热似乎没有做的是build立一个types库安装。 使用WiX安装程序和regasm.exe创build自定义操作是可能的,但是对于基于Microsoft安装程序的安装程序,调用自定义操作不是最佳实践。 经过进一步的研究,看起来像msi有能力在安装时生成types库。 实际上,WiX似乎对它有直接的支持! 在一个文件元素中,你可以添加一个Typelib元素。 实际上, wix上的一篇文章有一个用Interface元素填充TypeLib元素的例子。 看起来界面元素至less有两个必需的属性: ID 名称 Larry Osterman谈到接口的其他部分,一般需要注册TypeLib ,而这个接口条目似乎负责单独的部分。 拉里说,我们需要指定ProxyStubClassId32为“{00020424-0000-0000-C000-000000000046}”,所以我们可以很容易地添加。 从哪里去,什么填写各种界面元素让我难住。 我已经提前将TypeLib元素添加到我的wix文件,并成功编译。 对于如何设置界面元素,我有点无知。 我们需要做些什么来正确地填写TypeLib元素,以及我可以使用哪些应用程序或工具来获取它? wcoenen下面的答案看起来很有希望…我会试试看。 更新:发表我的最终解决scheme作为答案。

WIX安装程序:数字签名Bootstapper exe未能安装

我无法使用数字签名的WIX安装程序bootstrapped exe继续安装。 以下是突出显示问题的日志摘录。 [39B8:26D4] [2017-09-04T20:03:31] i371:更新registry项:SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall {c6dca553-993e-473c-be4b-8ffa184cd19f},resume:Active,restart initiated:不,禁用简历:不 [3904:3A84] [2017-09-04T20:03:31] i336:获取容器:WixAttachedContainer,复制来自:F:\ Digital Signature \ MyApp.exe [3904:3A84] [2017-09-04T20:03:31] i000:将stringvariables'WixBundleLastUsedSource'设置为'F:\ Digital Signature' [3904:19F4] [2017-09-04T20:03:31] e000:错误0x80070001:无法从容器中提取所有文件,erf:1:2:0 [3904:3A84] [2017-09-04T20:03:31] e000:错误0x80070001:无法等待操作完成。 [3904:3A84] [2017-09-04T20:03:31] e000:错误0x80070001:无法打开容器。 [3904:3A84] [2017-09-04T20:03:31] e000:错误0x80070001:无法打开容器:WixAttachedContainer。 [3904:3A84] [2017-09-04T20:03:31] e312:无法从容器中提取有效载荷:WixAttachedContainer到工作path:C:\ Users \ Admin \ AppData \ Local \ Temp {18826196-247C-4057-B849 -948AF1A2A7E5} \ […]