Articles of wix

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} \ […]

如何从启用了“以pipe理员身份运行”的基于WiX的安装程序安装桌面快捷方式(到batch file)?

我正在从基于WiX的安装程序安装桌面快捷方式(到batch file) – 如何使用“以pipe理员身份运行”设置启用自动configuration此快捷方式? 目标操作系统是Windows Server 2008 R2,并且安装程序正在升级。 更新: 感谢@Anders提供的链接,我能够得到这个工作。 我需要在C#CustomAction中这样做,所以这里是C#版本的代码: namespace CustomAction1 { public class CustomAction1 { public bool MakeShortcutElevated(string file_) { if (!System.IO.File.Exists(file_)) { return false; } IPersistFile pf = new ShellLink() as IPersistFile; if (pf == null) { return false; } pf.Load(file_, 2 /* STGM_READWRITE */); IShellLinkDataList sldl = pf as IShellLinkDataList; […]

INSTALLLEVEL不安装function

我有两个function: <Feature Id='BaseProductFeatures' Title='Feature 1' Level='1'> <ComponentRef Id='WebAppVDirComponent'/> <ComponentRef Id='someVDirComponent'/> <ComponentRef Id='anotherWCFVDirComponent'/> <ComponentGroupRef Id='group_IMPORTFOLDERFILES'/> <ComponentGroupRef Id='group_WINSERVERFILES'/> </Feature> <Feature Id='SMSGWFeature' Title='Feature 2' Level='2'> <ComponentGroupRef Id='group_SMSGWWEBAPPFILES'/> </Feature> 在安装之前,我使用自定义操作将INSTALLLEVEL更改为2: [CustomAction] public static ActionResult ChangeInstallLevel(Session session) { session["INSTALLLEVEL"] = "2"; return ActionResult.Success; } 值被设置,但function2(SMSGWFeature)没有得到安装。 这是为什么? 我没有看到ComponentGroupRef中的任何组件,group_SMSGWWEBAPPFILES,安装在我期望看到它们的目录中。但是,如果将function2级别(SMSGWFeature)设置为1,则安装程序将工作。

定制MSI安装程序

根据http://docs.oracle.com/javafx/2/deployment/self-contained-packaging.htm : 要将自定义UI添加到MSI包中,可以使用6.2.4中的技术自定义JavaFX Packager使用的WiX模板文件。 请参阅WiX文档了解更多详情。 假设我想出如何创build一个自定义模板文件,我该如何将它传递到JavaFX Maven插件?

在WIX中禁用WIN64DUALFOLDERSreplace

我有一个链接2 msi的设置 安装我的产品的x86 / x64 MSI。 一个部署第三方工具包的x86 MSI 我希望第二个MSI使用相同的安装目录,以便MSI 1将用户select的目录存储在MSI 2随后读取并用作其目标的registry中。 精细和花花公子 – 如果我安装微星1到C:\testing\没有问题 – 微星2拿起它,并把工具包放入该文件夹。 当我安装到c:\ Program Files文件时,然后MSI 2得到了一些聪明的答案,并决定我必须指出C:\ Program Files(x86),并把工具放在那里 – 有点混乱。 它logging下来的时候: Action start 16:53:59: AppSearch. MSI (c) (2C:44) [16:53:59:521]: Note: 1: 2262 2: Signature 3: -2147287038 MSI (c) (2C:44) [16:53:59:521]: WIN64DUALFOLDERS: 'C:\Program Files (x86)\' will substitute 17 characters in 'C:\Program Files\Manufacturer\Product' […]

在用户提示“手动closures”之前卸载WiX呼叫应用程序

我有一个安装程序安装了一个应用程序,并在安装完成后立即启动。 这适用于我。 但是现在我想在卸载应用程序时停止该应用程序,我不希望提示用户手动closures应用程序。 这应该是全自动的。 我需要使用自定义操作来执行此操作,WM_CLOSE消息在我的方法中不起作用(实际上,我试了几次)。 我认为这不是那么困难,但是我没有得到它的工作。 我到目前为止做了什么: 我定义了一个CustomAction: <CustomAction Id="CloseTrayApp" ExeCommand="-exit" FileKey="TrayApp" Execute="immediate" Return="asyncNoWait" /> 并称之为: <InstallExecuteSequence> … <Custom Action="CloseTrayApp" Before="InstallValidate" /> … </InstallExecuteSequence> 但是这不起作用。 我想我正在调度我的自定义操作错误,但我无法弄清楚正确的时间来做到这一点。 是否有任何build议关于自定义操作的时间/地点? 我很不确定是否 Before="InstallValidate" 是正确的地方做到这一点。