PDA

View Full Version : سوال: مشکل در اجرای یک console app با استفاده از command prompt



red.sahba
شنبه 21 تیر 1393, 13:46 عصر
با سلام
من یک console app را با استفاده از visual studio 2012 طراحی کرده ام. در این برنامه از یک سری dll های کدباز برای پردازش متن استفاده شده است. در صورتی که برنامه را با f5 اجرا کنم و یا روی فایل اجرایی برنامه exe. کلیک نمایم. برنامه به درستی اجرا می شود.
اما در صورتی که بخواهم از طریق command prompt برنامه را اجرا کنم با پیام خطای زیر مواجه می شوم.
"Unhandled Exception : System.Exception :Could not load dictionary file! at" و در ادامه همه ی خطوطی که توابع موجود در dll ها در آن صدا زده شده است را نمایش می دهد.
لطفا برای حل این مشکل مرا ارهنمایی کنید.:ناراحت:

plus
شنبه 21 تیر 1393, 14:30 عصر
مطمئن نیستم اما این خط رو در ابتدای برنامه بگذارین ببینید مشکل حل میشه؟ اگه حل شد بعد باید بررسی بشه ببینید چرا اینطوریه:

Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(Environment.GetCom mandLineArgs()[0]);

red.sahba
یک شنبه 22 تیر 1393, 10:05 صبح
خیلی ممنون با همین کد به درستی کار کرد.
ممکنه دلیلش رو هم توضیح بدید که چرا قبل از به کار بردن این کد برنامه با خطا مواجه بود؟

plus
یک شنبه 22 تیر 1393, 13:52 عصر
توی ویندوز (و احتمالا سیستم عامل های دیگه) یه موضوعی هست به اسم Current Directory یا دیرکتوری جاری که در واقع آدرس یک دیرکتوری هست که به عنوان مسیر پیشفرض برای اجرای دستورات و برنامه ها بکار برده میشه.
این مسیر، مسیر ثابتی نیست و به راحتی قابل تغییر هست.
وقتی شما فایلتون رو از طریق VS اجرا میکردین، مسیر جاری، همون مسیر فایل Exe قرار داده میشده و برنامه شما که میخواسته دنبال DLL های استفاده شده بگرده توی مسیر جاری دنبالشون میگشته و چون مسیر جاری برابر مسیر exe بوده و DLL ها هم کنار exe، این فایل ها رو پیدا میکرده.
ولی وقتی شما از طریق Command Prompt برنامه رو اجرا میکنید ممکنه Current Directory چیز دیگه ای باشه.برای مثال:

C:\Users\MyUser>

و وقتی از اینجا فایل exe رو اجرا میکنید همین مسیر به عنوان Current Directory به فایل داده میشه و فایل DLL ها رو پیدا نمیکرده.من با Environment.CurrentDirectory مسیر جاری رو برابر مسیر فایل exe قرار دادم.
البته در Command Prompt میتونید با دستور cd مسیر جاری رو تغییر بدین، ولی خوب اگه شما پیگیر باشید باید کدهاتونو بررسی کنید که به Current Directory وابسته نباشن.