Wix С# Выполнение пользовательских действий не работает

Я пытаюсь войти в систему из своего пользовательского действия С#, используя session.Log( "Hello World!" ); Это не отображается в моем файле журнала при выполнении моего msi следующим образом:

msiexec/i myMsi.msi/lvx myLog.log

Мое собственное действие отлично работает, моя единственная проблема: я не получаю информацию о регистрации. Журнал показывает, что мой ЦС вызывается, а не информация из моего сеанса .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>

Ответы

Ответ 1

В документах DoAction ControlEvent, MsiProcessMessage (API за session.Log) не может использоваться из ControlEvent. Это предотвратит показ вашего сообщения в журнале. Если вам нужно зарегистрировать некоторую информацию из ControlEvent (особенно для отладки), лучшим вариантом будет взломать как изменение значения свойства, чтобы содержать нужную информацию журнала.

Ответ 2

Я обошел это, используя неуправляемый 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 DebugView.