سؤال

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

هل كانت مفيدة؟

المحلول

أود أن أقول ، ليس هذا غير مناسب أو مستحسن. تمت كتابة معظم واجهات برمجة تطبيقات shell32 بفهم أساسي بأنه سيتم استخدامه في العمليات التفاعلية. لا أعتقد أن هناك أي طريقة يمكنك من خلالها ضمان أن shfileOperation لن يعرض أبدًا مكون واجهة المستخدم. في الواقع ، إذا نظرت إلى IfileOperation (وهي واجهة 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.

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

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

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

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

هذا فتح عيني: https://stackoverflow.com/a/1030752/559144

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top