2016-02-11 4 views
1

Pour autant que je sache, lorsqu'un programme accède à un fichier .hlp, le programme d'aide de Windows gère la requête. Ce que j'ai est un exe plus ancien qui veut sauter à un sujet spécifique dans un fichier .hlp via une option de menu. Bien sûr, l'aide de Windows crache l'erreur générique "ne peut pas trouver le sujet", mais ce que j'aimerais vraiment, c'est si elle m'a aussi dit quel sujet elle s'attendait à trouver afin que je puisse créer un .hlp avec les sujets manquants inclus. Est-il possible d'afficher un journal des erreurs plus détaillé ou afficher la demande elle-même sans la source à l'exe?Déboguer une rubrique d'aide manquante incorporée d'un exe

error window

+0

Quelle version du système d'exploitation vous utilisez? –

+0

Oh, bien sûr, WIndows7, 64bit. Mais le programme lui-même est significativement plus ancien ... vers 1998/1999. – Rajada

+0

Je pense que la balise ajoutée hier 'Winhelp' est dans le contexte de la question. –

Répondre

1

L'histoire courte - sans le code source de votre * .exe (ou décompilation) et sans les anciens fichiers de projet WinHelp, je dirais comme première pensée - aucune chance.

Le format WinHelp (.hlp) existe depuis le début des années 1990 et est remplacé par HTML Help 1.x (.chm). Microsoft vous conseille vivement de vous éloigner de WinHelp il y a environ dix ans. Mais pour une application de test, il fonctionne sur ma machine Windows10 comme un charme (excusez le texte allemand) avec quelques étapes lourdes pour réparer WinHelp Viewer. Veuillez noter que je ne parle pas de HTMLHelp Viewer pour les fichiers d'aide * .chm affichés en arrière-plan ici.

enter image description here

aide de Windows (WinHlp32.exe) est un programme d'aide qui a été inclus avec les versions Microsoft Windows en commençant par le système d'exploitation Microsoft Windows 3.1. Toutefois, le programme d'aide de Windows n'a pas eu de mise à jour majeure pour de nombreuses versions et ne répond plus aux normes de Microsoft. Par conséquent, en commençant par la version de Windows Vista et en continuant dans Windows 7, le programme d'aide de Windows ne sera pas livré en tant que fonctionnalité de Windows. Si vous souhaitez afficher des fichiers .hlp 32 bits, vous devez télécharger et installer le programme (WinHlp32.exe) à partir du Centre de téléchargement Microsoft.

Je suppose que vous avez installé ce paquet et avez une application 32 bits en cours d'exécution avec son fichier WinHelp * .hlp en cours d'exécution sur votre machine Windows7. Un seul sujet du menu semble être mauvais pour vous.

Cela peut provenir d'un mauvais TopicID appelé par l'application ou d'une faute de frappe dans le TopicId du fichier d'aide connecté. Peut-être que le programmeur n'a pas assigné un sujet. Tellement de causes pour votre erreur.

Si vous avez de l'expérience dans la création d'aide, vous savez que le fichier WinHelp * .hlp compilé inclut un mappage helpTopicId = topic. Vous aurez à nouveau besoin de ce fichier de mappage et d'alias lors de la compilation de WinHelp!

La création d'un nouveau fichier WinHelp * .hlp est difficile (pour moi aussi, après 15 ans d'inutilisation). Vous devez décompiler et compiler à nouveau avec, par exemple, un sujet édité. Vous pouvez être averti - à cause de la perte de contextId. Voir les vieux trucs de mon site Web à: Converting WinHelp (HLP) to HTMLHelp (CHM) - a freeware tutorial

Vous pouvez avoir de la chance avec un décompilateur pour le HelpContextId

enter image description here

Normalement, un seul App.HelpFile * .hlp est liée à l'application. Pour afficher un sujet spécifique dans une fenêtre standard, un appel à partir de Visual Basic 6 ressemble à: WinHelp (hWnd, App.HelpFile, HELP_CONTEXT, ByVal CLng (TopicID)). Donc, seule une mise à jour de code vous donnera une chance pour un nouveau TopicId. Cela doit ensuite correspondre au (nouveau) fichier d'aide.

+0

Oui, j'utilise une version d'aide fournie par Microsoft en téléchargement facultatif. Mais il semble que je n'étais pas tout à fait clair. J'ai déjà creusé autour de l'application avec un éditeur hexadécimal, et je ne suis pas entièrement certain que les options de menu sont même implémentées. Ce que j'espérais, c'est que quelqu'un sache comment attraper cette erreur «sujet non trouvé» et utiliser une sorte d'astuce pour obtenir plus d'informations, donc je n'ai pas besoin de force brute pour deviner l'ID du sujet. Comme, peut-être plus d'informations est enregistré dans l'observateur d'événements. Mais s'il n'y a vraiment aucun moyen de tirer plus d'informations, je suppose que cela ne peut pas être aidé. – Rajada

+0

@Rajada: Un [decompiler] (http://stackoverflow.com/questions/414068/is-there-a-visual-basic-6-decompiler) est une bonne option si c'est possible. Vous pouvez également créer un nouveau fichier _hlp_ avec 200 sujets fictifs pour trouver l'identifiant du sujet et le renommer pour le tester. ** TopicID ** doit être incrémenté de 1 à 200 par 1 ce qui est utile. –

+0

@Rajada: Oubliez cela s'ils ont lu l'extrait de [MSDN] (https://msdn.microsoft.com/fr-fr/library/aa261329%28v=vs.60%29.aspx?f=255&MSPPError=- 2147217396): _Tip Si vous avez plus de quelques rubriques d'aide, il peut être utile d'établir un schéma de numérotation avant de commencer à saisir HelpContextID. Attribuez une plage de nombres différente pour chaque formulaire ou élément majeur de votre application, par exemple, 1000 - 1999 pour le premier formulaire, 2000 - 2999 pour le second, et ainsi de suite. –