আমি কীভাবে সি # তে বর্তমান এক্সিকিউটেবলের নাম পাব?


355

আমি বর্তমানে চলমান প্রোগ্রামের নাম পেতে চাই, এটিই প্রোগ্রামটির এক্সিকিউটেবল নাম। সি / সি ++ এ আপনি এটি থেকে পান args[0]


এক্সিকিউটেবল কি এক্সই ফাইল (উইন্ডোজ ফর্ম, ডাব্লুপিএফ অ্যাপ্লিকেশন)? একটি প্রোগ্রাম একটি ডেস্কটপ অ্যাপ (উইনফোর্ডস, ডাব্লুপিএফ; এবং উইনআরটি-উইন্ডোজ ফোন?), ওয়েব অ্যাপ্লিকেশন, ডাব্লুসিএফ পরিষেবা অ্যাপ্লিকেশন, ভিজ্যুয়াল স্টুডিও অ্যাডিন, আউটলুক-ওয়ার্ড অ্যাডিন, ভিএস (এমএসটিস্ট) ইউনিট টেস্ট বা সিলভারলাইট অ্যাপ্লিকেশন হতে পারে।
কিকিনেট

উত্তর:


405
System.AppDomain.CurrentDomain.FriendlyName

61
গৃহীত উত্তর থেকে সাবধান। System.AppDomain.CurrentDomain.FriendlyNameক্লিক-একবার মোতায়েন করা অ্যাপ্লিকেশনগুলির অধীনে ব্যবহার করার ক্ষেত্রে আমাদের সমস্যা হয়েছে । আমাদের জন্য, এটি " ডিফল্টডোমাইন " প্রত্যাবর্তন করছে , এবং আসল উদাহরণটি নয়।
গ্যাসপোড

40
আমরা শেষ পর্যন্ত এটি ব্যবহার করেছি:string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
গ্যাসপড

4
বন্ধুত্বপূর্ণ নাম যে কোনও কিছুতে সেট করা যায়। এছাড়াও আপনার বেশ কয়েকটি ডল সহ এক্সেস থাকলে অ্যাসেম্বলির অবস্থান পাওয়া যথেষ্ট নাও হতে পারে। তবুও যদি আপনি বেশ কয়েকটি অ্যাপডোমেন ব্যবহার করেন তবে এসেম্বলি.গেটকলিংঅ্যাস্প্যাসেস () বাতিল করে দেয়।
ব্যবহারকারী 276648

2
@ গ্যাসপোড: পথ বলা সহজ হবে .GetFileNameWithoutExistance (getType ()। সমাবেশ। লোকেশন) - আপনার বর্তমান সমাবেশে কোনও ধরণের কোনও অবজেক্ট নির্দিষ্ট করার দরকার নেই। আপনি এর গেটটাইপ ব্যবহার করতে পারেন এবং তারপরে আপনার "এটি" বলার দরকার নেই।
vbullinger

4
এটি কার্যকর হতে পারে, তবে এটি গ্রহণযোগ্য উত্তর হওয়া উচিত নয় : এটি যা চেয়েছিল তা থেকে সম্পূর্ণ আলাদা - এটি কিছুটা পরিস্থিতিতে কাকতালীয়ভাবে একই জিনিস হবে , তবে এটি সম্পূর্ণ অন্য কিছু। আপনি যদি অ্যাপ্লিকেশনটি নিজে না লিখে থাকেন তবে এটি খুব ভালভাবে ফিরে আসতে পারে "আমি আলু পছন্দ করি!" বা অ্যাপ্লিকেশনটি তৈরি করার সময় আপনার হাস্যরসাত্মক সহকর্মী এই সম্পত্তিটিতে যা লিখেছে!
আনোরজাকেন

236

System.AppDomain.CurrentDomain.FriendlyName - এক্সটেনশন সহ ফাইলের নামটি ফেরত দেয় (উদাঃ মাইএপ.এক্সে)।

