2009-09-10 8 views
2

J'ai créé une application qui copie les fichiers du disque dur vers le lecteur de disquette à l'aide de l'API CopyFile(). Au milieu du processus de copie pour un fichier volumineux, si la disquette est retirée du lecteur, le message d'erreur apparaît.Comment supprimer le message système Windows

Je souhaite supprimer ce message d'erreur apparaissant sur le système. J'ai googlé et lu à propos de SetErrorMode() API utilisé par de nombreuses applications pour résoudre des problèmes similaires et essayé de l'utiliser avec toutes les options possibles de l'indicateur, mais il échoue. Exemple de code -

UINT uOldErrorMode = SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); :: CopyFile ("C: \ text.dat", "A: \ text.dat", FALSE); SetErrorMode (uOldErrorMode);

L'erreur de SetErrorMode() API ne parvient pas à supprimer le message d'erreur. Quelqu'un peut-il m'aider à comprendre pourquoi cela ne fonctionne pas avec pour mon application?

alors je suis tombé sur le lien ci-dessous: http://support.microsoft.com/kb/128642 qui parle de la clé

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Windows \ ErrorMode

dont la valeur peut être réglée à 0,1 ou 2 pour supprimer ou affichez les messages d'erreur. Cette solution fonctionne pour mon application mais je pense que

a. Ce n'est pas une bonne pratique de programmation pour accéder directement à la clé du système? il devrait y avoir une API qui devrait le faire. b. Un tel code doit échouer l'UAC lorsqu'il est exécuté sur Windows Vista ou Windows 7.

Quelqu'un peut-il s'il vous plaît fournir de l'aide avec le problème ci-dessus.

Cordialement, Felix

Répondre

0

Je ne sais pas si cela va fonctionner ou non, mais qu'en essayant SHFileOperation avec le drapeau FOF_NOERRORUI?

0

Ce n'est pas tout à fait une réponse mais plus d'informations basées sur mon expérience. J'ai trouvé que SetErrorMode semblait fonctionner sur Windows Vista et Windows 7. Cela ne fonctionnait pas sous Windows XP. XP afficherait toujours des messages d'erreur pour un simple ... mémoire ne pouvait pas être "lu" ... crash. C'était un tueur pour mon utilisation dans une situation de traitement distribué sans surveillance. L'article référencé dans la question a sauvé mon bacon avec un correctif.

Je souffre toujours de la partie de la question sur la modification programmatique du registre. Pour mon cas, je n'ai pas besoin de m'inquiéter car SetErrorMode a fonctionné dans 7 et Vista (encore), mais si ce n'était pas le cas, je testerais pour voir si le fait de laisser les fenêtres dans le magasin virtuel donnerait le bon comportement.

Questions connexes