2010-05-27 4 views
2

Est-ce que quelqu'un sait comment MessageBox (...) pourrait échouer silencieusement?Pourquoi MessageBox échouerait-il silencieusement?

MessageBox(g_hMainhWnd, buffer, "Oops!", MB_OK | MB_ICONERROR); 

ShellExecute(0, "open", "http://intranet/crash_handler.php", NULL, "", SW_SHOWNORMAL); 

Pour un peu le contexte, ce code est appelé dans notre propre gestionnaire d'exception, qui a été enregistrée avec SetUnhandledExceptionFilter()

La plupart du temps, je vois la boîte de message, puis il lance une web navigateur.

Cependant, j'ai un exe, qui pour autant que je sache utilise ce code exact, et il lance avec succès le navigateur Web, mais je ne vois pas la boîte de message d'abord.

Merci

Tim


craquée. J'ai essayé délibérément de passer dans une poubelle HWND et la boîte de message n'apparaissait pas.

Merci Brian!

+0

En cas d'échec, que se passe-t-il réellement? Est-ce que le processus se termine? Est-ce que MessageBox renvoie 0? Pouvez-vous can GetLastError() pour déterminer la cause? –

+0

Malheureusement, je n'ai plus accès au code qui a construit l'exe, donc je ne peux pas tracer exactement cela. Merci pour les suggestions cependant. –

Répondre

5

Juste une idée mais peut-être g_hMainhWnd est invalide? Voyez si cela fonctionne quand vous mettez NULL pour le premier paramètre.

Je suggère d'appeler GetLastError après l'appel et écrire la sortie dans un fichier. De cette façon, vous pouvez voir ce que Windows pense que l'erreur est. La documentation MSDN MessageBox mentionne qu'il définit GetLastError pour cette API et si elle échoue, elle renvoie zéro.

+0

Oui, je pense que le HWND était invalide - merci! –

0

Il s'agit d'un problème courant dans Windows Mobile chaque fois qu'une erreur déclenche un arrêt (ce que je suppose est ce qui se passe dans votre cas, compte tenu de l'URL que vous allez utiliser). Même lorsque vous rencontrez l'exception non gérée, vous pouvez exécuter un groupe d'instructions de manière fiable avant la fermeture de l'application, mais les boîtes de message peuvent ou non s'afficher. Ils sont presque toujours affichés lors de l'exécution de l'application dans le débogage via Visual Studio, mais ils n'apparaissent presque jamais lorsque l'application est exécutée sous la forme d'un fichier EXE compilé. Bizarrement, si vous appelez MessageBox deux fois dans cette situation, l'appel second affiche généralement une boîte (même dans le fichier EXE).

Je ne sais pas si le même problème existe avec Windows standard, mais il semble que vous décrivez exactement la même situation. Complet devinez ici, mais il est possible que le système d'exploitation Windows est conscient que l'application demandant la boîte de message est dans ses affres de mort, et ignore sensiblement la demande (dans les temps anciens, les applications mourantes souvent utilisées pour lancer un barrage de , Je suis en train de mourir "boîtes de message".