System.Diagnostics.Process.GetCurrentProcess().ProcessName- এক্সটেনশন ছাড়াই ফাইলের নামটি দেয় (যেমন মাই অ্যাপ)।

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName- পুরো পথ এবং ফাইলের নাম (যেমন সি: \ উদাহরণসমূহ \ প্রক্রিয়াগুলি \ মাইএপ.এক্স.সি) প্রদান করে। তারপরে আপনি এটিকে পাস করতে পারেন System.IO.Path.GetFileName()বা System.IO.Path.GetFileNameWithoutExtension()উপরের মত একই ফলাফল অর্জন করতে পারেন।


3
অ্যাপডোমাইন একটি এক্সই অ্যাপ্লিকেশন, ওয়েব অ্যাপ্লিকেশন, ইউনিট পরীক্ষা অ্যাপ্লিকেশন, অ্যাডিন ভিজ্যুয়াল স্টুডিও এবং "সিলভারলাইট অ্যাপ" (?) হতে পারে। সব ক্ষেত্রে সম্ভবত আকর্ষণীয় পূর্ণ সমাধান। উদাহরণস্বরূপ, ইউনিট টেস্ট ভিএস ২০১২ এর জন্য - প্রসেসনাম: বনাম.এক্সেকিউশনজেনজিক্স.এক্স ৮ Main মেইনমডিউল।ফিলনাম: সি: G প্রোগ্রাম ফাইলগুলি (এক্স ৮)) \ মাইক্রোসফ্ট ভিজুয়াল স্টুডিও ১১.০ \ কমোন \ আইডি MM সম্প্রদায়ের.কেন্দ্রিক মেইনমডিউল.মডিউল নাম: বনাম.এক্সেকিউশনজেন.জি.৮86.এক্স.ই বন্ধুত্বপূর্ণ নাম: ইউনিট টেস্টএডাপ্টার: পরীক্ষা চলমান অ্যাপ্লিকেশন নাম:
কুইকিনেট

একটি "প্রোগ্রাম" একটি ডেস্কটপ অ্যাপ (উইনফোর্ডস, ডাব্লুপিএফ; এবং উইনআরটি-উইন্ডোজ ফোন?), ওয়েব অ্যাপ্লিকেশন, ডাব্লুসিএফ পরিষেবা অ্যাপ্লিকেশন, ভিজ্যুয়াল স্টুডিও অ্যাডিন, আউটলুক-ওয়ার্ড অ্যাডিন, ভিএস (এমএসটিস্ট) ইউনিট টেস্ট বা সিলভারলাইট অ্যাপ্লিকেশন হতে পারে । উদাহরণস্বরূপ, আইআইএস-এ হোস্ট করা ডাব্লুসিএফ পরিষেবা অ্যাপ্লিকেশনটির জন্য পরিষেবা হোস্ট সমাবেশটি কীভাবে পাবেন, আইআইএসইএক্সপ্রেস বা ওয়েবডেভার সার্ভার নয়?
কিকিনেট

6
+1 আমি এই উত্তরটি নিয়ে যাচ্ছি কারণ এটি একটি পরিষ্কার এবং সাধারণ উপায়ে আপনার প্রয়োজন হতে পারে এমন তিনটি প্রকরণ সরবরাহ করে। পথ বা সম্প্রসারণ ছাড়াই খালি প্রোগ্রামের নাম ব্যবহার করা প্রোগ্রাম হেল্প পাঠ্যের ( /?স্যুইচ) জন্য খুব কার্যকর , কারণ এক্সটেনশন এবং পাথটি অযথা অস্থির করে তোলা।
সিনিটেক

2
এর ফলাফলটি নিষ্পত্তি করতে ভুলবেন নাGetCurrentProcess()
মাহমুদ আল-কুদসি

Process.GetCurrentProcess().ProcessName()আয় MyApp.vshost আমার জন্য।
জোনাথন উড

106

System.Diagnostics.Process.GetCurrentProcess()বর্তমানে চলমান প্রক্রিয়া পায়। ProcessNameনামটি বের করার জন্য আপনি সম্পত্তিটি ব্যবহার করতে পারেন । নীচে একটি নমুনা কনসোল অ্যাপ্লিকেশন রয়েছে।

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Process.GetCurrentProcess().ProcessName);
        Console.ReadLine();
    }
}

