Tag: wix

通过任意深度的XPath选择XML节点

有了XML文档,我希望得到第一个具有特定名称的节点,无论它包含哪个嵌套深度。 我尝试了几件事没有成功: var node1 = doc.SelectSingleNode(@”//Shortcut”); var node2 = doc.SelectSingleNode(@”/*/Shortcut”); var node3 = doc.SelectSingleNode(@”//*/Shortcut”); var node4 = doc.SelectSingleNode(@”*/Shortcut”); … 每次调用都会产生一个NULL节点。 我认为它应该是一些简单的XPath语法。 你能帮助我吗? (如果这很重要:XML文档是WiX项目的输入文件,因此可能涉及一些命名空间问题?!?)。 编辑 我也尝试了以下内容: var nsm = new XmlNamespaceManager(doc.NameTable); nsm.AddNamespace(string.Empty, @”http://schemas.microsoft.com/wix/2006/wi”); nsm.AddNamespace(@”ns”, @”http://schemas.microsoft.com/wix/2006/wi”); 和…一起: var node1 = doc.SelectSingleNode(@”//Shortcut”, nsm); var node2 = doc.SelectSingleNode(@”/*/Shortcut”, nsm); var node3 = doc.SelectSingleNode(@”//*/Shortcut”, nsm); var node4 = doc.SelectSingleNode(@”*/Shortcut”, nsm); […]

Wix自定义操作设置值从CA到wix

在延迟(使用impoersonate = no)将值发送到WIX到CA,我使用的是set属性和值 使用session.CustomActionData [“key”]收集CA中的数据; 有没有办法将数据从CA发送回WIX 我立即使用, session[“RESTART”] = “true” …如何在延迟CA中实现此目的

WIX和C#中的“SystemFolder”

我用WiX创建的安装程序使用SystemFolder变量安装DLL,并将C#app安装到另一个文件夹中。 我想直接从应用程序中引用DLL。 我是否需要查找注册表项以查找SystemFolder位置?

使用WiX DTF获取组件代码

我一直试图找到一种方法来获得给定产品代码的Windows Installer组件代码。 (我实际上是尝试使用不包含组件代码的快捷方式获取已安装产品的组件路径,但这是一个较长的故事 。) 我遇到过WiX DTF(Microsoft.Deployment.WindowsInstaller)程序集,这看起来像是一个很好的方法来完成MSI的工作。 当我编写以下代码时,我非常有希望: Session product = Installer.OpenProduct(productCode); ComponentInfoCollection components = product.Components; ComponentInfo component = components.FirstOrDefault(); 我希望我可以从ComponentInfo获取组件代码。 不幸的是,我认为没办法做到这一点。 是否可以使用WiX DTF类获取组件代码? (或任何其他方式来……)

链接和引导多个MSI并将现有的MSIfunction集GUI合并到一个自定义GUI中

关于Bootstrapper和Chaining的问题可能以前曾被问过。 我想问一些类似和不同的东西。 我的要求是将CHAIN 3 installshield msi into a single one , expose the feature selection GUI of 2 of the MSIs为单个特征集,以便当用户选择顶层的任何特征时,该选择作为参数传递(s)基础相应的msi和安装继续。 用户可以再次启动此exe / setup,他可以通过以常规方式选择它们来删除/修改function。 最后,当安装结束时the package should generate a custom XML file ,由内部工具根据上面用户选择的function使用。 因此,标准和自定义行为混合在一起。 I have no clue about the world of installers 。 可能有人可以建议如何以最小的努力实现这一点或重做correct approach ? 。 我应该in C#/Winforms (or WPF) ?编写这样的工具in C#/Winforms (or […]

在WPF中创建自定义安装程序

我正在寻找一个基于Metro风格的WPF安装程序。 原因是我想要UI组件,转换等之间的动画。 所以问题是,解决这个问题的最佳方法是什么,我应该只是与Windows安装程序api接口还是以某种方式与Wix接口? 它需要.NET框架不会成为问题,因为它还需要运行正在安装的应用程序。 所以我只需要一个引导程序来检查或安装。 我读过C#创建自己的安装程序? 但是你真的能从WIX定制GUI的外观和感觉吗? 你可以使用Wix作为一种API吗?

如何使用Wix安装.NET Framework的可再发行组件包?

我有一个常规任务:在我的产品设置期间安装.NET Framework 3.5。 我做了以下事情: 我创建了一个自定义动作X. 自定义操作X通过Process.Start()启动可执行文件Y 可执行文件Y终止msiexec进程并运行.NET Framework安装程序包 这里出现了一些问题:.NET Framework安装程序说Windows Installer Service无法访问并要求终止所有其他安装! 我认为,它的原因是Process.Kill()方法终止进程不正确。 当我通过Kill()终止msiexec进程时,msiserver服务不可停止,但如果我通过单击取消按钮完成设置,则msiserver服务将变为STOPPABLE。 我该如何解决这个问题?

如何在卸载时通过Wix删除生成的文件夹和文件?

安装后,我在文件夹C:\Program Files (x86)有以下文件夹结构: generated的文件夹的路径是: C:\Program Files (x86)\CompanyName\AppName\generated generated的文件夹包含子文件夹和文件,它们将在运行时通过C#代码由应用程序创建: var lPathToDir = Path.Combine(lFileService.GetFilePath, pSamAccountName); if (!Directory.Exists(lPathToDir)) { Directory.CreateDirectory(lPathToDir); } 变量lPathToDir可以具有以下值: C:\Program Files (x86)\CompanyName\AppName\generated\user1 // or C:\Program Files (x86)\CompanyName\AppName\generated\user2 然后它看起来像: 我的问题:卸载后,这些子文件夹user1 , user2将不会被删除。 我使用以下Wix声明: 卸载后: 为什么这些文件夹会保留,如何从安装文件夹中删除这些生成的文件夹? 当我通过C#创建这些文件夹时,我是否需要设置任何权限?

安装和注册shell扩展上下文菜单来自wix安装程序

我创建了锐利的shell扩展,用于使用.Net自定义Windows的右键菜单上下文。 该项目的结果是.dll。 我尝试使用服务器管理器工具安装和注册它,该工具与尖锐的shell工具一起存在并且它成功运行。 现在我需要从我的wix项目安装并注册这个shell扩展,因为我需要用户安装我的应用程序并在安装后获得自定义窗口的右键单击上下文菜单。 我需要详细的步骤,因为我是使用Wix安装程序的新手。

MsiGetShortcutTarget MSI LNK文件不返回任何组件ID

我试图以编程方式找到为给定的MSI lnk文件(通告的快捷方式)运行的exe文件。 我使用了类似于答案中显示的方法有没有办法解决.lnk目标适用于最终在c:\ windows \ installer中的链接? 。 这种方法适用于大多数MSI lnk文件。 不幸的是,有少数lnk文件运行正常,但MsiGetShortcutTarget不返回任何组件ID。 因此,对MsiGetComponentPath的后续调用将返回InvalidArg。 这是我正在使用的代码(取自此处 ): public const int MaxFeatureLength = 38; public const int MaxGuidLength = 38; public const int MaxPathLength = 1024; public static string ParseShortcut(string shortcutFilename) { StringBuilder product = new StringBuilder(MaxGuidLength + 1); StringBuilder feature = new StringBuilder(MaxFeatureLength + 1); StringBuilder component = new […]