如何在自定义引导程序应用程序中设置或获取所有日志

2023-12-03

在我的自定义 Burn 托管引导程序应用程序中,我希望有一种方法来设置安装程序的默认日志目录,以便客户可以轻松找到安装日志。如果无法做到这一点,我想要一种合适的方法来在安装后复制日志文件。

我尝试在我的安装项目(即 Bundle.wxs)和我的托管引导程序应用程序中设置 WixBundleLog 变量,但没有成功。另外,我的引导程序应用程序足够通用,因此可以与各种产品/安装包一起使用,因此我需要一个足够灵活的解决方案来设置/获取每个包的安装日志,而无需对包名称进行硬编码在我的引导程序应用程序中。

似乎应该有一种方法可以做到这一点,而不强迫用户在命令行上使用“-l”或“-log”。


WixBundleLog是指定日志文件的刻录变量。无法在捆绑包中覆盖它,因为您无法在包含“Wix”前缀的捆绑包中设置变量。在引导程序应用程序中覆盖它也不起作用,因为引导程序继续记录其默认值。

刻录引导程序为引导程序日志和安装包日志设置字符串变量。我在列表中跟踪这些变量。所以在我的构造函数中我有类似的东西:

this.LogsDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), @"Company_Name\Logs\Installer\", DateTime.Now.ToString("yyyyMMdd_hhmmss"));
_logVariables = new List<string>();
_logVariables.Add("WixBundleLog");

Burn 以 [WixBundleLog]_PackageId 格式为日志文件设置字符串变量。 在我的引导程序应用程序中,当计划套餐完成事件被触发后,我有一个事件处理程序,其中包含以下代码以将变量添加到我的列表中。

//set *possible* log variables for a given package
_logVariables.Add("WixBundleLog_" + e.PackageId);
_logVariables.Add("WixBundleRollbackLog_" + e.PackageId);

在安装结束时或者如果我的引导程序遇到错误,我会调用以下方法:

