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

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(使用前将#替换为@)

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

  • ClickOnce 有哪些替代方案? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我用过单击一次 https en wikipedia org wiki ClickOnce多年来 我经历
  • 在wix中,使用vbscript,如何写入日志文件?

    我正在自定义操作中尝试以下操作 Session Log GetOfficeBitness Session Property OfficeBitness 我收到错误 错误 1720 此 Windows Installer 程序包有问题 A 无
  • 如何确定现有应用程序的安装范围?

    我有一个基于的安装程序WixUI Advanced允许用户选择安装范围 每个用户或机器范围 升级时 安装了较低版本的现有应用程序 我想隐藏安装范围屏幕并自动选择他们上次选择的安装范围 如何判断先前安装使用的安装范围 Edit 查看我的 MS
  • 获取生成的 ProductCode 作为 Wix 中的变量

    在我们的产品中我们使用Product Id 在 Wix 中告诉它为每个新版本生成新的产品代码 现在 我们需要在安装期间将正在安装的 MSI 的产品代码记录到我们的注册表项之一中 我们可以通过循环遍历 卸载 注册表项中的条目来查找产品名称和版
  • ICE61:该产品应仅删除其自身的旧版本

    我正在关注第二个答案here https stackoverflow com questions 500703 how to get wix to update a previously installed version of a pro
  • WiX Burn:从注册表读取 LaunchTarget

    我是 WiX 的新手 我试图让我的 Bootstrapper 在完成后启动我安装的应用程序 为了实现这一点 我正在使用
  • WIX MSI 软件包卸载

    我正在使用 WIX 作为安装程序包 当我通过双击原始 msi 包卸载该包时 一切都很好 当我从控制面板卸载时 它会给我一个最小的用户界面卸载 我已在 MSI 中写入一个自定义操作 询问用户是否要卸载某些数据库等 最小 UI 卸载时不会发生这
  • WiX - 根据环境将编译后的 web.config 复制到网站根目录

    作为 WiX 安装的一部分 我将所有转换 编译的 web config 文件复制到安装目录 编译后的 web config 的名称格式为 web ENV config 在我的安装 UI 中 我创建了一个自定义对话框 在其中解析 ENV 并填
  • 使用 元素通过 Wix 运行 SQL 脚本文件

    我是 Wix 安装程序的新手 我有一个要求 必须提供 SQL Server 登录凭据并从特定路径运行脚本 我不明白出了什么问题 项目已成功构建并创建了 msi 运行后我收到以下错误 错误26204 错误 2147217900 无法执行SQL
  • 自定义 WiX Burn 引导程序用户界面?

    我主要使用 WiX 3 6 创建一个安装包 这样我就可以利用Burn http en wikipedia org wiki WiX Burn引导功能 到目前为止 我已经将多个 MSI 软件包捆绑在一起 这些软件包将与内置引导程序应用程序一起
  • 使用“Any CPU”而不是“X86”编译wix项目

    当我编译一个wix项目 并且wix通过MSbuild启动所有现有项目的编译时 我可以使用 任何CPU 而不是 X86 或 64位 吗 如果没有 我如何使用 任何CPU 编译项目 如果您的问题是是否可以编译 WIXPROJAny CPU那么答
  • WIX 自动生成 GUID *?

    假设我生成产品 ID 为 的 WIX XML 文件 另外 对于每个组件 GUID 我都使用
  • 如何为 WIX 中的目录分配路径值?

    在我的 WIX 项目中 我有一个类似这样的目录结构
  • WiX:数字签名 BootStrapper 项目

    我有一个项目 我为其构建了 WiX msi 文件 我还有一个 WiX 引导程序 exe 文件 用于检查 C 2005 是否存在 如果未找到则安装它 然后安装 msi 软件包 我的项目包括作为 msm 文件的 Crystal Reports
  • CAQuietExec 命令字符串必须以带引号的应用程序名称开头

    好吧 我相信我正在按照 Wix3 5 中的在线示例执行安静命令 但我似乎无法让我的命令被引用
  • WiX - 提交多个属性以推迟自定义操作

    我的 WiX 安装程序在处理延迟 立即自定义操作时遇到问题 请原谅我的英语 我想将用户输入的一些属性交给延迟的自定义操作 我知道我需要立即自定义操作和 CustomActionData 来执行此操作 我就是这样实现的 二进制
  • WIX Heat.exe 命令参数 -var 不接受空格?

    我有这个使用所有不变路径的 WIX 命令 并且它不需要系统环境 与此示例不同 http weblogs sqlteam com mladenp archive 2010 02 23 WiX 3 Tutorial Generate filed
  • WiX:如何立即重新启动explorer.exe?

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

    这个问题在这里已经有答案了 我目前正在开发一个使用 WiX 创建 MSI 的项目 我过去在 Sourceforge 上使用 WiXEdit 来管理包含在 WiX 项目中的文件 因为它比直接操作 XML 稍微容易一些 但它仍然有点笨重 有谁知
  • WiX - 安装 Windows 服务并授予权限

    我们需要授予用户启动 停止和查询已安装服务状态的权限 在 WiX 2 0 中 这个 xml 可以工作

随机推荐

  • 如何检测 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 和我