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

C# Discussion :

App crash à l'ouverture d'un SaveFileDialog c#


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut App crash à l'ouverture d'un SaveFileDialog c#
    Bonjour,

    J'ai un logiciel à développer en c# sous Visual Studio.

    Je l'ai donc développé, et il marche parfaitement sur tous les PC sauf sur lequel j'aimerai qu'il marche. Il s’exécute parfaitement jusqu'au moment de l'ouverture d'un SaveFileDialog, où il crash lamentablement, et ne met que l'erreur de base Windows "Le programme a cessé de fonctionner". Il ne lance pas d'exception ni rien.. J'utilise le SaveFileDialog pour enregistrer un document Word que je viens de modifier.

    J'ai donc regardé sur Google, Et plusieurs sites disaient de mettre le SaveFileDialog dans un nouveau Thread, ce que j'ai fait sans conséquences. J'ai essayé de modifier plusieurs paramètres de la fonction SaveFileDialog pour vérifier que ce n'est pas juste un bug bête mais ça n'a rien changé.

    Ce qui est bizarre c'est que à un autre moment j'utilise un OpenFileDialog pour récupérer une image, et ça marche parfaitement!

    La version de .NET est la même que sur mon PC de développement, l'OS est le même aussi, et mon logiciel n'utilise rien de plus (à part une base de donnée en local mais cela m'étonnerais que ça vienne de là). L'ordinateur en question est un vieux notebook, j'ai mis le mode de compatibilité en "Any CPU" mais peut-être est-ce un problème de hardware?

    J'aimerais savoir si vous avez déjà eu ce genre de problème et si oui quelles solutions seraient applicable à mon cas?

    Merci de votre aide,

    Le stagiaire sous-payé

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2012
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 80
    Points : 163
    Points
    163
    Par défaut
    Peux tu tester avec autre chose qu'un document Word (un simple fichier texte) et sur plusieurs emplacements de ton choix (pour vérifier les droits). Peux donner le code exécuter. As tu placer des try-catch et des logs ?

    Bon courage

    ps: stagiaire et payé, la chance

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 177
    Points : 5 738
    Points
    5 738
    Par défaut
    Je serai toi je créerait un nouveau projet (même FrameWork) avec uniquement un SaveFileDialog pour voir si elle seule génère le problème sur ce poste.

    Pour ma part cette fenêtre ne me convenais pas, j'en ai une différent si besoin.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Bonjour!

    Alors j'ai fait comme vous avez dit : j'ai créé un petit programme avec deux boutons pour tester le SaveFileDialog sur un document Word et un document Text. J'ai essayé et les deux ont marchés!

    Du coup j'ai fait un système de log à ma façon : pour voir à quelle ligne le crash arrive, j'ai mis des MessageBox quasiment à chaque ligne (oui je m'embête pour rien, c'est ça de pas être doué...) et j'ai repéré la ligne qui posait problème :

    Document.Open(fileName);

    Je l'ai mis dans un nouveau thread, et ça passe, mais après il y a des crashs de partout qui apparaissent complètement aléatoirement, c'est un peu décourageant :/

    Les crashs arrivent sur mes lignes de code de remplacement des balises de mon document Word par les infos rentrés par l'utilisateur :

    FindAndReplace(app, "#Balise#", textBox1.Text.trim());

    Eux aussi marchent parfaitement sur tous les autres ordinateurs. Je pense que c'est juste l'ordinateur qui est moisi, je ne me vois pas mettre chaque ligne du programme dans des threads différents pour éviter les crashs, ce serait un peu ridicule.

    Bref est-ce que quelqu'un a connu quelque chose comme ça? est-ce l'ordinateur ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    le coté aleatoire et la présence de plusieurs threads me semblent compatible... en effet, si tu lances des actions en "parallèles", il est possible que l'OS ne les traitent
    pas de la même façon, etc...

    Perso, avant de faire de mettre dans des Threads tes traitements, commencent par tester que celà fonctionne bien sans Thread.

    Si celà se trouve, sur le PC où tu testes, il manque une librairie, ou un composant ou une version différente de word, etc... Bref, faire du séquenciel plutot que
    du Threading me semble une bonne chose au début (surtout si tu n'es pas expérimenté)...

    Après, tu peux aussi mettre un try/ Catch plutôt que des MessageBox pour connaitre la nature du plantage (plutôt que le message laconique de windows disant seulement
    que le programme a juste planté)
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse!

    "commencent par tester que celà fonctionne bien sans Thread"

    En faite tout fonctionne sur tous les PC, sauf sur l'ordi qui crash tout le temps, c'est ça le plus bizarre.. Oui en effet je galère un peu avec les threads mais j'ai remarqué qu'en en mettant aux endroits qui causent les crashs, ça résout des problèmes!

    "Si celà se trouve, sur le PC où tu testes, il manque une librairie, ou un composant ou une version différente de word"

    Oui, sans doute. Le problème c'est de savoir laquelle.. J'ai regardé la version du framework, de l'OS, et de SQL et ça vient pas de là.

    "try/ Catch plutôt que des MessageBox pour connaitre la nature du plantage"

    C'est ça le plus inquiétant, j'ai la quasi totalité de mon code dans des try/catch :'( c'est en grande partie pour ça que je suis si décontenancé devant ces crashs à répétition..

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 177
    Points : 5 738
    Points
    5 738
    Par défaut
    Je dirai la même chose que theMonz31.
    Si tu utilise des threads et que tu as des problèmes d'architecture de ton code, l'application peux fonctionner de façon aléatoire et obtenir un comportement différent selon les postes et même sur le même poste.

    Après les threads s'est bien mais compliqué, et pour le moment je dirai que ça t'apportera que des ennuis.
    Elle doit fonctionner correctement sans Thread car les threads ne sont pas la pour faire fonctionner du code qui ne fonctionne pas !

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Hahaha ok, on recommence depuis le début. Mon programme fonctionne à merveille sur mon PC de développement, et sur plusieurs autres PC sur lesquels j'ai fait des tests! Mon application fonctionne, très bien même. Pas d'erreur, d'exception, de crash, rien! Mon code paraît bon et viable.

    Hors quand je le test sur un PC spécifiquement (de type Notebook), Il crash avec l'erreur Windows de base.. C'est ça mon problème. Mais mon code fonctionne, il l'a prouvé à plusieurs reprise!

    Après je suis d'accord que les thread, quand on est pas expérimenté (comme moi), on ne devrait pas y toucher. Mais c'est la seule chose qui a fait avancé (même si c'est très légèrement) mon programme parmi les crashs.

    Y aurait-il un autre solution plus simple que les threads pour contrecarrer les crash incongrus?

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 177
    Points : 5 738
    Points
    5 738
    Par défaut
    Y aurait-il un autre solution plus simple que les threads pour contrecarrer les crash incongrus ?
    Les threads ne sont pas la pour faire fonctionner du code qui ne fonctionne pas !
    Après si tu as des problèmes que sur un poste peut être qu'il est bancale.

  10. #10
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    si tout fonctionne sauf sur 1 ordinateur, tu peux aussi envisager une DLL qui manquerait.

    Celà dit, normalement, l'OS devrait te le signaler en te disant, par exemple, qu'il ne trouve pas la dll xxx.dll par exemple.

    Dans la mesure où tu fais des traitements avec word, ça ne me paraîtrait pas aberrant qu'il y ait peut-être une différence de version de word sur
    la machine qui plante, ou bien des droits utilisateurs (genre écrire dans un répertoire interdit, ou autre).

    Bref, pour moi, si tu veux avancer, mets un try/catch dans la partie qui semble planter pour voir ce que dit l'exception.

    A partir de là, on pourra t'aider d'avantage.
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  11. #11
    Invité
    Invité(e)
    Par défaut
    si j'ai bien compris, la ligne qui bloque c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Document.Open(fileName);
    quelle valeur as-tu dans fileName ?

    as-tu bien les droits pour lire/écrire dans le dossier ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    as-tu essayé d'ajouter une try-catch autours de cette ligne ?

  13. #13
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    D'abord, veuillez m'excuser de prendre autant de temps à répondre, mais quand je n'ai rien de plus intéressant à vous dire, je préfère me taire!

    Maintenant j'y vois plus clair, je sais pourquoi les crashs se lançaient de manière impromptus malgré le try catch! En faite c'est des exception bizarre qui devraient pas être la (enfin j'ai pas trop compris) mais j'ai ajouté ces quelques lignes à AppConfig :

    <runtime>
    <legacyCorruptedStateExceptionsPolicy enabled="true" />
    </runtime>


    Et ça a completement stoppé les crashs. Maintenant ça me lance de belles erreurs ! Par contre ce qu'il y a à l’intérieur est moins beau..

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt

    J'ai parcourus les forums et il y a d'innombrables réponses et fixes en tout genre. Je n'y comprend absolument rien, j'en ai essayé quelques uns des plus populaires et ça n'a pas marché.. Certains disent que c'est un problème de hardware. En tout cas c'est bien au delà de mes compétences, donc je m'en remet à vous.

    Merci d'avance

Discussions similaires

  1. [FB3] Crash lors de l'ouverture de projet
    Par ouaqa dans le forum Flex
    Réponses: 8
    Dernier message: 08/12/2010, 11h42
  2. Réponses: 2
    Dernier message: 23/07/2010, 21h25
  3. ouverture de deux SaveFileDialog
    Par longuard dans le forum Débuter
    Réponses: 4
    Dernier message: 18/12/2009, 10h09
  4. Réponses: 1
    Dernier message: 31/08/2009, 15h54
  5. Crash lors de l'ouverture de mon programme
    Par jimmplan dans le forum MFC
    Réponses: 16
    Dernier message: 16/10/2008, 23h35

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