باستخدام SHFileOperation داخل خدمة Windows

من الممكن ، ولكن هل من المناسب استخدام SHFileOperation داخل خدمة Windows؟ يبدو أن كافة وظائف API SHxxx في shell32.dll تمت كتابتها مع برامج مستوى المستخدم في الاعتبار. هل يمكنني أن أكون على يقين من أن SHFileOperation لن يعرض واجهة المستخدم الرسومية على الإطلاق؟

1

4 إجابة

وفقًا لوثائق SHFILEOPTSTRUCT ، يمكنك استخدام الأعلام التالية لمنع ظهور أي واجهة مستخدم:

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

أو (إذا كنت تستهدف Windows Vista) ، FOF_NO_UI ، وهو نفس ما ورد أعلاه.

بالنظر إلى ملف الرأس ShellAPI.h في Windows SDK ، يقول التعليق على FOF_NO_UI "لا تعرض أي واجهة مستخدم على الإطلاق" ، لذلك أفترض أنه موافق لاستخدام SHFileOperation .

6
وأضاف

أود أن أقول ، ليس من المناسب أو المستحسن. تمت كتابة معظم API32 shell32 مع فهم أساسي أنه سيتم استخدامها في العمليات التفاعلية. لا أعتقد أن هناك أي طريقة يمكنك ضمان عدم عرض SHFileOperation مكون UI. في الواقع ، إذا نظرت إلى IFileOperation (وهو واجهة Vista الجديدة التي تحل محل SHFileOperation) ، ينص بوضوح على ما يلي:

يعرض أساليب لنسخ عناصر Shell ونقلها وإعادة تسميتها وإنشائها وحذفها بالإضافة إلى طرق لتوفير تقدم ومربعات أخطاء. تستبدل هذه الواجهة الدالة SHFileOperation.

2
وأضاف
في هذه المرحلة ، أوافق. كنت أفكر في استخدامه لأنه يبدو أن نسخ الملفات جنبا إلى جنب مع واصف الأمان الخاصة بهم. معيار CopyFile لا ، لذلك يتطلب رمز إضافي للحصول على نفس السلوك.
وأضاف المؤلف Charles, مصدر

يجب أن أوافق: غير مناسب أو مستحسن.

سبب prinicpal لاستخدام SHFileOperation هو إجراء عمليات باستخدام واجهة مستخدم و/أو التي يمكن عكسها. أي. باستخدام SHFileOperation لحذف الملفات سيتم وضع الملفات في سلة المهملات بدلاً من حذفها مما يسمح للمستخدم التفاعلي الحالي بإلغاء الحذف ، أو التراجع عن العملية التي يتم تنفيذها. نظرًا لتشغيل الخدمات على سطح مكتب غير تفاعلي ، فلن يتمكن أي شخص من مسح سلة المحذوفات.

1
وأضاف

لقد واجهت هذه المشكلة أيضًا وكنت أعمل على تنفيذ نسخة ملف آمن وموثوق للشبكة بين الخوادم ومشاركات الشبكة (معظم هذه المشاركات هي CIFS/NetApp filer) وفشل SHFileOperation من وقت لآخر.

بدأت الآن باستخدام ROBOCOPY (متوفرة بشكل افتراضي في جميع أنظمة تشغيل Microsoft من Vista/Server 2008 إلى أعلى) وتبدو مثيرة بالفعل وموثوقة.

this has opened my eyes: https://stackoverflow.com/a/1030752/559144

0
وأضاف