سؤال

هل يعرف أحد كيفية الحصول على مكتبات MS Office 2007 .NET C# Interop للعمل مع نظام التشغيل Vista؟

لدي تطبيق .NET C# الذي قمت بإعداده لتشغيله كخدمة Windows.سيقوم هذا البرنامج بفتح قالب Word أو Excel حسب الموقف وتعديل محتوياته ثم حفظ المستند مرة أخرى.كل هذا كان يعمل بشكل رائع عندما كنت أفعل ذلك على جهاز يعمل بنظام التشغيل Windows Server 2003 أو XP باستخدام Office 2007.عندما قمت بنقل كل شيء إلى مربع Server 2008، توقف كل شيء عن العمل.في Excel على سبيل المثال، أحصل على استثناء COM يخبرني أنه لا يمكن فتح ملف Excel عندما يكون الملف موجودًا بشكل واضح ويمكنني فتحه جيدًا عند القيام بذلك يدويًا.تعمل خدمة Windows ضمن حساب المستخدم نفسه الذي قمت بتسجيل الدخول به إلى الجهاز وهذا الحساب هو المسؤول.

هل لدى أي شخص أي فكرة عما يجب القيام به؟

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

المحلول

ويجب تجنب حقا تشغيل عملاء المكتب كما التطبيقات جانب الملقم. النظر في استخدام XML كتنسيق ملف (XLSX ل Office 2007 أو باستخدام المصنف XSD Excel ل(إلى حد ما) الإصدارات القديمة.) ثم هل سيفرج عنهم من استخدام API اكسل على الخادم.

نصائح أخرى

في نظامي التشغيل Vista وWindows Server 2008، تعمل الخدمات بطريقة تسمى Session0.قبل نظام التشغيل Vista، كانت البرامج العادية تعمل في Session0 جنبًا إلى جنب مع الخدمات.

وهذا يعني أن Session0 أصبح أرضًا قاحلة بدون سطح مكتب حيث لا تستطيع خدماتك حتى الوصول إلى explorer.exe.أنا متأكد تمامًا من أن المشكلة تكمن في أن تطبيقات Office تتوقع أن تكون قادرة على الوصول إلى بعض المكونات الموجودة عادةً على سطح المكتب.

منذ Excel و Word وما إلى ذلك.مدعومة فقط في جلسة تعليم سطح المكتب، وليس لديك سوى عدد قليل من الخيارات:

  1. قم بتعيين مربع اختيار سطح المكتب في علامة التبويب تسجيل الدخول الخاصة بخصائص الخدمة الخاصة بك وادعو الله أن يرضي آلهة المكتب.(ربما لن يحدث ذلك).
    • بعد تجربة 1، راجع التعليمات البرمجية الخاصة بك وحاول إزالة/التغلب على أي شيء يتسبب في تعطله.
  2. استخدم التحكم عن بعد/WCF لإنشاء خادم يقوم بإجراء التشغيل المتداخل، وجعل خدمتك تتواصل معه.
    • ستحتاج إلى مستخدم تفاعلي مسجل الدخول ويحتاج المستخدم إلى بدء تطبيق الخادم بطريقة ما.ربما من الأفضل استخدام التشغيل التلقائي.
    • يمكنك محاولة تشغيل تسجيل الدخول التلقائي. http://support.microsoft.com/kb/324737
  3. حاول انتحال شخصية مستخدم مسجل الدخول باستخدام CreateProcessAsUser والأصدقاء.
    • ملحوظة:لا أعرف مدى نجاح هذا ما لم يتم تسجيل دخول المستخدم بالفعل، لذلك قد لا يكون أكثر فائدة من 2 أعلاه، ويكون تنفيذه أصعب بكثير.(يحتاج إلى P/استدعاء)
  4. أعد كتابة برنامجك لاستخدام OpenXML sdk أو استخدم شيئًا مثل SpreadsheetGear.

والحصول على installables من http://www.microsoft. كوم / تنزيل / details.aspx؟ FamilyID = 59daebaa-bed4-4282-a28c-b864d8bfa513 وdisplaylang = أون

وتثبيته على جهازك والرجوع التفوق دلل في الحل ونأمل انه ينبغي العمل.

هل لديك التجميعات إمكانية التشغيل المتداخل الأساسية المثبتة على الخادم؟ تقع هذه عادة في GAC وغير المدرجة في الدليل بن عند بناء البرنامج، لذلك فإنها تحتاج إلى تثبيت محليا على الملقم.

وهذا مجرد تخمين، ولكن قد يكون UAC. وأنا أعلم أن مميزة (المشرف) التطبيقات والتطبيقات لا يمكن للمستخدم إرسال رسائل لبعضهم البعض أو الاتصال بأي شكل من الأشكال. وخدمتكم تشغيل كمسؤول، ولكن سطح المكتب الخاص بك تشغيل كمستخدم عادي تحت UAC على الرغم من أنها هي نفس المستخدم. وأتوقع أيضا أن مكتب والتي تصل أجزاء (قبل تحميلها) من نفسها عند بدء التشغيل والتي من شأنها أن تكون قيد التشغيل كمستخدم عادي.

وحاول إيقاف UAC ومعرفة ما اذا كان ذلك يساعد. إذا كان الأمر كذلك، على الأقل كنت تعرف ما هو عليه.

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

وشيء أن نتذكر حول Office. إلى x86 لها فقط، لذلك إذا كان لديك إنشاء تطبيق في x64 و سوف لن تكون قادرة على الوصول إلى كائنات COM الأساسي مكتب. سوف تحتاج إلى ترجمة التطبيق الخاص بك في x86 و ثم انها ستعمل.

ويمكنك القيام بذلك عن طريق الذهاب إلى خصائص المشروع الخاص بك، واختيار إلى x86 تحت علامة التبويب البناء في الاستوديو المرئي.

وهذا هو كل شيء على افتراض أن التطبيق يتم تطويره / تشغيل في بيئة إلى x64 وهذا هو.

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