6
votes

TaskDialog Fires Exception: Comctl32.dll dans la version 6 requise

Je développe une application moderne WPF. Je veux utiliser le TaskDialog, mais je reçois toujours l'erreur commune:

TaskDialog Feature doit charger la version 6 de comctl32.dll mais un Différente version est actuellement chargée en mémoire.

J'ai essayé d'ajouter un manifeste (qui contient déjà la dépendance requise pour le bon comcl32.dll) et définissez-la comme manifeste par défaut dans les propriétés du projet.

Il jette toujours cette exception: - /

Mon application est construite comme ceci: C'est une application de démarrage (application Windows normale, non-WPF). Il n'a que le "programme.cs" qui est le point d'entrée. Là, il charge de manière dynamique la vraie application (qui est une bibliothèque, pas un projet d'application WPF). Il invoque la méthode de démarrage qui commence l'application.

fonctionne bien, mais je reçois toujours cette exception. Je suppose que c'est à cause de ce système de démarrage ... mais quel serait une solution de contournement possible de le réparer?

Merci beaucoup :)

r


4 commentaires

Pourquoi faites-vous cela? Pourquoi pas seulement avoir une application WPF régulière qui commence par system.windows.application à la place? Je suppose que les WinForms (ou tout ce que vous chargez auparavant) chargent un tas d'anciens Crap WPF ne se soucient pas.


OK Ce système est un fragment d'un bogue que j'avais plus tôt. Je viens de changer le système. Il commence maintenant via un vrai projet WPF. Cela ne fonctionnera toujours pas. Si j'active "Débogage du système propre", je ne reçois aucune précédente et que la boîte de dialogue s'ouvre. Le seul bug est: l'icône manque: - / pourrait-il peut-être être un problème dans la MS API Codepack?


Vous êtes correct, c'est un bug dans l'API lui-même: Stackoverflow.com/Questtions/22561584/...


Dupliqué possible de C #: comcl32.dll version 6 dans le débogueur


3 Réponses :


3
votes

Peut-être que ma solution vous aidera.

My C # "Application" est une bibliothèque de classe / DLL utilisée comme personnalisage pour Wix. Je voulais un taskdialog au lieu de MessageBox, mais j'ai couru dans la même exception que vous, et les fichiers manifestes ne fonctionnent pas pour les bibliothèques de classe C # autant que je sache. Je devais utiliser une combinaison de choses pour obtenir mon code pour charger la version droite de comctl32.dll.

Je viens de le faire fonctionner afin que mon code soit un peu désordonné et gras.

Sources:

  1. http://truecheatters.com/f51/%5BC- % 5D-Taskdialog-9368.html
  2. http://support.microsoft.com/kb/830033

    1) Inclure la classe Enabletheminginscope As-IS du deuxième lien ci-dessus.

    2) Inumez cette tâche modifiée Enums / Classe: < / strong> xxx

    3. Pour l'appeler, simplement: xxx

    4. Résultat:

    Entrez la description de l'image ici >


4 commentaires

Je reçois une exception que le point d'entrée "Taskdialog" n'a pas été trouvé dans comctl.dll: - / aussi Je n'aime pas le fait que cette façon verrouille la possibilité de définir des contrôles comme des barres de progression ou autre chose: - / mais merci pour la réponse :)


J'ai aussi trouvé ceci: Stackoverflow. com / questions / 1415270 / ... Alors peut-être que c'est un bug de studio visuel lui-même. Comme je l'ai dit, en mode de sortie, cela fonctionne bien (la seule chose est l'icône manquante) ...


@Razer Pour des trucs comme des barres de progression, vous devrez utiliser TaskDialogindect à la place. Consultez la source de cet emballage de code de l'API Windows® dans \ Source \ WindowsapicodePack \ core \ Interop \ TaskDialogs \ Taskdial Ognativemethods.cons. C'est beaucoup plus complexe, alors je n'ai pas de solution simple. Quant à l'exception, je ne sais pas ce qui se passe. Assurez-vous que votre ligne Dllimport est exactement la même que celle que j'ai à l'étape 2. Si c'est déjà comme ça ... alors je ne suis pas sûr :(. Vous êtes bienvenu!


Utilisez la classe Enabletheminginscope à Stackoverflow.com/a/22376552/1703887 car il a des corrections pour ce qui était autrefois trouvé à l'heure actuelle Lien de défunt KB / 830033.



3
votes

exécutez la version * .exe de votre programme, et non celle de Visual Studio * .vshost.exe

Pour ce faire dans Visual Studio, désactivez le drapeau dans "Débogage / Activer les debuggers / Activer le processus d'hébergement Visual Studio"


3 commentaires

Voir aussi ici: Stackoverflow.com/Questtions/2069940/...


Semble être une réponse logique au problème ... Tant que je suis toujours en mesure de déboguer de la demande, cela devrait être une solution possible. Je vais le tester bientôt.


Ok, c'est étrange ... maintenant ça marche bien. Je n'ai pas touché le projet pendant environ une demi année. Et maintenant, il fonctionne simplement bien, sans avoir à désactiver le processus d'hébergement. Peut-être que le problème a été corrigé avec l'une des nombreuses mises à jour Windows / Visual Studio.



0
votes

J'ai trouvé que si vous exécutez avec la permission "requissionnelle", il jette l'exception, mais ne jette pas une exception si la permission "asinvoker". Juste mon observation. Si votre application nécessite des privilèges d'administrateur, je suis excitée


0 commentaires