36
আরও ভাল ব্যবহারের প্রক্রিয়া.গেটকন্ট্রনপ্রসেস ()। মাইনমডিউল.ফিলনাম
KindDragon

। Process.GetCurrentProcess () MainModule.FileName একটি এক্সেল Addin (ExcelDNA) মধ্যে থেকে পুরোপুরি কাজ করে
earcam

10
মনো রান রানটাইম ব্যবহার করার সময় এই পদ্ধতিটি ব্যর্থ হবে; .../bin/monoমনোতে চলমান অ্যাপ্লিকেশনগুলির প্রক্রিয়াটির নামটি সর্বদা * নিক্স বা .../mono.exeউইন্ডোজের কিছু পরিবর্তিত হবে।
সিডিউইউইউ

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। বর্তমান অ্যাপডোমেন নামের এক্সিকিউটেবল প্রক্রিয়া নামের সাথে কোনও সম্পর্ক থাকতে পারে না, বিশেষত যখন একাধিক অ্যাপ ডোমেন উপস্থিত থাকে
ইভান ক্র্যাভিয়াকভ

এই পদ্ধতিটি বিধানসভা শ্রেণীর সাথে খেলার চেয়ে যথেষ্ট ধীর হতে পারে।
এরউইন মায়ার

99

এটি যথেষ্ট হবে:

Environment.GetCommandLineArgs()[0];

3
হুম, এটি ফিরে আসে (যখন vs..net থেকে চালানো হয় এবং ডিবাগ হোস্টিং জিনিসটি ব্যবহার করে), ফাইলের নাম এবং vvost.exe এর অবস্থান এবং নাম ... এটি এই মুহুর্তে কার্যকর করা ফাইল যা প্রকৃতপক্ষে)
ফ্রেডেরিক গিয়সেল

13
এটি আমার পক্ষে সেরা উত্তর কারণ সি / সি ++ থেকে Environment.GetCommandLineArgs()সঠিক সি # এনালগ argv
ফ্রেডরিক দ্য ফুল

একমত! সেরা উত্তর. আমার দরকার পরিবেশ.গেটকম্যান্ডলাইনআর্গস () [1];
জেরি লিয়াং

1
পুরো পথ এড়ানোর জন্য:Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
নাথান

1
ডাব্লুসিএফ পরিষেবাগুলি ট্র্যাক করার চেষ্টা করার সময় এটি ভাল কাজ করে। প্রক্রিয়াটির নামটি আমার ক্ষেত্রে আইসপ্রেস নিয়ে ফিরে আসে। তবে এই আদেশটি আমাকে আসল ডাব্লুসিএফ পরিষেবা সমাবেশের নাম দেয়।
পি.ব্রায়ান.ম্যাকি

19

এই কোডটি আমার পক্ষে কাজ করেছে:

string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);

উপরের সমস্ত উদাহরণ আমাকে vshost বা চলমান dll নাম সহ প্রসেসনাম দিয়েছে।


4
যাঁরা জানেন না বা অন্যান্য উত্তরে এটি মিস করেছেন না তাদের পক্ষে অ্যাসেমব্লির নেমস্পেস হ'ল সিস্টেম.রিফ্লেশন এবং পথের নামস্থান হ'ল সিস্টেম.আইও।
জোড়া লাগানো

4
অ্যাপ্লিকেশন এন্ট্রি পয়েন্টটি যদি কোনও সমাবেশের পরিবর্তে স্থানীয় কোডে থাকে তবে getEntryAs आशीर्वाद বাতিল হয়ে যাবে।
এমডট

18

এটা চেষ্টা কর:

System.Reflection.Assembly.GetExecutingAssembly()

এটি আপনাকে এমন একটি System.Reflection.Assemblyউদাহরণ দেয় যা আপনি বর্তমান অ্যাপ্লিকেশনটি সম্পর্কে জানতে চাইতে পারেন এমন সমস্ত ডেটা রয়েছে। আমি মনে করি যে Locationসম্পত্তি পরে আপনি যা করতে পারেন তা সুনির্দিষ্টভাবে পেতে পারেন।


