Использование SHFileOperation в службе Windows - PullRequest
1 голос
/ 14 октября 2008

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

Ответы [ 4 ]

6 голосов
/ 14 октября 2008

Согласно документации SHFILEOPTSTRUCT , вы можете использовать следующие флаги для предотвращения появления любого пользовательского интерфейса:

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

или (если вы нацелены на Windows Vista), FOF_NO_UI, что соответствует приведенному выше.

Глядя в заголовочный файл ShellAPI.h в Windows SDK, комментарий к FOF_NO_UI говорит «вообще не отображать пользовательский интерфейс», поэтому я предполагаю, что можно использовать SHFileOperation.

2 голосов
/ 14 октября 2008

Я бы сказал, не это не подходит или не рекомендуется. Большинство API shell32 были написаны с базовым пониманием того, что они будут использоваться в интерактивных процессах. Я не думаю, что есть какой-то способ гарантировать, что SHFileOperation никогда не отобразит компонент пользовательского интерфейса. На самом деле, если вы посмотрите на IFileOperation (который является новым интерфейсом Vista, который заменяет SHFileOperation), он ясно заявляет:

Предоставляет методы для копирования, перемещения, переименования, создания и удаления элементов оболочки, а также методы для предоставления диалогов о ходе выполнения и ошибках. Этот интерфейс заменяет функцию SHFileOperation.

1 голос
/ 15 октября 2008

Я должен согласиться: не подходит или не рекомендуется.

Основной причиной использования SHFileOperation является выполнение операций с пользовательским интерфейсом и / или которые являются обратимыми. То есть использование SHFileOperation для удаления файлов приведет к тому, что файлы будут помещены в корзину вместо их удаления, что позволит текущему интерактивному пользователю восстановить или отменить выполненную операцию. Поскольку службы работают на неинтерактивном рабочем столе, никто никогда не сможет очистить эту корзину.

0 голосов
/ 02 ноября 2012

У меня также была эта проблема, и я работал над реализацией безопасного и надежного сетевого копирования файлов между серверами и сетевыми ресурсами (большинство этих общих ресурсов основаны на CIFS / NetApp filer), и SHFileOperation время от времени дает сбой.

теперь начал использовать ROBOCOPY (доступно по умолчанию во всех ОС Microsoft от Vista / Server 2008 и выше) и действительно выглядит интересно и надежно.

это открыло мне глаза: https://stackoverflow.com/a/1030752/559144

...