تم إطلاق JVM عبر CreateProcess() يفقد مكتبة Classpath
سؤال
أقوم بتشغيل سطر الأوامر (العملية) التالي من برنامج Windows VC++ 6 باستخدام CreateProcess (أو _spawnv()):
- java -cp c:\dir\updates.jar;c:\dir\main.jar الرئيسي
ولا تتم قراءة تحديثات الفصل الدراسي في Updates.jar (التي تتجاوز بعضها في main.jar) أو العثور عليها.يبدو الأمر كما لو أنه لا يمكن العثور على مكتبة Updates.jar أو قراءتها.
إذا قمت بتشغيل نفس السطر من اختصار، أو من سطر الأوامر الصحيح، فسيتم العثور على كل شيء وتنفيذه بشكل صحيح.
إذا قمت بتشغيل JVM من سطر الأوامر، وأبقيته قيد التشغيل، ثم قمت بتشغيل كعب الروتين القابل للتنفيذ (أعلاه)، فكل شيء يعمل بشكل جيد أيضًا.(وهذا يجعل الأمر يبدو وكأن المشكلة تتعلق بحقوق الملف).
أي فكرة سيكون موضع تقدير كبير!
--إدوارد
المحلول
حاول استخدام الأداة المساعدة FileMon من Microsoft لمعرفة ما يحدث.قم بتعيين عامل تصفية التضمين على "التحديثات" للتركيز على المشكلة.
http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx
نصائح أخرى
هل جربت هذا على جهاز آخر؟نظام تشغيل آخر؟ما JVM الذي تستخدمه؟هل جربت JVMs مختلفة؟
هل يمكنك تزويدنا بمثال بسيط يوضح المشكلة؟
شكرًا jdigital!
لقد جربت FileMon وأظهر لي الخطأ الذي كنت أفعله.يحتوي الاستدعاء القابل للتنفيذ CreateProcess() على مؤشر ملف غير مغلق إلى Updates.jar من محاولة نسخ تحديث JAR سابقًا.تعليمات برمجية سيئة تعمل في بيئة الإنتاج، ولكن ليس في بيئة الاختبار.