6
NET এর ছায়া অনুলিপি বৈশিষ্ট্য সক্রিয় CodeBaseহওয়ার পরিবর্তে এটি ব্যবহার করা নিরাপদ হতে পারে Location। দেখুন ব্লগস.এমএসডন.সৌজুক
০6/

18
গেটএক্সেকিউটিংএ্যাস্পাবল () থেকে সাবধান থাকুন: আপনি যদি এটি একটি লাইব্রেরি সমাবেশ থেকে কল করেন তবে এটি লাইব্রেরি অ্যাসেমব্লির নামটি ফিরিয়ে দেয় যা এন্ট্রি অ্যাসেমব্লির নাম থেকে আলাদা (অর্থাত্ মূল নির্বাহযোগ্য)। আপনি যদি getEntryAsorses () ব্যবহার করেন তবে এটি প্রকৃত এক্সিকিউটেবলের নাম ফিরিয়ে দেয় তবে ডাব্লুসিএফের অধীনে প্রক্রিয়াটি চলতে থাকলে এটি একটি ব্যতিক্রম ছুঁড়ে দেয় (স্বীকারোচিত একটি বিরল পরিস্থিতি)। সর্বাধিক শক্তিশালী কোডের জন্য, প্রসেস.গেটকন্টারপ্রসেস () প্রসেসনাম ব্যবহার করুন।
কনটাঙ্গো

@ গ্রাভিটাস: অবশ্যই না, কোনও এক্সিকিউটেবল যা "ব্যাখ্যা করা" চলছে, যেমন / usr / bin / mono এর সাথে ভুল প্রক্রিয়াটির নাম থাকবে। এছাড়াও প্রসেসনাম উইন্ডোজ পরিষেবাগুলির সাথে কাজ করবে না। আপনি যদি এটি কোনও লাইব্রেরিতে ব্যবহার করেন তবে getCallingAs એવું ব্যবহার করুন।
স্টিফান স্টেইগার

1
আমার জন্য কাজ করেছেন। ফিরিয়ে দেওয়া বিধানসভা উদাহরণের নাম গেটনাম () কলটি আপনার যা প্রয়োজন তা হল এবং ".exe" অংশটি অন্তর্ভুক্ত করে না। প্রত্যাশিত ফলাফল সহ মনো / লিনাক্সেও পরীক্ষিত।
সমাবেশ.গেটনাম

1
হুঁ, নোট করুন যে আপনি এক্সপ্লোরার ব্যবহার করে এক্সিকিউটেবল ফাইলটির নামকরণ করেও ফেরত স্ট্রিং পরিবর্তন হবে না। যখন পরিবেশ.গেটকম্যান্ডলাইনআর্গ () [0] আসল এক্সিকিউটেবল ফাইলের নাম (অবশ্যই) এর সাথে পরিবর্তিত হয়। কাকতালীয়ভাবে, দ্বিতীয় পদ্ধতিটি আমার নির্দিষ্ট পরিস্থিতির জন্য আরও ভাল ফলাফল করেছে কারণ আমি চাইছি যে ডেটা ফোল্ডারটিকে প্রকৃত এক্সিকিউটেবল ফাইলের নাম হিসাবে নামকরণ করা হোক।
হেটোরু হ্যানসু

11
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;

আপনাকে আপনার অ্যাপ্লিকেশনটির ফাইলনামের মতো দেবে; "MyApplication.exe"


11

কেন কেউ এটিকে সুপারিশ করেনি, এটি সহজ।

Path.GetFileName(Application.ExecutablePath)

3
অ্যাপ্লিকেশনটি কোন নেমস্পেসে থাকে।
জিতেন্দ্র

6
উইন্ডোজ ফর্ম অ্যাপ্লিকেশনের অভ্যন্তরে এটি কার্যকর, তবে অন্যথায় নয়
নাইনবেরি

@ নাইনবেরি আপনি Application.ExecutablePathএর উত্স কোডে আগ্রহী হতে পারেন ।
ভুতুড়ে

আমার পোস্টটি দেখুন নাইনবেরি আপনি যদি System.Windows. Forms এ একটি রেফারেন্স যুক্ত করেন তবে এটি কনসোল অ্যাপ্লিকেশনের মধ্যে কাজ করে।
জন


