ฉันต้องการรับชื่อของโปรแกรมที่กำลังทำงานอยู่นั่นคือชื่อที่ปฏิบัติการได้ของโปรแกรม ใน C / C ++ args[0]
คุณได้รับมันจาก
ฉันต้องการรับชื่อของโปรแกรมที่กำลังทำงานอยู่นั่นคือชื่อที่ปฏิบัติการได้ของโปรแกรม ใน C / C ++ args[0]
คุณได้รับมันจาก
คำตอบ:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
ภายใต้แอปพลิเคชันที่คลิกได้เมื่อปรับใช้ สำหรับเรานี่เป็นการส่งคืน " DefaultDomain " ไม่ใช่ชื่อ exe ดั้งเดิม
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- ส่งคืนชื่อไฟล์ที่มีนามสกุล (เช่น MyApp.exe)
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- ส่งคืนชื่อไฟล์โดยไม่มีนามสกุล (เช่น MyApp)
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- ส่งคืนพา ธ เต็มและชื่อไฟล์ (เช่น C: \ ตัวอย่าง \ Processes \ MyApp.exe) จากนั้นคุณสามารถส่งผ่านสิ่งนี้เข้า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
ใน * nixes หรือ.../mono.exe
บน Windows
สิ่งนี้น่าจะพอเพียง:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
มันเป็นอะนาล็อก C # ที่แน่นอนargv
จาก C / C ++
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
นี่คือรหัสที่ใช้งานได้สำหรับฉัน:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
ตัวอย่างทั้งหมดข้างต้นให้ฉันชื่อ processsheet กับ vshost หรือชื่อ dll ที่กำลังทำงานอยู่
ลองสิ่งนี้:
System.Reflection.Assembly.GetExecutingAssembly()
นี่จะส่งคืนSystem.Reflection.Assembly
อินสแตนซ์ที่มีข้อมูลทั้งหมดที่คุณอาจต้องการทราบเกี่ยวกับแอปพลิเคชันปัจจุบัน ฉันคิดว่าLocation
ทรัพย์สินอาจได้รับสิ่งที่คุณเป็นโดยเฉพาะ
CodeBase
แทนLocation
ในกรณีที่คุณสมบัติ shadow copy ของ. NET เปิดใช้งานอยู่ ดูblogs.msdn.com/suzcook/archive/2003/06/26/…
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
สิ่งนี้จะช่วยให้แน่ใจว่าชื่อนั้นถูกต้องทั้งเมื่อทำการดีบั๊กใน VisualStudio และเมื่อเรียกใช้แอพใน windows
เมื่อไม่แน่ใจหรือมีข้อสงสัยให้วิ่งเป็นวงกลมกรีดร้องและตะโกน
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");
}
}
ฉันไม่สามารถอ้างว่าได้ทำการทดสอบแต่ละตัวเลือก แต่มันไม่ได้ทำอะไรโง่ ๆ เช่นคืน vhost ระหว่างการดีบักเซสชัน
System.Reflection.Assembly.GetEntryAssembly().Location
ส่งคืนตำแหน่งของชื่อ exe หากแอสเซมบลีไม่ได้โหลดจากหน่วยความจำSystem.Reflection.Assembly.GetEntryAssembly().CodeBase
ส่งคืนตำแหน่งเป็น URLหากคุณกำลังมองหาข้อมูลเส้นทางแบบเต็มของปฏิบัติการของคุณวิธีที่เชื่อถือได้คือการใช้ต่อไปนี้:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
สิ่งนี้จะช่วยลดปัญหาใด ๆ กับตัวกลางที่กำลัง, vshost, ฯลฯ
คุณสามารถใช้Environment.GetCommandLineArgs()
เพื่อรับอาร์กิวเมนต์และEnvironment.CommandLine
รับบรรทัดคำสั่งจริงตามที่ป้อน
นอกจากนี้คุณยังสามารถใช้หรือAssembly.GetEntryAssembly()
Process.GetCurrentProcess()
อย่างไรก็ตามเมื่อทำการดีบั๊กคุณควรระวังเนื่องจากตัวอย่างสุดท้ายนี้อาจให้ชื่อปฏิบัติการของดีบักเกอร์ (ขึ้นอยู่กับวิธีที่คุณแนบตัวดีบั๊ก) แทนการปฏิบัติการของคุณเช่นเดียวกับตัวอย่างอื่น ๆ
Environment.CommandLine
ให้พา ธ สัมบูรณ์ไม่ใช่บรรทัดคำสั่งที่ป้อนอย่างน้อยใน Mono / Linux
นี่คือสิ่งที่คุณต้องการ:
Assembly.GetExecutingAssembly ().Location
บน. Net Core (หรือ Mono) คำตอบส่วนใหญ่จะไม่นำมาใช้เมื่อไบนารีกำหนดกระบวนการเป็นไบนารีรันไทม์ของ Mono หรือ. Net Core (dotnet) ไม่ใช่แอปพลิเคชันจริงของคุณที่คุณสนใจในกรณีนี้ ใช้สิ่งนี้:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
สามารถส่งคืน null
สำหรับแอพ windows (แบบฟอร์มและคอนโซล) ฉันใช้สิ่งนี้:
เพิ่มการอ้างอิงถึง System.Windows.Forms ใน VS แล้ว:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
สิ่งนี้ทำงานได้อย่างถูกต้องสำหรับฉันไม่ว่าฉันจะเรียกใช้ปฏิบัติการจริงหรือการดีบักภายใน VS
โปรดทราบว่ามันจะส่งคืนชื่อแอปพลิเคชันโดยไม่มีนามสกุล
จอห์น
ง่ายสุด ๆ ที่นี่:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
ใช้งานได้หากคุณต้องการชื่อแอปพลิเคชันที่ไม่มีส่วนขยายเท่านั้น:
Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);
เพื่อให้ได้เส้นทางและชื่อ
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName