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.