Question

C'est possible, mais est-il approprié d'utiliser SHFileOperation dans un service Windows? Toutes ces fonctions de l'API SHxxx dans shell32.dll semblent avoir été écrites avec des programmes de niveau utilisateur à l'esprit. Puis-je être certain que SHFileOperation n’affiche jamais l’interface graphique?

Était-ce utile?

La solution

Je dirais que non, ce n’est ni approprié ni souhaitable. La plupart des API shell32 ont été écrites avec une compréhension de base selon laquelle elles seraient utilisées dans des processus interactifs. Je ne pense pas qu'il soit possible de garantir que SHFileOperation n'affichera jamais un composant d'interface utilisateur. En fait, si vous consultez IFileOperation (qui est la nouvelle interface Vista qui remplace SHFileOperation), il est clairement indiqué:

  

Expose des méthodes pour copier, déplacer, renommer, créer et supprimer des éléments du shell, ainsi que des méthodes pour fournir des boîtes de dialogue de progression et d'erreur. Cette interface remplace la fonction SHFileOperation.

Autres conseils

Selon la documentation SHFILEOPTSTRUCT , vous pouvez utiliser les indicateurs suivants pour empêcher toute interface utilisateur d'apparaître:

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

ou (si vous ciblez Windows Vista), FOF_NO_UI , identique à ce qui précède.

Dans le fichier d’en-tête ShellAPI.h du kit de développement logiciel (SDK) Windows, le commentaire à propos de FOF_NO_UI indique que "" n’affiche aucune interface utilisateur ", ce qui signifie Je suppose que vous pouvez utiliser SHFileOperation .

Je suis d'accord: pas approprié ni souhaitable.

La raison principale pour utiliser SHFileOperation est d’effectuer des opérations avec une interface utilisateur et / ou qui sont inversables. C'est à dire. L'utilisation de SHFileOperation pour supprimer des fichiers va placer les fichiers dans une corbeille au lieu de les supprimer, ce qui permet à l'utilisateur interactif actuel d'annuler la suppression ou d'annuler l'opération effectuée. Comme les services fonctionnent sur un poste de travail non interactif, personne ne sera jamais en mesure de vider cette corbeille.

J'avais également ce problème et je travaillais à la mise en place d'une copie de fichier réseau sécurisée et fiable entre les serveurs et les partages réseau (la plupart de ces partages sont basés sur le système de fichiers CIFS / NetApp) et SHFileOperation échoue de temps en temps. temps.

a maintenant commencé à utiliser ROBOCOPY (disponible par défaut dans tous les systèmes d’exploitation Microsoft à partir de Vista / Server 2008) et a vraiment l’air intéressant et fiable.

cela m'a ouvert les yeux: https://stackoverflow.com/a/1030752/559144

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top