首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在运行时(安装时)从wix源代码中获取MSI文件所在的路径

在运行时(安装时)从Wix源代码中获取MSI文件所在的路径,可以通过以下步骤实现:

  1. 在Wix源代码中定义一个自定义动作(Custom Action),用于获取MSI文件所在的路径。可以使用C#或VB.NET编写自定义动作的代码。
  2. 在Wix源代码中添加一个Custom元素,指定自定义动作的名称和位置。例如:
代码语言:txt
复制
<CustomAction Id="GetMSIPath" BinaryKey="CustomActionBinary" DllEntry="GetMSIPath" Execute="immediate" Return="check" />

<Binary Id="CustomActionBinary" SourceFile="CustomAction.dll" />

其中,CustomActionBinary是自定义动作的二进制文件,GetMSIPath是自定义动作的入口点。

  1. 在Wix源代码中的安装序列(InstallExecuteSequence或InstallUISequence)中添加一个调用自定义动作的操作。例如:
代码语言:txt
复制
<InstallExecuteSequence>
  <Custom Action="GetMSIPath" Before="InstallInitialize" />
</InstallExecuteSequence>

这将在安装初始化之前调用自定义动作。

  1. 在自定义动作的代码中,使用Session对象获取MSI文件所在的路径。例如,使用C#编写的自定义动作代码如下:
代码语言:txt
复制
using System;
using Microsoft.Deployment.WindowsInstaller;

namespace CustomAction
{
    public class CustomActions
    {
        [CustomAction]
        public static ActionResult GetMSIPath(Session session)
        {
            string msiPath = session["OriginalDatabase"];
            session["MSIPath"] = msiPath;
            return ActionResult.Success;
        }
    }
}

在上述代码中,通过Session对象的"OriginalDatabase"属性获取MSI文件的路径,并将其存储在"MSIPath"属性中。

  1. 在Wix源代码中添加一个属性(Property),用于存储获取到的MSI文件路径。例如:
代码语言:txt
复制
<Property Id="MSIPath" />
  1. 在Wix源代码中的相关位置使用属性"MSIPath"来引用获取到的MSI文件路径。例如:
代码语言:txt
复制
<CustomActionRef Id="GetMSIPath" />

<Component Directory="INSTALLFOLDER" Guid="PUT-GUID-HERE">
  <File Source="$(var.MyApp.TargetPath)" />
  <RegistryValue Root="HKCU" Key="Software\MyApp" Name="Installed" Type="integer" Value="1" KeyPath="yes" />
  <Shortcut Id="startmenuMyApp" Directory="ProgramMenuFolder" Name="MyApp" WorkingDirectory="INSTALLFOLDER" Icon="MyApp.exe" IconIndex="0" Advertise="yes" />
  <RemoveFolder Id="INSTALLFOLDER" On="uninstall" />
  <RemoveRegistryKey Root="HKCU" Key="Software\MyApp" Action="removeOnUninstall" />
  <Condition><![CDATA[MSIPath <> ""]]></Condition>
</Component>

在上述代码中,通过条件"MSIPath <> """来判断是否成功获取到了MSI文件路径,如果成功获取到,则执行相关操作。

请注意,以上步骤仅为示例,实际实现可能需要根据具体情况进行调整。此外,推荐的腾讯云相关产品和产品介绍链接地址需要根据具体需求和场景进行选择,可以参考腾讯云的官方文档或咨询腾讯云的技术支持团队获取更详细的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

用 WiX 制作安装包:为 WiX 制作的 msi 安装包添加 .NET Framework 环境检查

本文是 WiX Toolset 安装包制作入门教程 系列中的一篇,可前往阅读完整教程。 前面我们制作完成了一个简单的 msi 安装包。...本文基于前一篇文章已经建好的项目继续: 用 WiX 制作安装包:创建一个简单的 msi 安装包 添加 WixNetFxExtension 引用 在 msi 安装包项目的“Reference”上右键,“添加引用...如下是 Walterlv.Installer.Msi.wixproj 项目文件中对 WixNetFxExtension 的引用代码: 1 2 3 4<WixExtension Include="WixNetFxExtension...小提示 MSI 包只能判断 .NET Framework 是否存在,无法在不存在时执行 .NET Framework 的安装操作。...附源代码 附上必要的源码,避免你在阅读教程时因模板文件的版本差异造成一些意料之外的问题。 Product.wxs // 除了本文所说的改动外,本文件的其他内容均保持模板文件的原始模样。