9

যদি আপনার ফায়ারওয়াল নিয়ম সেট আপ করার জন্য প্রোগ্রামটির নাম প্রয়োজন হয় তবে ব্যবহার করুন:

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

এটি নিশ্চিত করবে যে ভিজ্যুয়ালস্টুডিওতে ডিবাগ করার সময় এবং সরাসরি উইন্ডোতে অ্যাপ্লিকেশন চালানোর সময় নাম দুটিই ঠিক আছে।


2
আমার উদ্দেশ্যে (লগিং ফাইলের নাম তৈরি করা), এটি সেরা উত্তর। হোস্ট করা প্রক্রিয়াটি (যদি বলুন, কোনও পরিষেবা বা কোনও ওয়েব অ্যাপ্লিকেশন) চলমান থাকে তবে, System.AppDomain.CurrentDomain.FenderlyName এম্বেডড স্ল্যাশ সহ একটি কুৎসিত জিইউইডি-ওয়াই নাম ফিরিয়ে দিতে পারে।
কর্ট 17 ই

8

অনিশ্চিত বা সন্দেহ হলে চেনাশোনাগুলিতে দৌড়ান, চিৎকার করুন এবং চিৎকার করুন।

class Ourself
{
    public static string OurFileName() {
        System.Reflection.Assembly _objParentAssembly;

        if (System.Reflection.Assembly.GetEntryAssembly() == null)
            _objParentAssembly = System.Reflection.Assembly.GetCallingAssembly();
        else
            _objParentAssembly = System.Reflection.Assembly.GetEntryAssembly();

        if (_objParentAssembly.CodeBase.StartsWith("http://"))
            throw new System.IO.IOException("Deployed from URL");

        if (System.IO.File.Exists(_objParentAssembly.Location))
            return _objParentAssembly.Location;
        if (System.IO.File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName))
            return System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName;
        if (System.IO.File.Exists(System.Reflection.Assembly.GetExecutingAssembly().Location))
            return System.Reflection.Assembly.GetExecutingAssembly().Location;

        throw new System.IO.IOException("Assembly not found");
    }
}

আমি প্রতিটি বিকল্প পরীক্ষা করে নেওয়ার দাবি করতে পারি না, তবে এটি ডিবাগিং সেশনের সময় ভোস্ট ফিরিয়ে দেওয়ার মতো মূর্খ কিছুই করে না।


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

@ অরওলোফিল এ "প্রোগ্রাম" একটি ডেস্কটপ অ্যাপ (উইনফোর্ডস, ডাব্লুপিএফ; এবং উইনআরটি-উইন্ডোজ ফোন?), ওয়েব অ্যাপ্লিকেশন, ডাব্লুসিএফ পরিষেবা অ্যাপ্লিকেশন, ভিজ্যুয়াল স্টুডিও অ্যাডিন, আউটলুক-ওয়ার্ড অ্যাডিন, ভিএস (এমএসটিস্ট) ইউনিট পরীক্ষা হতে পারে, বা, সিলভারলাইট অ্যাপ্লিকেশন। উদাহরণস্বরূপ, আইআইএস-এ হোস্ট করা ডাব্লুসিএফ পরিষেবা অ্যাপ্লিকেশনটির জন্য পরিষেবা হোস্ট সমাবেশটি কীভাবে পাবেন, আইআইএসইএক্সপ্রেস বা ওয়েবডেভার সার্ভার নয়? একটি উইনফোর্ডস, ডাব্লুপিএফ, ওয়েব অ্যাপ্লিকেশন, ডাব্লুসিএফ পরিষেবা অ্যাপ্লিকেশন, ভিজ্যুয়াল স্টুডিও অ্যাডিন, আউটলুক-ওয়ার্ড অ্যাডিন, ভিএস (এমএসটিস্ট) অ্যাপ্লিকেশনগুলির ইউনিট টেস্টের জন্য বৈধ কোনও পূর্ণ কোড?
কিকিনেট

8
  • System.Reflection.Assembly.GetEntryAssembly().Location সমাবেশ মেমরি থেকে লোড না করা হলে এক্সি নামের অবস্থানটি প্রদান করে।
  • System.Reflection.Assembly.GetEntryAssembly().CodeBase URL হিসাবে স্থানটি ফেরত দেয় returns

পরীক্ষিত, এটি 100% কাজ করে, এমনকি যদি এটি সি # লাইব্রেরির মধ্যে থেকে কল করা হয়।
কনটাঙ্গো

1
আপনি মূল অ্যাপডোমাইনটিতে না থাকলে গেটএন্ট্রিঅ্যাস্যাসব্যাক্স () বাতিল করে দেয়।
ব্যবহারকারী 276648

4

যদি আপনি আপনার এক্সিকিউটেবলের সম্পূর্ণ পথের তথ্য সন্ধান করেন, তবে এটির নির্ভরযোগ্য উপায়টি নিম্নলিখিতটি ব্যবহার করা:

   var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
                       .FileName.Replace(".vshost", "");

এটি মধ্যস্থতাকারী dlls, vshost ইত্যাদির সাথে যে কোনও সমস্যা দূর করে


আমি আপনার নির্ভরযোগ্য উপায়ে উবুন্টু লিনাক্স 15.10 সি ++ রিয়েলপথ ব্যবহার করে এর পরে এসটিএল সি ++ স্ট্রিং প্রতিস্থাপন করেছি এবং এটি পয়েন্ট এবং ক্লিককে ব্যর্থ করে দিয়েছে। আমাদের সফ্টওয়্যার ডিরেক্টর আজ সারমাইজ হওয়ার কারণে এটি কি মনোতে বাগের কারণে ঘটতে পারে? ধন্যবাদ।
ফ্র্যাঙ্ক

আমি
মনোতে

গ্যাসপোন্ডে উপরে লিখেছেন যে "আমাদের ক্লিক করুন-একবার মোতায়েন করা অ্যাপ্লিকেশনগুলির অধীনে সিস্টেম.অ্যাপডোমাইন.কন্টেনডোমাইন.ফ্রেন্ডলি নাম ব্যবহার করার ক্ষেত্রে আমাদের সমস্যা হয়েছে।" ক্লিক করে একবার নেট নেট মোতায়েন করা অ্যাপ্লিকেশনগুলির সাথে সমস্যাগুলি কী হতে পারে সে সম্পর্কে আপনি কী অনুমান করতে পারেন? ধন্যবাদ।
ফ্রাঙ্ক

ভিএস2017-এ আমার নমুনা প্রোগ্রামের জন্য সি: \ প্রোগ্রাম ফাইলগুলি ot ডটনেট \ ডটনেট.এক্স রিটার্ন দেয়।
jwdonahue

3

আপনি Environment.GetCommandLineArgs()আর্গুমেন্টগুলি পেতে এবং Environment.CommandLineপ্রবেশ হিসাবে প্রকৃত কমান্ড লাইনটি ব্যবহার করতে পারেন ।

এছাড়াও, আপনি ব্যবহার করতে পারেন Assembly.GetEntryAssembly()বা Process.GetCurrentProcess()

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


4
গেটএক্সেকিউটিংএ্যাস্পাবল () থেকে সাবধান থাকুন: আপনি যদি এটি একটি লাইব্রেরি সমাবেশ থেকে কল করেন তবে এটি লাইব্রেরি অ্যাসেমব্লির নামটি ফিরিয়ে দেয় যা এন্ট্রি অ্যাসেমব্লির নাম থেকে আলাদা (অর্থাত্ মূল নির্বাহযোগ্য)। আপনি যদি getEntryAsorses () ব্যবহার করেন তবে এটি প্রকৃত এক্সিকিউটেবলের নাম ফিরিয়ে দেয় তবে ডাব্লুসিএফের অধীনে প্রক্রিয়াটি চলতে থাকলে এটি একটি ব্যতিক্রম ছুঁড়ে দেয় (স্বীকারোচিত একটি বিরল পরিস্থিতি)। সর্বাধিক শক্তিশালী কোডের জন্য, প্রসেস.গেটকন্টারপ্রসেস () প্রসেসনাম ব্যবহার করুন।
কনটাঙ্গো

