Session.Message n'affiche pas de message contextuel sur l'écran d'installation du produit

Nov 24 2020

J'ai une classe 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;
     }
}

Ici, mon interface utilisateur n'affiche aucune fenêtre contextuelle correspondant à session.Message (InstallMessage.Error, record); Cependant, dans les journaux MSI, je peux voir le message imprimé: limite maximale atteinte

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

Quelqu'un peut-il expliquer pourquoi je ne peux pas voir ce message sur l'interface utilisateur? Je veux qu'il soit affiché sur l'interface utilisateur pour l'utilisateur final pendant le processus d'installation.

Réponses

SteinÅsmul Nov 25 2020 at 04:33

Message de débogage ou de publication : Vous n'êtes pas sûr de ce dont vous avez vraiment besoin - êtes-vous en train de déboguer ou souhaitez-vous afficher quelque chose de manière interactive lors de l'installation pour les utilisateurs finaux réels?

Débogage : si vous déboguez: attachez le débogueur à votre action personnalisée après avoir affiché une boîte de message de l'action personnalisée comme ci-dessous. Ensuite, vous pouvez parcourir le code correctement - vidéo pour une démonstration rapide (peut-être que cela fonctionne déjà pour vous):

using System.Windows.Forms;

<..>

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

Session.Message : Je n'ai pas vraiment utilisé ce concept (j'aime mettre des informations dans le journal au lieu de les afficher aux utilisateurs finaux), mais j'ai trouvé que cela fonctionnait ( récupéré à partir d'ici -"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;
}