private void CopyLogs()
{
     if (!Directory.Exists(this.LogsDirectory))
         Directory.CreateDirectory(this.LogsDirectory);

     foreach (string logVariable in _logVariables)
     {
         if (this.Bootstrapper.Engine.StringVariables.Contains(logVariable))
         {
             string file = this.Bootstrapper.Engine.StringVariables[logVariable];
             if (File.Exists(file))
             {
                 FileInfo fileInfo = new FileInfo(file);
                 fileInfo.CopyTo(Path.Combine(this.LogsDirectory, fileInfo.Name), false);
             }
         }
     }
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在自定义引导程序应用程序中设置或获取所有日志 的相关文章

  • WIX 3.9 及更高版本的自定义操作 RegisterComPlus 发生错误

    在 Microsoft 我们长期以来一直使用 WIX 工具集版本 3 5 2519 0 来为我们名为 System Center Service Manager 又名 SCSM 的产品构建安装程序和补丁 最近我们需要更新到 WIX Tool
  • 如何使用 WiX 安装和启动 Windows 服务

    我尝试在 Wix 中使用下面的代码 但是在安装时 安装程 序在 正在启动服务 状态下冻结了大约 3 分钟 然后我收到此消息 Service Jobservice 无法启动 请验证您是否有足够的权限来启动系统服务 我的代码有什么错误吗 并且可
  • 成功后动态改变EndDialog中的RTF内容

    多亏了这个question https stackoverflow com a 33679439 1076116 我能够执行自定义操作来临时更新和动态修改 MSI 数据库 简而言之 我正在做 CustomAction public stat
  • Wix 安装程序 - 根据属性创建文件夹层次结构

    我在用Wix 3 6 http wixtoolset org 创建一个设置 我仍在不断学习 那里的信息仍然分散 我正在等待我的 Wix 开发人员指南书到达 我目前有一个自定义 UI 对话框 用户可以在其中输入一些应用程序配置 该配置的一部分
  • 如何在 wix .wxs 文件中指定

    我想在 Wix 安装程序的 wix wxs 文件中将属性指定为受限属性
  • 与 WiX 3.0 一起安装 WiX 3.5

    是否可以同时安装 WiX 3 0 和 3 5 如果我在安装 3 0 后安装 3 5 它会删除 3 0 文件 如果我尝试在 3 5 之后安装 3 0 它会告诉我已经安装了较新的版本 我正在从 VS 2008 迁移到 VS 2010 因此我的应
  • 使用 WiX 将程序集放入 GAC 和安装路径中

    我刚刚开始学习如何使用 WiX 但遇到了障碍 我的软件包使用第三方库 该库要求 GAC 和软件包安装目录中都存在一些文件 使用 WiX 我可以使文件显示在安装目录或 GAC 中 但不能同时显示在两者中 有什么办法可以解决这个问题吗 这里有一
  • 自定义 WiX Burn 引导程序用户界面?

    我主要使用 WiX 3 6 创建一个安装包 这样我就可以利用Burn http en wikipedia org wiki WiX Burn引导功能 到目前为止 我已经将多个 MSI 软件包捆绑在一起 这些软件包将与内置引导程序应用程序一起
  • 如何在 WIX 中引用用户的主目录

    我正在为 SDK 创建一个安装程序 其中包括由最终用户编译的源代码 我希望我的 Wix 安装程序默认将其放入用户的主目录中 但我找不到要使用的正确属性名称 您还可以参考HOMEPATH环境变量与 HOMEPATH 有关用于属性的语法的更多详
  • Burn in WiX 3.6 如何将 MSI 文件捆绑到 .exe 中?

    我有兴趣了解 WiX 如何捆绑使用 Burn 创建的 EXE 文件 我知道创建一个自解压 EXE 文件非常简单 我已经完成了一百万次了WinRAR http en wikipedia org wiki WinRAR EXE 文件解压到哪个目
  • WiX:数字签名 BootStrapper 项目

    我有一个项目 我为其构建了 WiX msi 文件 我还有一个 WiX 引导程序 exe 文件 用于检查 C 2005 是否存在 如果未找到则安装它 然后安装 msi 软件包 我的项目包括作为 msm 文件的 Crystal Reports
  • Wix 4 收获目录的解释?

    我正在尝试学习 Wix 4 0 来为我正在开发的应用程序创建安装程序 构建我的应用程序后 我在一个文件夹中有一堆文件 我想将它们安装到程序文件中 我已经读到收获功能允许我简化此过程并为整个目录创建组件映射 但我不确定这是什么example
  • WIX 工具集 - 自定义操作命令无法正确检测 Windows 10 版本

    我有一个安装程序 可以部署并运行单独的 exe文件以将驱动程序部署到系统 不幸的是 微软似乎已经放弃了对VersionNTWindows 10 及更高版本中的宏 所以我实施了另一篇文章中建议的方法 https stackoverflow c
  • 在 WiX 中轻量运行时,DefaultDir 无效

    我只是想做一个安装程序 将一些文件移动到程序文件中 设置开始菜单链接 并出现在要卸载的添加 删除程序中 目前我很乐意点击开始菜单链接 因为这看起来相对简单 需要注意的是 我特别希望可以通过脚本构建它without任何类型的全局安装 这意味着
  • IIS 中的 WIX 和证书

    我正在尝试设置我的安装 以便使用 WIX 配置我的站点及其证书 我可以在 IIS 中查看证书并有权访问 cer 文件 这就是我对证书的了解 所以请简化任何答案 即我不知道我的 BinaryKey 是什么 该证书已安装在计算机上 理想情况下
  • WiX 自定义操作项目 - BadImageFormatException

    我正在开发我的第一个自定义操作 但无法加载生成的 CA dll 文件 这是最简单的过程和结果 我创建了一个自定义操作项目并保留所有默认值 该类看起来像这样 using Microsoft Deployment WindowsInstalle
  • WiX Heat:预构建事件在构建服务器上过早触发

    我正在为我的 Visual Studio 解决方案收集一个目录 到目前为止 它在我的本地系统上运行可能是因为项目构建顺序得到了尊重 当我在构建服务器上运行安装程序时 它会找到正确的目录 但在构建安装文件时尚未创建该目录 它抛出一个HEAT5
  • WiX:如何立即重新启动explorer.exe?

    我是软件打包方面的初学者 我正在使用 cpack Wix 我试图找到有关的有用信息或良好文档util 重启资源 但找不到我的问题的任何答案 Issue 我必须安装一个 ShellExtension 它需要在设置一些注册表值后重新启动 exp
  • WIX 捆绑包创建

    我尝试创建一个包含 exe 的 MSI 使用 WIX 中的捆绑选项 这样做时出现错误 有人可以帮我解决这个问题吗 下面是代码
  • 重新缓存的 msi 仍在运行旧的自定义操作

    我已对 msi 文件中的自定义操作进行了更改 以便在服务停止或停止挂起时不尝试停止 Windows 服务 但是 在使用 msiexec fv mymsi msi 重新缓存 msi 后 当运行到下一个版本的主要升级 其中也有更正的服务停止自定

随机推荐

  • 如何检测 Chrome 扩展程序中的网络状态变化

    我正在编写一个简单的 Chrome 扩展 需要该行为来检测设备是否连接到互联网 我目前正在尝试连接到 ping 服务来检查网络状态 但效率不高 我可以从 Chrome JavaScript API 监听任何事件吗 中没有具体事件Chrome
  • 写入操作期间发生磁盘错误。 (HRESULT 异常:0x8003001D (STG_E_WRITEFAULT))

    我正在使用 EPPlus 读取 vb net 中的 csv 文件 当我运行此代码时 出现错误 写入操作期间发生磁盘错误 HRESULT 异常 0x8003001D STG E WRITEFAULT 这是我的代码 Public Functio
  • 尝试让 QProcess 使用队列

    我正在尝试使用队列运行多个进程 并使用以下命令获取所有进程的输出QProcess但我有几个问题 我正在使用一个QSpinBox设置同时运行的最大进程数 我可以让主线程中的一切正常工作 或者如果我使用进程中的进程运行循环QObject但我无法
  • XML 规范是否定义在自闭斜杠之前有空格是非法的?

    我说的是 XML 文档而不是 HTML 由于在 HTML 中 br and br 都是有效的 想知道 XML 规范是否定义了自闭斜杠之前是否允许有空格 我刚刚遇到一个奇怪的问题
  • ModuleNotFoundError:没有名为“Crypto.Math”的模块

    在 Windows 上 我想运行pyinstaller myapp py w f但我对加密模块有一些错误 在我的代码中 我使用 4 个导入 这 4 个导入中的每一个 独立 都会给我同样的错误 from googleapiclient dis
  • 将属性文件添加到 IntelliJ 的类路径

    我正在使用 运行 gt 运行 菜单从 IntelliJ IDE 运行一个简单的 Java 程序 效果很好 现在我想添加 log4j 日志记录 我在项目根目录下添加了一个资源文件夹 我在该文件夹中添加了一个 log4j properties
  • angularjs 单击按钮显示下一个/上一个 div

    我有一堆用 ng repeat 创建的 Div Plunker 快速图片 是否可以像滑块一样创建这堆 div 工作 喜欢 如果我按 下一步 按钮 顶部 div 将滑开 并显示第二个顶部 按 上一个 按钮将显示上一个 div 如果有 Code
  • SQL 挑战/难题:给定堆栈跟踪 - 如何找到每个时间点的顶部元素?

    我现实生活中的用例是合并嵌套范围 我画了一些草图 然后我看到了堆栈 PUSH 和 POP 操作的开始和结束范围之间的相似之处 我明白解决了这个问题也就解决了原来的问题 The op实际上可以从问题中删除列 当 val 为 NULL 时 则为
  • 怎么了?(NumberFormatException:null)

    import java io class AccountInfo private String lastName private String firstName private int age private float accountB
  • Nginx 变量类似于 Apache 中的 SetEnv?

    我在 Apache 中使用 SetEnv 在虚拟主机中设置一些变量 然后在 PHP 中使用这些变量进行恢复 SERVER the variable 现在我正在切换到Perl Catalyst和Nginx 但Nginx中的 env 指令似乎不
  • 我无法将子菜单项设置为已选中

    我正在为我的抽屉使用 NavigationView 这是 menus xml 文件 它定义了抽屉的所有菜单项 menu menu
  • 詹金斯看不到映射的驱动器

    尝试在 Jenkins 中执行构建时出现以下错误 Started by user anonymous Building in workspace C Users mryan git AML AML cmd c call C Users MR
  • JSP生成Excel电子表格(XLS)下载

    我正在 JSP 中开发这个应用程序 我希望以 XLS MS Excel 格式 从数据库中导出一些数据 在tomcat下是否可以像普通Java应用程序一样编写一个文件 然后生成到该文件的链接 或者我需要使用特定的 API 吗 这样做时会遇到权
  • 如何在 Tkinter 中播放视频文件?

    有没有办法播放视频文件AVI MP4 etc 我尝试使用PyMedia 但显然它只适用于Pygame 我的问题的解决方案是什么 你可以使用python gstreamer用于播放视频 这适用于 Linux 上的我 但也应该适用于 Windo
  • 将 stdout 和 stderr 重定向到文件,并将 stderr 重定向到 stdout

    以下代码将 stdout 写入日志文件并打印 stderr bash script sh gt gt out log 这再次将 stdout 和 stderr 写入日志文件 bash script sh gt gt out log 2 gt
  • SquirreL SQL 客户端 3.7.1 上的 PL/SQL

    我试图在 SQuirrel 上执行 PL SQL 脚本 但似乎不起作用 我通过在 额外类路径 上添加 ojdbc7 jar 来配置 Oracle Thin Driver 能够连接到数据库 但当尝试运行简单代码时 会出现错误 code BEG
  • 如何在 pyGTK 中搜索 gtk.ListStore 并删除元素?

    我有以下代码 其中 store 是gtk ListStore效价是gtk TreeIter 文档说如果没有下一行 iter next 将返回None 因此找到时中断 它应该通过搜索ListStore of int str 并删除其中的一项i
  • 每行对齐 2 个 DIV,高度相同

    我们遇到一个问题 我们需要一个包含动态内容的 div 列表 每行始终有 2 个 div 这两个元素应该具有相同的高度 目前我们有一个使用 JavaScript 设置框高度的解决方案 但它的性能不是很好 因为它会在每次调整大小时重新计算尺寸
  • 按结构中的变量对结构向量进行排序? [复制]

    这个问题在这里已经有答案了 我有一个数据结构 例如 struct Data string firstname string lastname string age 我已将每个结构放置在一个向量 VectorOfData 中 是否可以循环遍历
  • 如何在自定义引导程序应用程序中设置或获取所有日志

    在我的自定义 Burn 托管引导程序应用程序中 我希望有一种方法来设置安装程序的默认日志目录 以便客户可以轻松找到安装日志 如果无法做到这一点 我想要一种合适的方法来在安装后复制日志文件 我尝试在我的安装项目 即 Bundle wxs 和我