ডাব্লুপিএফ অ্যাপ্লিকেশন থেকে অ্যাপ্লিকেশনটির ডিরেক্টরি পাওয়া


170

আমি অ্যাপডোমাইন সহ উইন্ডোজ ফর্মগুলির সমাধান খুঁজে পেয়েছি তবে ডাব্লুপিএফ Applicationঅবজেক্টের সমতুল্য কী হবে ?

উত্তর:


329

একটি পদ্ধতি:

System.AppDomain.CurrentDomain.BaseDirectory

এটি করার আরেকটি উপায় হ'ল:

System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)

আহ, ধন্যবাদ অ্যাপডোমেনকে অবশ্যই কোনওভাবে উপেক্ষা করা উচিত। আমি এটি খুঁজছিলাম, আসলে ...
জো

3
@ হেলেন: উক্তিগুলি থেকে বিচার করা, এটি অবশ্যই একটি দুর্দান্ত উত্তর। তবে, উত্তরটি অ্যাপটি পাওয়ার দুটি উপায় রয়েছে ways তারা দুজনেই কি সমানভাবে কাজ করবে?
ক্রিস্টোফার লেট

21
আমি প্রথম বিকল্পটি ব্যবহার করব। এটি সহজ দেখাচ্ছে, কোনও পদ্ধতিতে কল নেই এবং পড়ার সময় লাইনটি আসলে কী করে তা নিয়ে সন্দেহের কারণ হয় না।
ফিলিপ করুন

3
আমি ডাব্লুসিএফ পরিষেবাতে, ডাব্লুপিএফ অ্যাপ্লিকেশন এবং একটি ক্লাস লাইব্রেরি প্রকল্পে প্রথম পদ্ধতিটি ব্যবহার করেছি এবং সবগুলিতে ভাল কাজ করেছি।
Apostrofix

1
নেটকোর এবং নেট স্ট্যান্ডার্ডের জন্য আমি দ্বিতীয়টি সুপারিশ করব, কারণ অ্যাপডোমেন ২.০-এ যুক্ত হয়েছিল এবং সর্বদা প্রত্যাশার মতো সেট করা যায়নি
সিডিie

28

এখানে অন্য একটি:

System.Reflection.Assembly.GetExecutingAssembly().Location

2
এইটি ছায়া-অনুলিপি করার পরে অবস্থানটি পেয়ে যায় , যেমন দস্তাবেজের বিবরণে । আমি গ্রহণযোগ্য উত্তরের পরামর্শগুলি ছায়া-অনুলিপি দ্বারা প্রভাবিত হয়েছে কিনা তা আমি আসলে নিশ্চিত নই।
ক্রিস্টোফার লেট

2
এটি আমাকে যে ডিএলএল কল করছিল তার সাব ডিরেক্টরিটি দিয়েছে, মূল প্রোগ্রাম ডিরেক্টরি নয়।
স্ট্রাটটন

7

আপনি কমান্ড লাইন আর্গুমেন্টের প্রথম যুক্তিটিও ব্যবহার করতে পারেন:

String exePath = System.Environment.GetCommandLineArgs()[0]


1
তবে নোট করুন যে একটি "দুষ্ট" অ্যাপ্লিকেশন তার কমান্ড লাইন আর্গুমেন্টগুলিকে সংশোধন করতে পারে।
ড্যানিয়েল রোজ

@ ড্যানিয়েল: কেন এটি নিজেই করবে? বা আপনি একটি আলাদা অ্যাপ্লিকেশন বোঝাতে চান?
মের্লিন মরগান-গ্রাহাম

1
@ মেরলিন: ব্লগস.এমএসএনএন / বি / ওল্ডনিউথিং / অর্চিভ / ২০০৯/11/25/ 9928372.aspx আমি উদ্ধৃত করব: এটি একটি "প্রক্রিয়াটির সূচনা কোডের সুবিধামত প্যারামিটার"। সুতরাং আপনি ইচ্ছাকৃতভাবে বা অজান্তে সেই স্মৃতি অবস্থানটি সংশোধন করতে পারেন।
ড্যানিয়েল রোজ

1
@ ড্যানিয়েল: কে পারবে? আর একটি প্রক্রিয়া, না একই প্রক্রিয়া? আপনি যদি নিজেকে পায়ে গুলি করেন তবে ট্র্যাক ডাউন করা সহজ হওয়া উচিত। আমি এটিকে কম অশুভ, এবং আরও বোকা বলব :) যদি অন্য কোনও প্রক্রিয়া এটি করতে পারে তবে তা আরও আকর্ষণীয়। সম্পাদনা করুন: চলমান প্রোগ্রামের কমান্ড লাইনটি সংশোধন করার বিষয়ে আমি এই নিবন্ধটিতে কিছুই দেখতে পাচ্ছি না - কেবলমাত্র যে প্রবর্তন প্রক্রিয়াটি এতে প্রবেশ করবে (কমান্ড লাইনটি পরিবর্তন করার জন্য এটি প্রবর্তন প্রক্রিয়াটি অনাকাঙ্ক্ষিত কিনা তা নিশ্চিত নয়), এবং আপনি এটি অনুসন্ধান করতে পারেন ডাব্লুএমআই এর মাধ্যমে
মের্লিন মরগান-গ্রাহাম