@ গ্রাভিটাস: ভালো কথা - বাহ, আমি যখন এটি লিখেছি তখন কিছুক্ষণ হয়ে গেল! : ডি আমি সেই অনুযায়ী সম্পাদনা করব
জেফ ইয়েটস

Environment.CommandLineঅন্তত মনো / লিনাক্স-এ প্রবেশ করানো কমান্ড লাইন নয়, পরম পথ দেয়।
যান্ত্রিক শামুক

@ মেকানিক্যালসেল: মনোর মতো শোনাচ্ছে ডকুমেন্টেশনটি পুরোপুরি অনুসরণ করে না। মজাদার.
জেফ ইয়েটস

1

এই কমান্ডের সাহায্যে আপনি চান কি:

Assembly.GetExecutingAssembly ().Location

4
গেটএক্সেকিউটিংএ্যাস্পাবল () থেকে সাবধান থাকুন: আপনি যদি এটি একটি লাইব্রেরি সমাবেশ থেকে কল করেন তবে এটি লাইব্রেরি অ্যাসেমব্লির নামটি ফিরিয়ে দেয় যা এন্ট্রি অ্যাসেমব্লির নাম থেকে আলাদা (অর্থাত্ মূল নির্বাহযোগ্য)। আপনি যদি getEntryAsorses () ব্যবহার করেন তবে এটি প্রকৃত এক্সিকিউটেবলের নাম ফিরিয়ে দেয় তবে ডাব্লুসিএফের অধীনে প্রক্রিয়াটি চলতে থাকলে এটি একটি ব্যতিক্রম ছুঁড়ে দেয় (স্বীকারোচিত একটি বিরল পরিস্থিতি)। সর্বাধিক শক্তিশালী কোডের জন্য, প্রসেস.গেটকন্টারপ্রসেস () প্রসেসনাম ব্যবহার করুন।
কনটাঙ্গো

একটি উত্তর একটি প্রশ্ন করা উচিত নয়। ওপি কি এটাই চেয়েছিল?
jwdonahue

1

নেট কোর (বা মনো) অন, যখন প্রক্রিয়া সংজ্ঞায়িত বাইনারি মনো বা। নেট কোর (ডটনেট) এর রানটাইম বাইনারি হয় এবং আপনার আগ্রহী প্রকৃত প্রয়োগ নয় তখন বেশিরভাগ উত্তর প্রয়োগ হয় না apply সেক্ষেত্রে , এটা ব্যবহার কর:

var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);

1
GetEntryAssembly()নাল ফিরে আসতে পারেন
ব্যবহারকারী 2864740

1

উইন্ডোজ অ্যাপগুলির জন্য (ফর্ম এবং কনসোল) আমি এটি ব্যবহার করি:

সিস্টেম. উইন্ডোজ.এর জন্য ভিএস-র ফর্মগুলিতে একটি রেফারেন্স যুক্ত করুন:

using System.Windows.Forms;
namespace whatever
{
    class Program
    {
        static string ApplicationName = Application.ProductName.ToString();
        static void Main(string[] args)
        {
            ........
        }
    }
}

আমি সত্যিকারের এক্সিকিউটেবল চালাচ্ছি বা ভিএস-এর মধ্যে ডিবাগ করছি কিনা তা আমার পক্ষে সঠিকভাবে কাজ করে

নোট করুন যে এটি এক্সটেনশন ছাড়াই অ্যাপ্লিকেশনটির নাম দেয়।

জন


1

এখানে খুব সহজ,

Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName

1
.NET কোর প্রসেসের জন্য etGETC موجودہ প্রসেস ()।
এভেজেনি নাবোকভ

1
বর্তমান ডিরেক্টরিটি সাময়িকভাবে ক্ষণস্থায়ী এবং সমাবেশের / এক্সিকিউটেবলের অবস্থান হতে নির্ভর করা যায় না।
jwdonahue

1

আপনার এক্সটেনশন ছাড়াই কেবলমাত্র অ্যাপ্লিকেশন নাম প্রয়োজন হলে এটি কাজ করে:

Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);

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