L'appel de fonction Win32 ShellExecuteEx
a un drapeau SEE_MASK_FLAG_NO_UI
dans sa structure SHELLEXECUTEINFO
, qui devrait supprimer les boîtes de dialogue d'erreur qui pourraient être affichés en raison d'une erreur lors du lancement d'une application .ShellExecuteEx avec SEE_MASK_FLAG_NO_UI affiche une erreur lors du démarrage de l'application .NET sur le système sans .NET
La documentation MSDN here est tout à fait explicite à ce sujet:
SEE_MASK_FLAG_NO_UI
0x00000400. Do not display an error message box if an error occurs.
Dans mon cas, je lance un exécutable .NET sur un système Windows XP où aucun .NET est installé. Je reçois systématiquement le message suivant, affiché par Windows dans une fenêtre de dialogue:
Xxx.exe - Application Error
The application failed to initialize properly (0xc0000135).
Click on OK to terminate the application.
[ OK ]
Je ne veux pas que l'utilisateur d'avoir à faire face à ce message. Je préfère récupérer un code d'erreur de ShellExecuteEx
et être capable de le gérer avec élégance dans mon programme. Voici l'extrait de code que j'utilise pour lancer l'exécutable externe:
#include <windows.h>
int wmain(int argc, wchar_t* argv[])
{
SHELLEXECUTEINFO info;
memset(&info, 0, sizeof(SHELLEXECUTEINFO));
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_FLAG_NO_UI;
info.lpVerb = L"open";
info.lpFile = L"Xxx.exe";
info.nShow = SW_SHOW;
return ShellExecuteEx (&info);
}
est-il un moyen officiel de supprimer le message d'erreur si .NET n'est pas présent sur le système? Ou dois-je vérifier moi-même cette condition spécifique avant d'exécuter l'application (mais je ne sais pas à l'avance s'il s'agit d'une application .NET ou d'une application native). Et si l'application que je commence manque certaines DLL, par exemple?
Vous avez complètement raison. Et la seule façon de contourner ce problème est de détecter qu'il n'y a pas de .NET et d'éviter de démarrer l'application complètement. –