Pergunta

É possível, mas é apropriado usar SHFileOperation em um serviço do Windows?Todas essas funções da API SHxxx em shell32.dll parecem ter sido escritas com programas de nível de usuário em mente.Posso ter certeza de que SHFileOperation nunca exibirá a GUI?

Foi útil?

Solução

Eu diria que não, não é apropriado ou aconselhável.A maioria das APIs shell32 foram escritas com o entendimento básico de que seriam usadas em processos interativos.Não acho que haja alguma maneira de garantir que SHFileOperation nunca exibirá um componente de UI.Na verdade, se você olhar Operação IFile (que é a nova interface do Vista que substitui SHFileOperation), afirma claramente:

Expõe métodos para copiar, mover, renomear, criar e excluir itens do Shell, bem como métodos para fornecer caixas de diálogo de progresso e de erro.Esta interface substitui a função SHFileOperation.

Outras dicas

De acordo com Shfileoptstruct Documentação, você pode usar os seguintes sinalizadores para impedir que qualquer interface do usuário apareça:

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

ou (se você está segmentando o Windows Vista), FOF_NO_UI, que é o mesmo que acima.

Olhando no ShellAPI.h arquivo de cabeçalho no Windows SDK, o comentário contra FOF_NO_UI diz "Não exiba nenhuma interface do usuário", então isso suponho que não há problema em usar SHFileOperation.

Eu tenho que concordar: não é apropriado ou aconselhável.

O motivo do PrincPal para usar o Shfileoperation é executar operações com uma interface do usuário e/ou que são reversíveis. Ou seja, usando o shfileoperation para excluir arquivos, colocará os arquivos em uma lixeira em vez de excluí -los, permitindo que o usuário interativo atual não esteja, ou desfazer a operação executada. Como os serviços são executados em uma área de trabalho não interativa, ninguém jamais poderá limpar a lixeira.

Eu também tinha esse problema e trabalhando na implementação de uma cópia de arquivo de rede segura e confiável entre servidores e compartilhamentos de rede (a maioria dessas ações é baseada no CIFS / NetApp Filer) e SHFileOperation falha de tempos em tempos.

agora começou a usar ROBOCOPY (Disponível por padrão em todo o Microsoft OS do Vista/Server 2008 para cima) e realmente parece interessante e confiável.

Isso abriu meus olhos: https://stackoverflow.com/a/1030752/559144

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top