مشكلة:يتم تشغيل كود .NET من دليل واحد، وليس من دليل آخر، على نفس القرص [مغلق]

StackOverflow https://stackoverflow.com/questions/126228

  •  02-07-2019
  •  | 
  •  

سؤال

تطبيقنا عبارة عن تطبيق مختلط غير مُدار Win32 وتطبيق مُدار .NET 2.0.الجزء Win32 هو الملف الرئيسي القابل للتنفيذ، والذي يقوم في مرحلة ما بتحميل واستضافة وقت تشغيل .NET 2.0 وتحميل بعض الوحدات المُدارة لفتح نوافذ winforms جديدة.

لقد كان لدينا نصيبنا من المشاكل من نوع CASPOL، ولكن اليوم لدينا مشكلة غريبة جدًا وآمل أن يقدم لي شخص ما بعض المؤشرات أو الأفكار، أو في الأساس أي شيء حقًا، من شأنه أن يؤدي إلى شرارة شيء من شأنه أن يساعد لنا حل هذا.

على خادم، يتم الوصول إليه من خلال citrix، إذا كانت ملفات التطبيق موجودة في دليل موجود على سطح مكتب المستخدم الذي قام بتسجيل الدخول حاليًا، وهو مسؤول الخادم/المجال، فإن البرنامج يعمل بشكل جيد.يتم فتح نوافذ ‎.NET كما هو متوقع.

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

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

تلخيص:

  • إذا تم تشغيل البرنامج من U:\Documents and Settings\USERNAME\Desktop\directory، فإنه يعمل
  • إذا تم تشغيله من U:\directory، فلن يحدث ذلك
  • ش:هو قرص فعلي في الخادم
  • لا توجد شذوذات واضحة في ذاكرة التخزين المؤقت لـ NGEN أو GAC
  • تم تثبيت وقت تشغيل .NET الصحيح، وتم تثبيت الملفات الصحيحة لتطبيقنا (وفي الواقع تعمل بشكل جيد إذا تم تشغيلها من موقع سطح المكتب)

أي شخص لديه أي شيء قد يساعد؟

يحرر: مشكلة أعيد السؤال هنا بمعلومات مختلفة/أخرى، و"محلول".

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

المحلول

ستكون أول محاولة لي هي تشغيل مراقب العمليات من MS-Sysinternals، والنظر في المكالمات/النتائج المختلفة في هاتين المناسبتين.ربما يمنحك ذلك بعض التلميحات للعمل عليها (نتائج مختلفة لنفس المكالمة، بعض الأخطاء في تشغيل المشكلة والتي ليست في الحالة الجيدة...)

يمكنك تنزيل مراقب العمليات من MS:http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

نصائح أخرى

لقد واجهت مثل هذه المشكلة على وجه التحديد في وقت ما.بعد سحب الكثير من الشعر وجدت المشكلة.

كن حذرًا للغاية عند استخدام Process.Start() أو أي من هذه الاستدعاءات، لأنه اعتمادًا على كيفية بدء تشغيلها، يمكنها استخدام مجموعة متنوعة من المجلدات كبيئة العمل (المسار الحالي، وبيئة النظام، وما إلى ذلك.

فكرتي الأولى هي أنك بحاجة إلى التأكد من عدم وجود مسارات نسبية/مطلقة محددة في البرنامج للإشارات إلى التجميعات والملفات وما إلى ذلك.والتي تسبب مشاكل عند نقل الدليل الجذر للتطبيق.

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

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