Вопрос

Это возможно, но уместно ли использовать SHFileOperation в службе Windows?Все эти функции API SHxxx в shell32.dll, похоже, были написаны с учетом программ пользовательского уровня.Могу ли я быть уверен, что SHFileOperation никогда не отобразит графический интерфейс?

Это было полезно?

Решение

Я бы сказал, нет, это неуместно или нецелесообразно.Большинство API-интерфейсов shell32 были написаны с базовым пониманием того, что они будут использоваться в интерактивных процессах.Я не думаю, что есть какой-либо способ гарантировать, что SHFileOperation никогда не отобразит компонент пользовательского интерфейса.На самом деле, если вы посмотрите на Ifilоперация (это новый интерфейс 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top