আমি বর্তমানে চলমান প্রোগ্রামের নাম পেতে চাই, এটিই প্রোগ্রামটির এক্সিকিউটেবল নাম। সি / সি ++ এ আপনি এটি থেকে পান args[0]
।
আমি বর্তমানে চলমান প্রোগ্রামের নাম পেতে চাই, এটিই প্রোগ্রামটির এক্সিকিউটেবল নাম। সি / সি ++ এ আপনি এটি থেকে পান args[0]
।
উত্তর:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
ক্লিক-একবার মোতায়েন করা অ্যাপ্লিকেশনগুলির অধীনে ব্যবহার করার ক্ষেত্রে আমাদের সমস্যা হয়েছে । আমাদের জন্য, এটি " ডিফল্টডোমাইন " প্রত্যাবর্তন করছে , এবং আসল উদাহরণটি নয়।
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- এক্সটেনশন সহ ফাইলের নামটি ফেরত দেয় (উদাঃ মাইএপ.এক্সে)।
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- এক্সটেনশন ছাড়াই ফাইলের নামটি দেয় (যেমন মাই অ্যাপ)।
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- পুরো পথ এবং ফাইলের নাম (যেমন সি: \ উদাহরণসমূহ \ প্রক্রিয়াগুলি \ মাইএপ.এক্স.সি) প্রদান করে। তারপরে আপনি এটিকে পাস করতে পারেন System.IO.Path.GetFileName()
বা System.IO.Path.GetFileNameWithoutExtension()
উপরের মত একই ফলাফল অর্জন করতে পারেন।
/?
স্যুইচ) জন্য খুব কার্যকর , কারণ এক্সটেনশন এবং পাথটি অযথা অস্থির করে তোলা।
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
আয় MyApp.vshost আমার জন্য।
System.Diagnostics.Process.GetCurrentProcess()
বর্তমানে চলমান প্রক্রিয়া পায়। ProcessName
নামটি বের করার জন্য আপনি সম্পত্তিটি ব্যবহার করতে পারেন । নীচে একটি নমুনা কনসোল অ্যাপ্লিকেশন রয়েছে।
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
মনোতে চলমান অ্যাপ্লিকেশনগুলির প্রক্রিয়াটির নামটি সর্বদা * নিক্স বা .../mono.exe
উইন্ডোজের কিছু পরিবর্তিত হবে।
এটি যথেষ্ট হবে:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
সঠিক সি # এনালগ argv
।
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
এই কোডটি আমার পক্ষে কাজ করেছে:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
উপরের সমস্ত উদাহরণ আমাকে vshost বা চলমান dll নাম সহ প্রসেসনাম দিয়েছে।
এটা চেষ্টা কর:
System.Reflection.Assembly.GetExecutingAssembly()
এটি আপনাকে এমন একটি System.Reflection.Assembly
উদাহরণ দেয় যা আপনি বর্তমান অ্যাপ্লিকেশনটি সম্পর্কে জানতে চাইতে পারেন এমন সমস্ত ডেটা রয়েছে। আমি মনে করি যে Location
সম্পত্তি পরে আপনি যা করতে পারেন তা সুনির্দিষ্টভাবে পেতে পারেন।
CodeBase
হওয়ার পরিবর্তে এটি ব্যবহার করা নিরাপদ হতে পারে Location
। দেখুন ব্লগস.এমএসডন.সৌজুক
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
আপনাকে আপনার অ্যাপ্লিকেশনটির ফাইলনামের মতো দেবে; "MyApplication.exe"
কেন কেউ এটিকে সুপারিশ করেনি, এটি সহজ।
Path.GetFileName(Application.ExecutablePath)
আরও কয়েকটি বিকল্প:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
যদি আপনার ফায়ারওয়াল নিয়ম সেট আপ করার জন্য প্রোগ্রামটির নাম প্রয়োজন হয় তবে ব্যবহার করুন:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
এটি নিশ্চিত করবে যে ভিজ্যুয়ালস্টুডিওতে ডিবাগ করার সময় এবং সরাসরি উইন্ডোতে অ্যাপ্লিকেশন চালানোর সময় নাম দুটিই ঠিক আছে।
অনিশ্চিত বা সন্দেহ হলে চেনাশোনাগুলিতে দৌড়ান, চিৎকার করুন এবং চিৎকার করুন।
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");
}
}
আমি প্রতিটি বিকল্প পরীক্ষা করে নেওয়ার দাবি করতে পারি না, তবে এটি ডিবাগিং সেশনের সময় ভোস্ট ফিরিয়ে দেওয়ার মতো মূর্খ কিছুই করে না।
System.Reflection.Assembly.GetEntryAssembly().Location
সমাবেশ মেমরি থেকে লোড না করা হলে এক্সি নামের অবস্থানটি প্রদান করে।System.Reflection.Assembly.GetEntryAssembly().CodeBase
URL হিসাবে স্থানটি ফেরত দেয় returnsযদি আপনি আপনার এক্সিকিউটেবলের সম্পূর্ণ পথের তথ্য সন্ধান করেন, তবে এটির নির্ভরযোগ্য উপায়টি নিম্নলিখিতটি ব্যবহার করা:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
এটি মধ্যস্থতাকারী dlls, vshost ইত্যাদির সাথে যে কোনও সমস্যা দূর করে
আপনি Environment.GetCommandLineArgs()
আর্গুমেন্টগুলি পেতে এবং Environment.CommandLine
প্রবেশ হিসাবে প্রকৃত কমান্ড লাইনটি ব্যবহার করতে পারেন ।
এছাড়াও, আপনি ব্যবহার করতে পারেন Assembly.GetEntryAssembly()
বা Process.GetCurrentProcess()
।
তবে, ডিবাগিংয়ের সময়, আপনাকে অবশ্যই সতর্কতা অবলম্বন করা উচিত কারণ এই চূড়ান্ত উদাহরণটি আপনার এক্সিকিউটেবলের পরিবর্তে আপনার ডিবাগের এক্সিকিউটেবল নাম (আপনি কীভাবে ডিবাগারটি সংযুক্ত করেন তার উপর নির্ভর করে) দিতে পারে, অন্য উদাহরণগুলির মতো।
Environment.CommandLine
অন্তত মনো / লিনাক্স-এ প্রবেশ করানো কমান্ড লাইন নয়, পরম পথ দেয়।
এই কমান্ডের সাহায্যে আপনি চান কি:
Assembly.GetExecutingAssembly ().Location
নেট কোর (বা মনো) অন, যখন প্রক্রিয়া সংজ্ঞায়িত বাইনারি মনো বা। নেট কোর (ডটনেট) এর রানটাইম বাইনারি হয় এবং আপনার আগ্রহী প্রকৃত প্রয়োগ নয় তখন বেশিরভাগ উত্তর প্রয়োগ হয় না apply সেক্ষেত্রে , এটা ব্যবহার কর:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
নাল ফিরে আসতে পারেন
উইন্ডোজ অ্যাপগুলির জন্য (ফর্ম এবং কনসোল) আমি এটি ব্যবহার করি:
সিস্টেম. উইন্ডোজ.এর জন্য ভিএস-র ফর্মগুলিতে একটি রেফারেন্স যুক্ত করুন:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
আমি সত্যিকারের এক্সিকিউটেবল চালাচ্ছি বা ভিএস-এর মধ্যে ডিবাগ করছি কিনা তা আমার পক্ষে সঠিকভাবে কাজ করে
নোট করুন যে এটি এক্সটেনশন ছাড়াই অ্যাপ্লিকেশনটির নাম দেয়।
জন
এখানে খুব সহজ,
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
পথ এবং নাম পেতে
System.Diagnostics.Process.GetCurrentProcess ()। MainModule.FileName