c# WiX CustomAction Session.Log我在哪里可以找到日志?

本文关键字:日志 在哪里 CustomAction WiX Session Log | 更新日期: 2023-09-27 18:06:40

我是WiX安装新手。

我正在使用Session.Log记录进程中一些有用的数据。

session.Log("Begin register the Vdds interface.");

但是我不确定在哪里可以找到日志。是否有一个默认的日志路径?或者我是否需要指定我需要在installer .wxs文件中提供的路径?

c# WiX CustomAction Session.Log我在哪里可以找到日志?

您需要使用msiexec.exe从命令行运行安装程序,然后包含L命令行选项来指定日志保存的位置。

例如:

msiexec /i app.msi /l*v thelog.txt

有关msiexec参数的更多信息,请参见命令行选项

Session.Log将您的日志添加到标准的MSI日志中。如果您在执行过程中提供了/l*v <LogPath>开关,则可以在LogPath中找到自定义操作的日志。

如果您在安装程序中使用属性MsiLogging,其值为vx,它会生成标准MSI登录用户的临时位置(类型%temp%在运行中),LogName看起来像MSI*. Log,即使没有/L*v开关也会自动。LogPath可以被/L*v开关覆盖。

你必须知道的事情:

  1. session.Log不记录任何UI操作。

  2. 有时由于内存泄漏问题,安装程序无法生成MSI*日志。在这种情况下,可以重新启动explorer.exe进程。

  1. session. log的工作原理与session类似。信息级别:

    public void Log(string msg)
    {
        if (msg == null)
            throw new ArgumentNullException("msg");
        using (Record record = new Record(0))
        {
            record.FormatString = msg;
            int num = (int) this.Message(InstallMessage.Info, record);
        }
    }
    
  2. 你可以使用肮脏的技巧:在引用模块中定义一个属性,并在CA中将其值设置为你想要记录的消息。似乎WIX记录属性的变化:

<属性Id Value="0" />

and in CA:

session["WIX_MAGIX_TRICK_PROPERTY"] = "message to log";

结果应该类似于:

MSI (c) (78!34) [09:48:13:70]: PROPERTY CHANGE:修改WIX_MAGIX_TRICK_PROPERTY属性。它的当前值是'0'。它的新值:'message to log'

运行带有参数的msi: /L!*vx为我解决了这个问题。例如

msiexec /i MyMsi.msi /L!*vx install.log

现在我对Session.Log("..")的所有调用现在显示在install.log

我不确定session.Log在哪里记录消息。然而session.Message:

Record record = new Record();
record.FormatString = string.Format("Something has gone right!");
session.Message(InstallMessage.Info, record);

出现在以下命令生成的日志文件中:

msiexec /i app.msi /l*v thelog.txt