質問

可能ですが、Windows サービス内で SHFileOperation を使用するのは適切でしょうか?shell32.dll 内の SHxxx API 関数はすべて、ユーザー レベルのプログラムを念頭に置いて作成されているようです。SHFileOperation が GUI を表示しないと確信できますか?

役に立ちましたか?

解決

言うのは、それが適切でもお勧めでもないということではありません。 shell32 APIのほとんどは、インタラクティブプロセスで使用されるという基本的な理解を持って書かれています。 SHFileOperationがUIコンポーネントを表示しないことを保証できる方法はないと思います。実際、 IFileOperation (SHFileOperationに代わる新しいVistaインターフェースです)には次のように明記されています:

  

シェルアイテムをコピー、移動、名前変更、作成、削除するメソッドと、進行状況およびエラーダイアログを提供するメソッドを公開します。このインターフェイスは、SHFileOperation関数を置き換えます。

他のヒント

SHFILEOPTSTRUCT のドキュメントによると、次のフラグを使用して、UIが表示されないようにすることができます。

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

または(Windows Vistaを対象にしている場合)、 FOF_NO_UI 。これは上記と同じです。

Windows SDKの ShellAPI.h ヘッダーファイルを見ると、 FOF_NO_UI に対するコメントは「UIをまったく表示しない」と言うので、これから SHFileOperation を使用しても問題ないと思います。

同意する必要があります。適切または推奨されません。

SHFileOperationを使用する主な理由は、UIで操作を実行すること、および/または元に戻すことができることです。つまりSHFileOperationを使用してファイルを削除すると、ファイルを削除するのではなく、ごみ箱に入れて、現在のインタラクティブユーザーが削除を取り消したり、実行した操作を元に戻したりできます。 サービスは非対話型デスクトップで実行されるため、誰もそのごみ箱を空にすることはできません。

私もこの問題を抱えており、サーバーとネットワーク共有(これらの共有のほとんどはCIFS / NetAppファイラーベース)の間で安全で信頼性の高いネットワークファイルコピーを実装することに取り組んでいました。 SHFileOperation 時々失敗します。

今使い始めました ROBOCOPY (Vista/Server 2008 以降のすべての Microsoft OS でデフォルトで利用可能) とても興味深く信頼できそうです。

これは私の目を開かせてくれました: https://stackoverflow.com/a/1030752/559144

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top