1.2K30
  • 用 WiX 制作安装包:为 WiX 制作的 exe 安装包添加 .NET Framework 前置的安装步骤

    元素负责定义如何安装一个产品,而 元素负责定义如何安装一组包。...与之前添加引用一样,虽然我们选的路径是绝对路径,但实际上写入到 wixproj 文件中的是一个属性引用,所以不会存在团队协作和跨版本迁移问题。...根据 WiX 3 已开源的源码我们可以得知,本地安装 .NET Framework 时选取的目录为 redist\。...每个 .NET Framework 版本都有自己对应的文件名称,如果还想继续用 WixNetFxExtension.dll 中提供的安装 .NET Framework 的功能,那么从官网下载文件后就不能改名字...附源代码 附上必要的源码,避免你在阅读教程时因模板文件的版本差异造成一些意料之外的问题。 Bundle.wxs // 除了本文所说的改动外,本文件的其他内容均保持模板文件的原始模样。

    85510

    WiX Toolset 安装包制作入门教程(目录篇)

    WiX 全称为 Windows Installer XML,是使用 XML 文件创建 Windows 安装程序的一组工具集。它开源且完全免费。...本系列教程所需的所有源代码都已在 GitHub 上开源,你可以克隆下来学习和试验,也可以选择性忽略。...你可以挑自己想做的安装包类型,然后直接在这个类别里面从第一篇读至最后一篇。...解决方案 使用 WiX 创建一个简单的 msi 安装包 为 WiX 制作的 msi 安装包添加 .NET Framework 环境检查 使用 WiX 创建一个简单的 exe 安装包 为 WiX 制作的...创建最简单的安装包过程中可能出现的问题和解决方案汇总 如何查看用 WiX 制作的安装包的日志 如何调试用 WiX 制作的安装包 具体问题 用 WiX 制作安装包:设置的 .NET Framework

    3.3K60

    用 WiX 制作安装包:创建一个简单的 msi 安装包

    本文是 WiX Toolset 安装包制作入门教程 系列中的一篇,可前往阅读完整教程。 本文将带大家制作一个简单的 msi 安装包。...本文操作基于系列教程中的一个最简项目,见 准备一个用于学习 WiX 安装包制作的 Visual Studio 解决方案。...注意,选择的模板要注意这些要点: 图标上标记了“wix”,标签上标记了“WiX” 模板简介中说明这是在创建“MSI”文件 引用目标项目 在 WiX MSI 项目(在本教程中,我取的名字为 Walterlv.Installer.Msi.... -->”: 把周围的“Component”解除注释(因为我们真的要加打包的文件了); 删除“TODO”注释(本教程会继续教你如何完成打包,不需要 TODO 提示了); 在“Component”块中添加一行...另外,觉得不错可以提交一下代码,方便后续章节的学习。 附源代码 附上必要的源码,避免你在阅读教程时因模板文件的版本差异造成一些意料之外的问题。

    2K60

    用 WiX 制作安装包:创建一个简单的 exe 安装包

    本文开始前,请确保你已经可以生成一个最简单的 msi 安装包了: 用 WiX 制作安装包:创建一个简单的 msi 安装包 由于 exe 格式的安装包自己带了 UI,所以 msi 中的 UI 怎么样都是可以不用管的...注意,选择的模板要注意这些要点: 图标上标记了“wix”,标签上标记了“WiX” 模板简介中说明这是在创建“EXE”文件 创建完后,记得去项目属性里改一下输出的文件名。...编辑 Bundle.wxs 文件 在 Bundle.wxs 文件中,找到放 MSI 文件的注释处,将其替换成我们想安装的 MSI 文件。 1 2 3 4 5 6 -- MSI 包会被嵌入到最终生成的 exe 文件中(反之则会松散地放到外部文件中)。...▲ 卸载包 另外,觉得不错可以提交一下代码,方便后续章节的学习。 附源代码 附上必要的源码,避免你在阅读教程时因模板文件的版本差异造成一些意料之外的问题。

    1.5K20

    使用WiX制作简单MSI安装程序

    是一般使用的工具是两个:一个Visual Studio插件,在WiX的安装包里面附带,另一个就是WiXEdit,WixEdit是编辑的XMLXML的源代码的图形化工具箱.WixEdit会让你创造体制条件与...MSI和MSM测试wix工具箱.它提供了直观的、轻松的对话方式编辑wix文件来源。...该包介绍了作为部分 .msi 摘要流提供的属性,在资源管理器中将鼠标停留在 .msi 上方时就会看到这些属性。 查看 WiX 帮助文件文档中 Package 元素的其他可用属性。...平台 字符串 此程序包支持的平台列表。 对于许多安装程序(例如本示例),最好在 MSI 中将所有安装源文件打包在一起。...用户直接从许可协议界面进入feature customization界面。当默认情况下安装全部特性时,WixUI_FeatureTree比WixUI_Mondo更合适。

    3.7K90

    用Wix制作VSPackage的安装包

    做完VSPackage后,如何打包发布它?其实有很多种打包的方式,在这里我只介绍在VS2008下用Wix制作VSPackage的安装程序。...为了演示安装后的效果,别忘了在向导中给它添加一个Menu Command。 创建Wix项目 新建一个项目,项目类型选择Wix-》Wix Project,如下图: ?...regpkg /wixfile:VSPackage1.wxs /codebase "\VSPackage1.dll" 其中,代表Package程序集所在目录的全路径.../nosetupvstemplates时耗费的时间比较久,但安装程序没有任何提示 要想变成中文,需要下载中文的wxl文件,并作为嵌入的资源把它添加到VSPackageInstaller项目中...然后修改Product.wxs文件,把Product节点的Language从1033改为2052,并添加一个CodePage=“936”的属性。

    2.5K20

    C# Windows桌面应用打包指南

    在弹出的窗口中,选择发布位置,可以是本地文件夹、网络路径或者 FTP 服务器。配置应用程序的更新方式,如是否启用自动更新。...选择 “安装项目” 类型,配置项目名称和路径。在安装项目中添加需要打包的文件(例如应用程序文件、依赖库等)。配置安装包的属性(如版本号、安装路径等)。...生成安装包,Visual Studio 会创建 .msi 文件。MSI 安装包的优势:支持自定义安装步骤,例如用户协议、组件选择等。能处理复杂的安装逻辑和注册表操作。支持大多数企业环境的分发。...使用 WiX Toolset 打包的步骤:安装 WiX Toolset。在 Visual Studio 中创建一个新的 WiX 项目。编写 XML 文件,定义需要打包的组件和安装逻辑。...Inno Setup 打包步骤:下载并安装 Inno Setup。使用其内置的脚本编辑器,编写安装脚本,定义要打包的文件、安装路径等。编译脚本,生成安装包。NSIS 打包步骤:下载并安装 NSIS。

    34832

    使用javapackager打包各系统安装包

    版本以下的,不要下载6及其6以上的版本,否则无法打包成功) wix(打包成msi必须下载,没有下载javapackager会提示缺少wix) JDK8 用法 javapackager command...-srcdir dir:要打包的文件的基本目录。就是我们之前包含jar文件的文件夹(注意这里不是java源代码目录) -srcfiles files:-srcdir选项指定的目录中的文件列表。...classPath=path :相对于组装的应用程序目录的类路径。javapackager该路径通常从 JAR 文件清单中提取,如果您使用其他命令,则不需要设置。...指定的节点在运行时作为选项传递给应用程序-Dapp.preferences.id。此参数与userJVMOptions参数一起使用。...runtime=path:运行时=路径要包含在包中的 JRE 或 JDK 的位置。提供 JDK 或 JRE 的根文件夹的文件路径。

    4.3K20

    WiX 安装包制作最佳实践:Id、UpgradeCode 应该怎么设置?

    在 WiX 安装包制作时,Product.wxs 文件中的 Product 标签中存在一些属性,这些属性应该如何设置才是比较合适的呢?...本文是对我另一篇入门教程博客的一点补充: 用 WiX 制作安装包:创建一个简单的 msi 安装包 Id、Version Id:产品 Id。 Version:产品版本。...如果保持 Product.wxs 文件的 Product 元素的 Id 属性为 *,那么每次构建一个 MSI 文件都会视为一次“主要升级”(MajorUpgrade)。...在没有配置升级策略的情况下,如果有两个不同的 MSI 包设置了相同的 Id 和 Version,那么当安装了其中一个之后,另一个将无法安装。...双击 msi 文件时,Windows Installer 将弹出错误框: UpgradeCode 对于同一个产品,无论其产品 Id、Version 如何变化,都应该保持 UpgradeCode 不变,

    62880

    Wix 安装部署(五) Bootstrapper 捆绑安装

    原文: Wix 安装部署(五) Bootstrapper 捆绑安装 Wix的xml配置确实很费劲,忍不住有点像吐槽一下,前四篇完成的功能在Windows Installer中通过配置能很快的弄出来...在Windows Installer中分别在Redistributables和Registry中设置就行了,特别是注册,可以直接把目录从你自己的电脑上拖过来。...但今天要讲的,就是wix中的Bootstrapper 项目,制作一个捆绑安装程序,也是Windows Installer中没有的。将多个需要安装的文件,按照顺序一次性装完。...一、Bootstrapper 初识 起因:wix的Setup 项目是无法自动安装.net framework的,必须要通过bootstrapper 应用程序去驱动wix中的Burn引擎来安装...二、如何捆绑 目的:检测.net版本,没有匹配的就自动安装,然后再安装我们自己的工程。

    1.3K20

    渗透技巧——从Admin权限切换到System权限

    0x00 前言 在渗透测试中,某些情况下需要用到system权限,例如操作注册表HKEY_LOCAL_MACHINE\SAM\SAM 恰巧最近看到了一篇文章介绍了几种获得system权限的方法,于是决定结合自己的经验对这方面的技巧做系统整理...《渗透测试中的msiexec》介绍过利用Advanced Installer制作msi文件的方法,这里不再赘述 本节对XPN提到的方法做复现,使用wix3制作msi文件 wix3下载地址: https:...//github.com/wixtoolset/wix3 msigen.wix的代码可参考如下地址: https://gist.github.com/xpn/d1ef20dfd266053227d3e992ae84c64e...,使用torch.exe将msigen.wixobj编译成msigen.msi文件会报错,如下图 使用light.exe能够成功生成msigen.msi,如下图 虽然报错,但不影响文件的生成和功能的执行...0x05 小结 本文对常用的System权限获取方法做了整理,最后感谢xpn的博客和他的开源代码。

    1.8K70

    Jpackage-制作无需预装Java环境的Jar可执行程序

    这篇文章我们会先学习如何将 Java 程序打包成一个可执行的 Java JAR 文件。然后演示如何使用这个 JAR 文件生成 Windows、Linux、MacOS 上的可执行程序。...一个可执行的 jar 文件需要包含一个 main 类作为程序的入口,并在 MANIFEST.MF 文件中指定 但是为了运行 jar 格式的应用程序,必须有一个Java 运行时环境(JRE)。...,最后是要添加到 jar 包中的文件列表。...Winx3.14 下载:https://github.com/wixtoolset/wix3/releases/tag/wix314rtm 由于 hello.jar 是一个命令行程序,没有 UI界面,因此打包时使用...• --win-console:使用控制台窗口启动我们的应用程序 • --win-shortcut : 在 Windows 开始菜单中创建快捷方式文件 • --win-dir-chooser:让最终用户指定自定义目录来安装可执行文件

    70710

    Python AI小项目打包通关:Pyinstaller和Wix都用上了

    : 参考了文章: 这篇文章真是一盏明灯,没有走一步多余的弯路 Pyinstaller如何打包多个资源文件(超详细教程) 文章中的这个要替换一下,文章是用的中文引号,通过不了。...报错解决 关键获取cv2的地址:  文件中建议用下面这条命令生成exe, pyinstaller main.py -F --paths="D:\ProgramData\Anaconda3\lib\site-packages...Step3: 打包成一个一键安装的程序,第一感觉就想到了Wix,然后找到了两篇文章 把Python代码打包成电脑软件和手机App [Wix] 安装部署——起步 想着程序是用pyinstaller打包成exe...的要么还是用第一篇文章中描述的方式先试试 稍微试了一下,后来发现文章中要下载Git,然后例子是打包的.py文件,和我生成的exe有点区别 果断放弃,有点费时。...引用地址,还有需要的桌面快捷方式 build之后,生成了msi安装包和一个.cab文件  双击.cab文件之后发现,原来之前的exe藏在这里面了 双击msi一键安装之后,发现3件套全了,桌面快捷方式

    1K30

    用 WiX 制作安装包:制作 WPF 安装包界面(入门篇)

    本文是 WiX Toolset 安装包制作入门教程 系列中的一篇,可前往阅读完整教程。...注意,WPF 项目并不像 WiX 项目一样针对引用的绝对路径进行了属性引用处理,因此我们需要自己来做这件事。...双击 WPF UI 的项目名称以修改项目文件,将绝对路径改成环境变量引用 $(WIX)(注意这里引用的是环境变量,而不是之前的 MSBuild 属性,虽然写法一模一样): 1 2 3 4 5 6 <ItemGroup...如果发现无法运行,请前往此篇文章调试和解决问题: 使用 WiX 创建最简单的安装包过程中可能出现的问题和解决方案汇总 如果可以正常运行,那么恭喜你,完成了 WiX 安装包入门教程的 Hello World...请回到目录: WiX Toolset 安装包制作入门教程 运行效果: 关闭这个界面后,安装程序也将退出。 附源代码 附上必要的源码,避免你在阅读教程时因模板文件的版本差异造成一些意料之外的问题。

    1.1K20
    领券