我正在尝试使用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>
答案 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查看此输出。