IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

Objet à la poubelle au moment de s'en servir


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 878
    Par défaut Objet à la poubelle au moment de s'en servir
    Bonjour,

    J'ai un programme qui fonctionne depuis quelques semaines, lancé par une tâche planifiée deux fois par jour, une espèce de réveil qui joue un son.

    Il aurait dû sonner à 22h30 pour que j'allume le chauffe-eau, à 23h30 je ne sais plus quel besoin pressant m'a rendu plus lucide que prévu à cette heure, et j'ai réalisé que cette chose n'a pas sonné, et toujours pas quand j'ai allumé la machine, alors que la tâche planifiée sort la machine de veille pour s'exécuter, et s'exécute à la première sortie de veille si une exécution planifiée a été loupée.

    La tâche planifiée s'est arrêtée 50 minutes après l'heure d'exécution prévue (à 23h20) avec l'erreur 0xE0434352, qui est l'équivalent en WinForms de l'erreur 5000 en web, si on veut en trouver un intitulé précis, c'est "marche pô !"

    Il y a quand même un peu plus d'infos dans l'observateur d'événements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CoreCLR Version: 6.0.3324.36610
    .NET Version: 6.0.33
    Description: The process was terminated due to an unhandled exception.
    Exception Info: System.ObjectDisposedException: Cannot access a disposed object.
    Ça se passe à la ligne 15 de Program.cs

    La ligne 15 est la deuxième des deux lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form1 F = new();
    Application.Run(F);
    À tout hasard j'ai remplacé la ligne précédente par
    Alors imaginez la scène, "Cannot access a disposed object", ça veut dire que la secrétaire a traversé le bureau avec la feuille à remplir, et qu'avant de la mettre dans sa machine à écrire, elle l'a mise à la poubelle, ce qui fait qu'elle ne pouvait plus écrire dessus.

    À cause de ça on allait chauffer l'eau en tarif de jour.

    J'ai le droit d'être perplexe ?
    Sachant que j'ai testé le programme (et celui qui doit lui dire de s'arrêter) une dizaine de fois avant de passer la main à la tâche planifiée.

    Alors à 22h20, Security-SPP me dit "La migration de bas niveau hors connexion a réussi."

    Ah, ben il y a quand même des choses qui marchent ...

  2. #2
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 878
    Par défaut
    Depuis que j'ai raconté tout ça l'observateur d'événements s'est mis à être plus bavard, toutes les cinq secondes le DeviceSetupManager me dit
    "Échec lors de la mise en lots des métadonnées, résultat=0x80070490 pour le conteneur '{62907ECE-2580-E06A-B051-053B43B8AE3E}'"

    Ça pourrait mettre sur la voie, pas vrai ?

    En revanche pour ce qui est du planificateur de tâches, j'ai lancé la tâche manuellement, j'ai bien entendu les sons normalement, mais la fin de tâche s'est de nouveau faite, longtemps après, avec le code 0xE043452.


    Bon, je vais redémarrer la machine, si ça change quelque chose je viendrai dire.

  3. #3
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 878
    Par défaut
    Bon, cette fois c'est SQL qui a trouvé à redire :
    "Échec lors du déchargement d'un domaine d'application DefaultDomain. L'exception suivante s'est produite : Erreur pendant le déchargement d'appdomain. (Exception de HRESULT : 0x80131015)."

    Mais ensuite je n'ai plus vu l'observateur d'événements, et quand je l'ai rouvert pour retrouver le nom exact du service, je ne voyais plus l'erreur.

    J'ai alors trié par niveau de message, et j'ai vu qu'en début d'après-midi l'explorateur a planté :

    "Nom de l’application défaillante Explorer.EXE, version : 10.0.22621.4317, horodatage : 0xa8caac5f
    Nom du module défaillant : CoreMessaging.dll, version : 10.0.22621.3672, horodatage : 0x41404c38
    Code d’exception : 0xc000027b
    Décalage d’erreur : 0x000000000007edce
    ID du processus défaillant : 0x0x22DC
    Heure de début de l’application défaillante : 0x0x1DB1C2C39368867
    Chemin d’accès de l’application défaillante : C:\Windows\Explorer.EXE
    Chemin d’accès du module défaillant: C:\Windows\system32\CoreMessaging.dll
    ID de rapport : efe5f029-6a3e-45c2-9ee5-70ad3e78505b
    Nom complet du package défaillant*:
    ID de l’application relative au package défaillant*: "

    Dites voir, est-ce qu'on sait utiliser un tri multicritères, pour ordonner les messages de l'observateur d'événements ?

    Parce que j'ai bien eu les erreurs en tête (plus nombreux que je ne m'y attendais d'ailleurs), mais alors pour ce qui est de l'ordre chronologique c'était "pas triste" ...

    ***
    J'ai contourné la difficulté en créant une vue personnalisée, filtrée sur les erreurs, et ensuite je peux en trier l'affichage dans l'ordre chronologique en cliquant sur l'entête de colonne.

    L'erreur dont je parlais sur SQL était journalisée par SQL Server Reporting Services (SQLEXPRESS).

    J'ai vu que l'erreur que j'ai mentionnée sur mon programme (0xe0434352) s'est déjà produite les jours passés, mais que je n'avais pas eu d'occasion de constater que ça puisse empêcher la tâche planifiée de s'exécuter.

    On dirait qu'il va falloir que je regarde dans mon formulaire, et au besoin que j'en parle dans le forum WinForms.

    Cette erreur est consécutive à une modification dans le code.
    Pour que le son soit audible sans avoir tapé le mot de passe il faut que la tâche s'exécute "même si l'utilisateur n'est pas connecté" (avec pour conséquence que l'interface graphique n'apparaît pas à l'écran), donc pour la fermeture du formulaire, plutôt que de compter sur un bouton, je détecte un fichier créé par un autre programme.

    Dans la mesure où c'est au moment de fermer le formulaire, qu'il y ait une erreur ne paraissait pas trop gênant. J'avais l'impression d'être arrivé à quelque chose de propre, mais que le gestionnaire de tâches détecte une fin avec erreur laisse entendre que finalement pas tant que ça ...

    Alors pour récapituler, ma façon de fermer le formulaire semble déclencher une erreur, au bout de quelques jours la tâche ne s'est pas exécutée alors comme j'ai vu qu'elle se terminait en erreur j'ai cru que c'était à cause de ça qu'elle ne s'était pas exécutée. L'erreur en fermeture du formulaire ne devrait pas empêcher de lancer l'application, mais comme elle affecte l'affichage par le planificateur de tâches, ça complique le débogage.

    Donc, pour le moment je vais considérer ceci comme résolution du fil, puis je vais aller demander dans le forum WinForms ce qu'on pense de ma façon de fermer le formulaire.

    Une fois tout le monde d'accord là-dessus, si la tâche planifiée vient à nouveau à ne pas s'exécuter, ça risque d'être plus facile à comprendre, et au besoin j'ouvrirai alors un autre fil.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    hors utilisation dans les tâches planifiées, ça fonctionne?

    Si c'est pour émettre un son à une certaine heure de manière répétitive et que tu es sûr un windows 10 ou 11, tu peux sans doute utiliser à la place le logiciel Horloge fourni, partie Alarme et générer un certain nombre d'alarme aux heures voulues. Tu t'affranchis ainsi d'un code, et du planificateur.

    Et si ton son est un fichier audio, tu peux le faire lancer directement par le planificateur sans passer par un logiciel (ça utilisera le programme associée à l'extension du fichier)

  5. #5
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 878
    Par défaut
    Oui les horloges ça me rappelle quelque chose, maintenant il se peut que je confonde avec celles d'Androïd. Là si je ne m'abuse on peut enregistrer cinq heures, et on se débrouille avec ça. On a cinq onglets, dont réveil, chronomètre, et compte à rebours.

    Dans le menu démarrer de Windows j'ai vu Horloge, si je clique là-dessus on propose une "session de concentration".
    Il y a aussi autre chose, dans Windows 11 ?

    Le fait est que donner directement le fichier son comme programme je n'y aurais pas forcément pensé. Au stade où j'en suis il n'est pas sûr que ça vaille le coup de recommencer juste pour ça, mais à l'occasion ...

    Là maintenant, à moins de reprendre au départ en partant sur un service, ou en trouvant les horloges, si l'équivalent de ce que j'ai sur mon téléphone existe aussi sur Windows ça vaut un coup d'œil, ce qui reste à faire c'est comprendre avec quoi mon programme entre en conflit.

    Car si ça marche le matin et pas le soir, je ne vois que ça.

    Donc pour le moment je laisse venir l'heure, et après je regarde comment ça s'est passé.
    Si avec deux jours de plus pour recouper ça ne vient pas, ça risque d'être plus intéressant de reprendre depuis le départ, en se méfiant que si lancer une action par un programme via une tâche planifiée entre en conflit, il n'est pas impossible que la même action lancée autrement entre en conflit aussi.

    D'où l'intérêt de savoir avec quoi.

  6. #6
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 878
    Par défaut
    Alors donc je me donne deux jours pour savoir ce qui coince cette application le soir, alors que le matin elle fonctionne bien.

    Pendant ce temps-là, ça me laisse un peu de temps pour reconnaître d'autres pistes.

    J'ai créé un service Windows, et maintenant, je me bagarre avec les moteurs de recherche. À mesure que je leur demande "C# service Windows jouer son", ils me répondent "C# Winforms jouer son".

    Désolé, ça n'est pas le même sujet.

    Je me rappelle quelqu'un qui butait sur des règles administratives, et qui lançait "Ben on peut pô !"

    Je me demande si la même formule ne s'appliquerait pas là ...

    Ou peut-être dans ce cas faudra-t-il se contenter d'un .wav ?

    Ensuite va se poser la question de l'interaction avec l'utilisateur. Dans une tâche planifiée qui démarre hors session on ne peut pas interagir au clavier, je subodore qu'avec un service ça va faire pareil ?

    J'ai biaisé par la création d'un fichier. C'est lourd, mais ça marche. Enfin ... certaines fois.

    Je suppose que les règles sont les mêmes avec un service ?

    En ne gardant pas le délai par défaut d'une seconde, histoire que les choses aient le temps de se faire ...

    Jouer un son c'est bien, mais le but est d'attirer l'attention de l'utilisateur. Et selon les cas, ça peut mettre du temps, vu qu'il faut que l'utilisateur soit là. C'est pour ça qu'un retour peut être utile.

    Et alors je pars du principe que le service est autonome pour sortir Windows de veille, mais ... je n'ai pas encore regardé comment.

    ***
    Pour ce qui est du son il est vrai que ce n'est pas bloquant, puisque Console.Beep fonctionne (avec l'avertissement que par là on renonce à la compatibilité avec Unix).
    Peut-être faudra-t-il régler le son, aussi ...

    ***
    Ah ben si : le service a une fenêtre de console, donc on peut échanger avec, une fois qu'on a trouvé la fenêtre ...

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    Citation Envoyé par Gluups Voir le message
    Dans le menu démarrer de Windows j'ai vu Horloge, si je clique là-dessus on propose une "session de concentration".
    Il y a aussi autre chose, dans Windows 11 ?
    Tu as en dessous dans l'interface, dans le menu de gauche sous "session de concentration", le menu "alarme" (que j'ai évoqué dans ma précédente réponse) ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/04/2018, 17h21
  2. Réponses: 0
    Dernier message: 30/06/2017, 17h58
  3. Erreur au moment de l'insertion d'un objet dans une table
    Par Francky44003 dans le forum Java EE
    Réponses: 3
    Dernier message: 16/12/2011, 20h30
  4. Les objets disparaissent au bout d'un certain moment
    Par restricteur dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 17/05/2007, 18h03
  5. [JSP SERVLET]Moment d'expiration des objets du scope Request
    Par Little_Goldo dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 25/08/2005, 13h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo