Session.Message zeigt keine Popup-Meldung auf dem Produktinstallationsbildschirm an

Nov 24 2020

Ich habe eine customActions-Klasse:

public static ActionResult Register(Session session)
{
     try
     {
         Do SOmething
     }
     catch (Exception ex)
      when (ExceptionManager.catchGenericExcetion(ex))
      {
         var responseMessage =ex.ResponseMessage;
         if (responseMessage.Contains("Maximum apps created"))
         {
             session.Log("maximum limit reached");
             using Record record = new Record(0);
             record[0] = "This is an error!Max apps reached";
             session.Message(InstallMessage.Error, record);
         }
                return ActionResult.Failure;
       }
       return ActionResult.Success;
     }
}

Hier zeigt meine Benutzeroberfläche kein Popup an, das session.Message (InstallMessage.Error, record) entspricht. In den MSI-Protokollen wird jedoch die folgende Meldung angezeigt: Maximales Limit erreicht

MSI (s) (30!F4) [21:26:05:047]: Product: MyApp -- This is an error!Max apps reached

Kann mir jemand helfen, warum ich diese Nachricht auf der Benutzeroberfläche nicht sehen kann? Ich möchte, dass es während des Installationsvorgangs auf der Benutzeroberfläche für den Endbenutzer angezeigt wird.

Antworten

SteinÅsmul Nov 25 2020 at 04:33

Debugging- oder Release-Meldung : Sie sind sich nicht sicher, was Sie wirklich benötigen - debuggen Sie nur oder möchten Sie den tatsächlichen Endbenutzern während der Installation interaktiv etwas anzeigen?

Debuggen : Wenn Sie debuggen: Fügen Sie den Debugger Ihrer benutzerdefinierten Aktion hinzu, nachdem Sie ein Meldungsfeld aus der benutzerdefinierten Aktion wie unten angezeigt haben. Dann können Sie den Code richtig durchgehen - Video für eine schnelle Demo (vielleicht funktioniert dies bereits für Sie):

using System.Windows.Forms;

<..>

[CustomAction]
public static ActionResult TestCustomAction(Session session)
{
   MessageBox.Show("Hello from TestCustomAction");
   return ActionResult.Success;
}

Session.Message : Ich habe dieses Konzept nicht wirklich verwendet (ich möchte Informationen in das Protokoll einfügen, anstatt sie den Endbenutzern anzuzeigen), aber ich fand, dass dies funktioniert ( von hier entfernt -"prepared search"):

[CustomAction]
public static ActionResult TestCustomAction(Session session)
{
    Record record = new Record(0);
    record[0] = "This is an error! Max apps reached";
       
    session.Message(InstallMessage.User | (InstallMessage)MessageButtons.OK | (InstallMessage)MessageIcon.Information, record);

    return ActionResult.Success;
}