Возможно, но целесообразно использовать SHFileOperation в службе Windows? Все эти функции API SHxxx в shell32.dll, похоже, были написаны с учетом программ уровня пользователя. Могу ли я быть уверенным, что SHFileOperation не будет отображать GUI когда-либо?Использование SHFileOperation в службе Windows
ответ
Я бы сказал, что это не подходит или целесообразно. Большинство API-интерфейсов shell32 были написаны с базовым пониманием того, что они будут использоваться в интерактивных процессах. Я не думаю, что вы можете гарантировать, что SHFileOperation никогда не отобразит компонент пользовательского интерфейса. В самом деле, если вы посмотрите на IFileOperation (это новый интерфейс Vista, который заменяет SHFileOperation), это ясно сказано:
разоблачает методы копировать, перемещать, переименовывать, создавать и удалять элементы оболочки, а также методы для обеспечить диалоги прогресса и ошибок. Этот интерфейс заменяет функцию SHFileOperation.
Согласно документации SHFILEOPTSTRUCT, вы можете использовать следующие флаги, чтобы предотвратить появление интерфейса:
FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR
или (если вы ориентируетесь Windows Vista), FOF_NO_UI
, который является таким же, как вышесказанное.
Глядя в файл ShellAPI.h
заголовка в Windows SDK, комментарий против FOF_NO_UI
говорит «не отображать любой интерфейс на всех», поэтому из этого я предполагаю, что это нормально использовать SHFileOperation
.
Я должен согласиться: нецелесообразно или целесообразно.
Причиной использования SHFileOperation является выполнение операций с пользовательским интерфейсом и/или которые могут быть обратимы. То есть использование SHFileOperation для удаления файлов собирается помещать файлы в корзину, а не удалять их, позволяя текущему интерактивному пользователю восстановить или отменить выполненную операцию. Поскольку службы работают на неинтерактивном рабочем столе, никто не сможет очистить этот мусорный бак.
У меня была эта проблема, и я работал над реализацией безопасной и надежной сетевой копии файлов между серверами и сетевыми ресурсами (большинство из этих акций основаны на фильтрах CIFS/NetApp), и SHFileOperation
время от времени терпит неудачу.
теперь начал использовать ROBOCOPY
(доступен по умолчанию во всех ОС Microsoft от Vista/Server 2008 вверх) и действительно выглядит интересным и надежным.
это открыло мне глаза: https://stackoverflow.com/a/1030752/559144
- 1. Использование SHFileOperation: Какие ошибки происходят
- 2. Использование Thread.Sleep() в службе Windows
- 3. Использование таймера в службе windows
- 4. Использование MongoDB в службе Windows
- 5. Использование Rx в службе Windows
- 6. Использование RAPI в службе Windows
- 7. Использование MFC в службе Windows?
- 8. команда «чистое использование» в службе Windows
- 9. Использование WPF в IIS7 или службе Windows?
- 10. Использование Azure Queue в службе Windows C#
- 11. Использование веб-ссылки ASMX в службе Windows
- 12. Использование ocx-файла в службе Windows
- 13. SHFileOperation/SHFILEOPSTRUCT
- 14. Использование ObservableCollection в службе
- 15. Неблокирующий SHFileOperation
- 16. Умение SHFileOperation
- 17. Таймер в службе windows
- 18. WCF в службе windows
- 19. Многопоточность в службе Windows
- 20. WebRequest в службе windows
- 21. Threading в службе Windows
- 22. SFTP в службе Windows
- 23. ServiceController в службе Windows
- 24. Lo4net в службе Windows
- 25. SHFileOperation делает каталог «undeletable»
- 26. Получение API Windows «SHFileOperation» рекурсивно удалять файлы в Delphi
- 27. Использование $ scope в службе
- 28. Использование GoogleApiClient в службе
- 29. Использование AsyncTask в службе
- 30. SHFileOperation заменит диалог файла
На данный момент, я согласен. Я думал использовать его, потому что он, похоже, копирует файлы вместе со своим дескриптором безопасности. Стандартный CopyFile этого не делает, поэтому для получения такого же поведения требуется дополнительный код. – Charles 2008-10-14 18:00:54