سؤال

يقوم عميلي باستبدال MS Office بـ OpenOffice في بعض محطات العمل.يقوم برنامجي بتصدير ملف إلى Excel باستخدام الامتداد .xml (باستخدام التنسيق المفتوح) ويفتحه باستخدام البرنامج المرتبط الحالي (باستخدام ShellExecute)

تكمن المشكلة في أن OpenOffice لا يسجل الامتداد .xml المرتبط به.

يعمل الارتباط يدويًا بشكل جيد، ولكنني أرغب في إنشاء .reg أو شيء من هذا القبيل لتغيير الإعداد بسهولة.

أنا أبحث في التسجيل في جهاز الكمبيوتر مع التغيير الذي تم إجراؤه بالفعل، ولكن

"HKEY_CLASSES_ROOT\.xml" 

لا يحتوي المفتاح على أي شيء يشير إلى OpenOffice.

أين يتم تخزين الجمعية؟كيف يمكنني عمل برنامج نصي للقيام بهذا العمل؟

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

المحلول

يتم تخزين الارتباط الحقيقي في المفتاح الذي "HKEY_CLASSES_ROOT\.xml" نقاط ل.

على جهازي، القيمة الافتراضية لهذا المفتاح تقول "xmlfile", ، على الأرجح أن هذا هو نفسه بالنسبة لك.

لذلك دعونا نذهب إلى "HKEY_CLASSES_ROOT\xmlfile".هناك يمكنك رؤية (وتغيير) الأمر الذي سيتم استخدامه لتشغيل هذا النوع من الملفات:

HKEY_CLASSES_ROOT\xmlfile\shell\open\command

يستخدم Windows هذا النوع من إعادة التوجيه لتعيين امتدادات ملفات متعددة لنفس نوع الملف، وبالتالي لنفس التطبيق.

تحت "HKEY_CLASSES_ROOT\xmlfile\shell" هناك العديد من المفاتيح الفرعية التي تشبه "الأفعال" لما يمكنك فعله بالملف.مرة أخرى، القيمة الافتراضية لـ "shell" يقرر المفتاح أي من هذه الأفعال سيتم استخدامه إذا قمت بالنقر المزدوج على الملف.في حالتي هذا هو "open".

خاتمة:

بهذه المعرفة، فإن أسهل طريقة لجعل الارتباط قابلاً للبرمجة النصية هي استخدام regedit لتصدير ملف .reg يحتوي على هذا التغيير، وتطبيقه على الكمبيوتر المستهدف بنقرة مزدوجة أو:

regedit /s new_xml_association.reg

أو (إذا كنت تستخدم نظام XP أو أعلى وتعرف ما تفعله) فاستبدل القيمة الحالية بما يلي:

reg add "HKEY_CLASSES_ROOT\xmlfile\shell\open\command" /ve /d "path\to\program %1"

على أية حال، نظرة أعمق reg add/? ينصح الأمر.الحل الأول أكثر أمانا.

نصائح أخرى

والنظر في assoc قيادة دوس:

<اقتباس فقرة>   

وC:> ASSOC /؟   يعرض أو يعدل ملف التمديد   جمعيات

     

وASSOC [.ext [= [نوع الملف]]]

     

و.ext تحديد ملف   تمديد لربط نوع الملف   مع FILETYPE تحديد ملف   اكتب لربط مع الملف   تمديد

     

ونوع ASSOC بدون معلمات ل   عرض ملف الجمعيات الحالية.   إذا تم استدعاء ASSOC مع مجرد ملف   التمديد، فإنه يعرض الحالي   اقتران الملف لهذا الملف   تمديد. تحديد أي شيء ل   ملف نوع، وسوف الأمر حذف   جمعية للملف   التمديد.

<ع> استخدام ملف الجمعيات في هذه الحالة يبدو وكأنه الشيء الخطأ القيام به. أنت تريد تطبيق لفتح الملف في أوبن أوفيس ولكن ما إذا كان المستخدم يريد ان يترك اقتران الملف لملفات XML يمسها؟ ما إذا كان هناك شيء آخر على نظامهم يعتمد أيضا على أن الجمعية؟ كنت كسر النظام الخاص بهم في هذه الحالة. إذا كنت الشخص IT ثم ربما هذا ما يرام (لا يزال ممارسة البرمجة مشكوك فيها)، ولكن إذا لم يكن ثم هذا أمر سيئ للقيام به.

استخدم تنفيذ أوبن أوفيس COM لفتح الملف بدلا من ذلك.

وجيد مثال بسيط هنا: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html

ولقد عدت للتو عبر هذا في حين يبحثون عن الجواب نفسه. لقد وجدت الحل الأفضل استخدام API ويندوز FindExecutable، التي يمكن استخدامها من C # باستخدام PInvoke.

http://www.pinvoke.net/default.aspx/shell32.findexecutable

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