Session.Message nie wyświetla wyskakującego komunikatu na ekranie instalacji produktu

Nov 24 2020

Mam klasę CustomActions:

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;
     }
}

Tutaj mój interfejs użytkownika nie pokazuje żadnego wyskakującego okienka odpowiadającego session.Message (InstallMessage.Error, record); Jednak w logach MSI widzę wydrukowany komunikat: osiągnięto maksymalny limit

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

Czy ktoś może pomóc, dlaczego nie widzę tej wiadomości w interfejsie użytkownika? Chcę, aby był wyświetlany w interfejsie użytkownika dla użytkownika końcowego podczas procesu instalacji.

Odpowiedzi

SteinÅsmul Nov 25 2020 at 04:33

Komunikat dotyczący debugowania lub wydania : Nie wiesz, czego naprawdę potrzebujesz - czy debugujesz tylko, czy chcesz pokazać coś interaktywnie podczas instalacji dla rzeczywistych użytkowników końcowych?

Debugowanie : Jeśli debugujesz: Dołącz debuger do akcji niestandardowej po wyświetleniu okna komunikatu z akcji niestandardowej, jak poniżej. Następnie możesz poprawnie przejść przez kod - wideo do szybkiego demo (być może to już działa):

using System.Windows.Forms;

<..>

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

Session.Message : Tak naprawdę nie korzystałem z tej koncepcji (lubię umieszczać informacje w dzienniku zamiast wyświetlać użytkownikom końcowym), ale okazało się, że zadziałało (wyszukane stąd -"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;
}