@ মের্লিনমর্গান-গ্রাহাম একটি দূষিত অ্যাপ্লিকেশন মেমরি ঠিকানাটি পরিবর্তন করতে পারে এবং পরিবর্তে আপনার অ্যাপ্লিকেশনটিকে তাদের ক্ষতিকারক অ্যাপ্লিকেশনটির পরিবর্তে অন্য কোনওটি চালাতে বাধ্য করতে পারে। এটি মন্দ, কারণ আসুন আমরা বলি যে তাদের অ্যাপ্লিকেশনটি একটি keylogger এবং তারা চান যে আপনি সেপসিফিক অ্যাপ্লিকেশনটি খোলার সাথে সাথে এটি সক্রিয় করা হবে। সুতরাং তাদের কোডে তারা আপনার আবেদনের নাম ক্যাপচার করবে, পটভূমিতে তাদের কীলগারটি চালাবে এবং তারপরে আপনার অ্যাপ্লিকেশনটি চালাবে। ব্যবহারকারী নিখুঁত হবে। নিবন্ধটি এটি ব্যাখ্যা করে তবে এটি কীভাবে করবেন তা আপনাকে জানায় না। আপনি কি এটি খুঁজছিলেন হতে পারে?
pqsk

6

আমি string baseDir = Environment.CurrentDirectory;আমার জন্য কেবল এবং এর কাজটি ব্যবহার করেছি।

শুভকামনা

সম্পাদনা:

আমি এই ধরণের ভুলটি মুছতে চাইতাম তবে আমি এটিকে সম্পাদনা করতে পছন্দ করি কারণ আমি মনে করি যে এই উত্তরের বিয়োগ পয়েন্টটি মানুষকে ভুল উপায় সম্পর্কে জানতে সহায়তা করে। :) আমি বুঝতে পেরেছি যে উপরের সমাধানটি কার্যকর নয় এবং আমি এটিকে string appBaseDir = System.AppDomain.CurrentDomain.BaseDirectory; অন্যান্য উপায় হিসাবে পরিবর্তন করেছি :

1. string baseDir =   
    System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
 2. String exePath = System.Environment.GetCommandLineArgs()[0];
 3. string appBaseDir =    System.IO.Path.GetDirectoryName
    (System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);

শুভকামনা


3
এটি এখনকার কার্যনির্বাহী ডিরেক্টরি। এটি অ্যাপ্লিকেশন ডিরেক্টরিটির সাথে মিলে যেতে পারে তবে সেগুলি পৃথক ধারণাগুলি (এবং সবচেয়ে গুরুত্বপূর্ণ, কার্যকরী ডিরেক্টরিটি পরিবর্তন করতে পারে, যেমন আপনার যদি একটি সাধারণ ফাইল ডায়ালগ খোলা থাকে)।
জোয়

1
@ জোয়ি আপনি ঠিক বলেছেন আমি এটিকে এতে পরিবর্তন করেছি: স্ট্রিং অ্যাপবেসডির = সিস্টেম.অ্যাপডোমাইন.কন্টেনডোমাইন.বেসডাইরেক্টরি; ধন্যবাদ।
কিউমাস্টার


3

এটা চেষ্টা কর. ভুলবেন না using System.Reflection

string baseDir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

1

আমি এটি চেষ্টা করেছি:

    label1.Content = Directory.GetCurrentDirectory();

এবং ডিরেক্টরি পেতে।


এটি বর্তমান ওয়ার্কিং ডিরেক্টরিটি পায় যা প্রক্রিয়া ডিরেক্টরি থেকে পৃথক হতে পারে।
থ্রাকা

আমি অনুমান করি যে আমাকে ডিরেক্টরিকে মূল্যায়ন করতে হবে। আরও অনেক কিছু। সংশোধনের জন্য @ থ্রাকা আপনাকে ধন্যবাদ।
পল

0

আপনি System.Windows. Forms থেকে নিখরচায় অ্যাপ্লিকেশন.স্টার্টআপপাথ ব্যবহার করতে পারেন, তবে আপনাকে অবশ্যই System.Windows.forms সমাবেশের জন্য রেফারেন্স যুক্ত করতে হবে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.