可能ですが、Windows サービス内で SHFileOperation を使用するのは適切ですか? shell32.dll 内のこれらの SHxxx API 関数はすべて、ユーザー レベルのプログラムを念頭に置いて記述されているようです。SHFileOperation が GUI を表示しないと確信できますか?
4 に答える
SHFILEOPTSTRUCTのドキュメントによると、次のフラグを使用してUIが表示されないようにすることができます。
FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR
または(Windows Vistaをターゲットにしている場合)、、FOF_NO_UI
これは上記と同じです。
ShellAPI.h
Windows SDKのヘッダーファイルを見ると、FOF_NO_UI
「UIをまったく表示しない」というコメントが寄せられているので、このことから、を使用しても問題ないと思いますSHFileOperation
。
私は、それが適切でも賢明でもないとは言いません。ほとんどの shell32 API は、インタラクティブなプロセスで使用されるという基本的な理解に基づいて作成されました。SHFileOperation が UI コンポーネントを表示しないことを保証できる方法はないと思います。実際、IFileOperation (SHFileOperation を置き換える新しい Vista インターフェース) を見ると、次のように明確に述べられています。
シェル項目をコピー、移動、名前変更、作成、および削除するメソッドと、進行状況およびエラー ダイアログを提供するメソッドを公開します。このインターフェイスは、SHFileOperation 関数を置き換えます。
私は同意しなければなりません: 適切ではないか、またはお勧めできません。
SHFileOperation を使用する主な理由は、UI で操作を実行するため、および/または元に戻すことができる操作です。つまり、SHFileOperation を使用してファイルを削除すると、ファイルが削除されるのではなく、ファイルがごみ箱に置かれ、現在の対話型ユーザーが削除を取り消したり、実行した操作を元に戻したりできるようになります。サービスは非対話型のデスクトップで実行されるため、だれもごみ箱を空にすることはできません。
私もこの問題を抱えており、サーバーとネットワーク共有(これらの共有のほとんどはCIFS / NetAppファイラーベース)の間に安全で信頼性の高いネットワークファイルコピーを実装する作業をしていて、SHFileOperation
時々失敗します。
現在使用を開始してROBOCOPY
おり(Vista / Server2008以降のすべてのMicrosoftOSでデフォルトで使用可能)、本当に面白くて信頼できるように見えます。
これは私の目を開いた:https ://stackoverflow.com/a/1030752/559144