Domanda

È possibile, ma è appropriato utilizzare SHFileOperation all'interno di un servizio Windows? Tutte quelle funzioni dell'API SHxxx in shell32.dll sembrano essere state scritte pensando ai programmi a livello di utente. Posso essere certo che SHFileOperation non visualizzerà mai la GUI?

È stato utile?

Soluzione

Direi che non è appropriato o consigliabile. La maggior parte delle API shell32 sono state scritte con una comprensione di base che sarebbero state utilizzate nei processi interattivi. Non credo che ci sia modo di garantire che SHFileOperation non visualizzerà mai un componente dell'interfaccia utente. Infatti, se si guarda a IFileOperation (che è la nuova interfaccia di Vista che sostituisce SHFileOperation), indica chiaramente:

  

Espone metodi per copiare, spostare, rinominare, creare ed eliminare elementi Shell, nonché metodi per fornire finestre di dialogo di avanzamento ed errore. Questa interfaccia sostituisce la funzione SHFileOperation.

Altri suggerimenti

Secondo la SHFILEOPTSTRUCT , puoi utilizzare i seguenti flag per impedire la visualizzazione di qualsiasi interfaccia utente:

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

o (se si utilizza Windows Vista), FOF_NO_UI , che è lo stesso del precedente.

Guardando nel file di intestazione ShellAPI.h nell'SDK di Windows, il commento contro FOF_NO_UI dice " non visualizzare alcuna UI affatto " ;, quindi da questo Presumo che sia OK usare SHFileOperation .

Devo essere d'accordo: non appropriato o consigliabile.

Il motivo principale per utilizzare SHFileOperation è eseguire operazioni con un'interfaccia utente e / o reversibili. Cioè l'utilizzo di SHFileOperation per eliminare i file inserirà i file in un cestino anziché eliminarli consentendo all'utente interattivo corrente di annullare l'eliminazione o annullare l'operazione eseguita. Man mano che i servizi vengono eseguiti su un desktop non interattivo, nessuno sarà mai in grado di cancellare il cestino.

Ho riscontrato anche questo problema e sto lavorando all'implementazione di una copia di file di rete sicura e affidabile tra server e condivisioni di rete (la maggior parte di queste condivisioni sono basate su filer CIFS / NetApp) e SHFileOperation non riesce di tanto in tanto tempo.

ora ha iniziato a utilizzare ROBOCOPY (disponibile per impostazione predefinita in tutti i sistemi operativi Microsoft da Vista / Server 2008 in poi) e sembra davvero interessante e affidabile.

questo mi ha aperto gli occhi: https://stackoverflow.com/a/1030752/559144

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top