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

时间:2014-06-04 05:19:06

标签: c# wix

我是WiX安装程序的新手。

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

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

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

5 个答案:

答案 0 :(得分:15)

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

例如:

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

有关msiexec参数的详细信息,请参阅Command-Line Options

答案 1 :(得分:3)

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

如果您在安装程序中使用Property MsiLogging作为vx的值, 它会在用户临时位置生成标准MSI日志(在运行中键入%temp%),LogName看起来像MSI * .LOG,即使没有/L*v开关也会自动生成。使用/L*v开关可以覆盖LogPath。

你必须知道的事情:

  1. session.Log在任何UI操作执行时都不会记录。

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

答案 2 :(得分:2)

  1. session.Log的工作方式类似于session.Message,信息级别为:

    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记录了属性的变化:

  3. &lt; Property Id =“WIX_MAGIX_TRICK_PROPERTY”Value =“0”/&gt;

    并在CA中:

    session [“WIX_MAGIX_TRICK_PROPERTY”] =“要记录的消息”;

    结果应与此类似:

    MSI(c)(78!34)[09:48:13:770]:属性更改:修改WIX_MAGIX_TRICK_PROPERTY属性。其当前值为“0”。它的新价值:'消息记录'。

答案 3 :(得分:0)

我不确定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

答案 4 :(得分:0)

使用参数运行msi:/L!*vx为我解决了这个问题。 E.g。

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

现在我对Session.Log("..")的所有电话都显示在install.log