Wix C#自定义操作日志记录不起作用

时间:2010-08-16 14:32:30

标签: wix

我正在尝试使用session.Log(“Hello World!”)从我的C#Custom Action登录;执行我的msi时,这不会显示在我的日志文件中,如下所示:

msiexec / i myMsi.msi / lvx myLog.log

我的自定义操作正常,我唯一的问题是我没有我的日志信息。日志显示我的CA正在被调用,而不是来自我的session.Log()调用的信息。

我使用的是Wix 3.5,.Net 4,VS 2010和64位Windows 7.我按照以下方式调用我的操作。

<Control Id="TestConnection" Type="PushButton" X="21" Y="177" Width="100" Height="17" Text="Test Connection">
  <Publish Event="DoAction" Value="TestConnection">1</Publish>
</Control>

2 个答案:

答案 0 :(得分:26)

根据DoAction ControlEvent上的文档,无法从ControlEvent中使用MsiProcessMessage(session.Log后面的API)。这可以防止您的邮件显示在日志中。如果你需要从ControlEvent中记录一些信息(特别是用于调试),最好的办法就是更改属性值以包含所需的日志信息。

答案 1 :(得分:0)

我通过使用非托管的OutputDebugString解决了这个问题:

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern void OutputDebugString(string message);

public bool IsDebugLogging { get; set; }

public void Log(string message)
{
    Session.Log(message);
    if (IsDebugLogging)
    {
        OutputDebugString(message);
    }
}

在我的自定义操作中,我将IsDebugLogging = true设置为启用OutputDebugString日志记录。可以使用Sysinternal's DebugView查看此输出。