Usando o SHFileOperation em um serviço do Windows

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

1

4 Respostas

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

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

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

Procurando no arquivo de cabeçalho ShellAPI.h no SDK do Windows, o comentário em relação a FOF_NO_UI diz "não exibir nenhuma interface de usuário", portanto, presumo que esteja OK para usar SHFileOperation .

6
adicionado

Eu diria que não é apropriado nem aconselhável. A maioria das APIs do shell32 foi escrita com um entendimento básico de que elas seriam usadas em processos interativos. Eu não acho que há qualquer maneira você pode garantir que SHFileOperation nunca exibirá um componente de interface do usuário. De fato, se você olhar para IFileOperation (que é a nova interface do Vista que substitui o SHFileOperation), afirma claramente:

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

2
adicionado
Neste ponto, eu concordo. Eu estava pensando em usá-lo porque parece copiar arquivos junto com seu descritor de segurança. O padrão CopyFile não, por isso requer código adicional para obter o mesmo comportamento.
adicionado o autor Charles, fonte

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

O principal motivo para usar SHFileOperation é executar operações com uma interface do usuário e/ou reversíveis. Ou seja Usar SHFileOperation para excluir arquivos colocará os arquivos em uma lixeira em vez de excluí-los, permitindo que o usuário interativo atual desfaça a exclusão ou desfaça a operação executada. Como os serviços são executados em uma área de trabalho não interativa, ninguém será capaz de limpar a lixeira.

1
adicionado

Também tive esse problema e trabalho na implementação de uma cópia de arquivo de rede segura e confiável entre servidores e compartilhamentos de rede (a maioria desses compartilhamentos é baseada em arquivador CIFS/NetApp) e SHFileOperation falha de tempos em tempos.

agora começou a usar o ROBOCOPY (disponível por padrão em todos os sistemas operacionais da Microsoft do Vista/Server 2008 para cima) e realmente parece interessante e confiável.

this has opened my eyes: https://stackoverflow.com/a/1030752/559144

0
adicionado
Técnicos em Informática
Técnicos em Informática
2 517 dos participantes

Um grupo com foco em assuntos técnicos, hardware, servidores e resolução de problemas em Windows e Linux. Canal: @dicasdeti