Pregunta

Es posible, pero ¿es apropiado usar SHFileOperation dentro de un servicio de Windows? Todas las funciones de la API SHxxx en shell32.dll parecen haberse escrito teniendo en cuenta los programas de nivel de usuario. ¿Puedo estar seguro de que SHFileOperation no mostrará GUI alguna vez?

¿Fue útil?

Solución

Yo diría que no es apropiado ni recomendable. La mayoría de las API de shell32 se escribieron con un entendimiento básico de que se utilizarían en procesos interactivos. No creo que haya ninguna forma de garantizar que SHFileOperation nunca mostrará un componente de UI. De hecho, si observa IFileOperation (que es la nueva interfaz de Vista que reemplaza a SHFileOperation), indica claramente:

  

Expone métodos para copiar, mover, renombrar, crear y eliminar elementos de Shell, así como métodos para proporcionar cuadros de diálogo de progreso y error. Esta interfaz reemplaza la función SHFileOperation.

Otros consejos

De acuerdo con la SHFILEOPTSTRUCT , puede usar los siguientes indicadores para evitar que aparezca alguna IU:

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

o (si está apuntando a Windows Vista), FOF_NO_UI , que es el mismo que el anterior.

Al mirar en el archivo de encabezado ShellAPI.h en el SDK de Windows, el comentario en contra de FOF_NO_UI dice "no mostrar ninguna IU en absoluto", así que a partir de este Supongo que está bien usar SHFileOperation .

Tengo que estar de acuerdo: no es apropiado ni recomendable.

La razón principal para usar SHFileOperation es realizar operaciones con una UI y / o que son reversibles. Es decir. El uso de SHFileOperation para eliminar archivos los colocará en una papelera de reciclaje en lugar de eliminarlos, lo que permitirá al usuario interactivo actual recuperar o deshacer la operación realizada. Como los servicios se ejecutan en un escritorio no interactivo, nadie podrá borrar esa papelera de reciclaje.

También tuve este problema y estaba trabajando para implementar una copia de archivo de red segura y confiable entre servidores y recursos compartidos de red (la mayoría de estos recursos compartidos están basados ??en el archivador CIFS / NetApp) y SHFileOperation falla de vez en cuando tiempo.

ahora comenzó a usar ROBOCOPY (disponible de forma predeterminada en todos los sistemas operativos de Microsoft desde Vista / Server 2008 en adelante) y realmente parece interesante y confiable.

esto me ha abierto los ojos: https://stackoverflow.com/a/1030752/559144

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top