使用 DTF InstallLogModes 的事件过多
Too Many Events Using DTF InstallLogModes
我目前正在使用以下标志记录 "everything":
const DTF.InstallLogModes logEverything = DTF.InstallLogModes.FatalExit |
DTF.InstallLogModes.Error |
DTF.InstallLogModes.Warning |
DTF.InstallLogModes.User |
DTF.InstallLogModes.Info |
DTF.InstallLogModes.ResolveSource |
DTF.InstallLogModes.OutOfDiskSpace |
DTF.InstallLogModes.ActionStart |
DTF.InstallLogModes.ActionData |
DTF.InstallLogModes.CommonData |
DTF.InstallLogModes.Progress |
DTF.InstallLogModes.Initialize |
DTF.InstallLogModes.Terminate |
DTF.InstallLogModes.ShowDialog;
DTF.Installer.SetInternalUI(DTF.InstallUIOptions.Silent);
var handler = new DTF.ExternalUIRecordHandler(ProcessMessage);
DTF.Installer.SetExternalUI(handler, logEverything);
DTF.Installer.EnableLog(logEverything, logPath, true, true);
DTF.Installer.InstallProduct(installerPath, commandLine);
这具有将大量事件写入日志文件的效果。
例如,我看到了成千上万个这样的东西:
MSI (s) (14:A0) [11:33:50:764]: Component: comp_27E5179987044690962CE98B3F95FD72; Installed: Local; Request: Null; Action: Null; Client State: Local
MSI (c) (4C:8C) [11:34:17:869]: Creating MSIHANDLE (592) of type 790531 for thread 8076
MSI (c) (4C:8C) [11:34:17:893]: Closing MSIHANDLE (592) of type 790531 for thread 8076
如何禁用日志中那些极其冗长的消息?我需要保留 Progress 事件。
如果您不需要它们,请不要在 API 调用中设置 bts。只需设置进度。但是,您确实需要掌握错误消息和警告才能显示它们。
但是....您的目标是什么?您无需重新发明可以通过其他方式获得的日志记录。使用外部 UI 调用 API 的目的是您现在负责安装的所有 UI。这并不是真正关于日志记录,而是关于您对 UI 负责,标准安装通常会以一种或另一种形式显示所有这些消息。例如,除了进度消息之外,您还会收到说明正在发生的事情(正在复制文件名等)的操作消息。如果这是您正在安装的实际产品,那么您确实需要显示错误消息、正在使用的文件对话框、警告,或者您只是隐藏所有发生的事情。
Link 基础 AP 文档:https://msdn.microsoft.com/en-us/library/aa370573(v=vs.85).aspx
我目前正在使用以下标志记录 "everything":
const DTF.InstallLogModes logEverything = DTF.InstallLogModes.FatalExit |
DTF.InstallLogModes.Error |
DTF.InstallLogModes.Warning |
DTF.InstallLogModes.User |
DTF.InstallLogModes.Info |
DTF.InstallLogModes.ResolveSource |
DTF.InstallLogModes.OutOfDiskSpace |
DTF.InstallLogModes.ActionStart |
DTF.InstallLogModes.ActionData |
DTF.InstallLogModes.CommonData |
DTF.InstallLogModes.Progress |
DTF.InstallLogModes.Initialize |
DTF.InstallLogModes.Terminate |
DTF.InstallLogModes.ShowDialog;
DTF.Installer.SetInternalUI(DTF.InstallUIOptions.Silent);
var handler = new DTF.ExternalUIRecordHandler(ProcessMessage);
DTF.Installer.SetExternalUI(handler, logEverything);
DTF.Installer.EnableLog(logEverything, logPath, true, true);
DTF.Installer.InstallProduct(installerPath, commandLine);
这具有将大量事件写入日志文件的效果。
例如,我看到了成千上万个这样的东西:
MSI (s) (14:A0) [11:33:50:764]: Component: comp_27E5179987044690962CE98B3F95FD72; Installed: Local; Request: Null; Action: Null; Client State: Local
MSI (c) (4C:8C) [11:34:17:869]: Creating MSIHANDLE (592) of type 790531 for thread 8076
MSI (c) (4C:8C) [11:34:17:893]: Closing MSIHANDLE (592) of type 790531 for thread 8076
如何禁用日志中那些极其冗长的消息?我需要保留 Progress 事件。
如果您不需要它们,请不要在 API 调用中设置 bts。只需设置进度。但是,您确实需要掌握错误消息和警告才能显示它们。
但是....您的目标是什么?您无需重新发明可以通过其他方式获得的日志记录。使用外部 UI 调用 API 的目的是您现在负责安装的所有 UI。这并不是真正关于日志记录,而是关于您对 UI 负责,标准安装通常会以一种或另一种形式显示所有这些消息。例如,除了进度消息之外,您还会收到说明正在发生的事情(正在复制文件名等)的操作消息。如果这是您正在安装的实际产品,那么您确实需要显示错误消息、正在使用的文件对话框、警告,或者您只是隐藏所有发生的事情。
Link 基础 AP 文档:https://msdn.microsoft.com/en-us/library/aa370573(v=vs.85).aspx