Tôi muốn lấy tên của chương trình hiện đang chạy, đó là tên thực thi của chương trình. Trong C / C ++, bạn nhận được nó từ args[0]
.
Tôi muốn lấy tên của chương trình hiện đang chạy, đó là tên thực thi của chương trình. Trong C / C ++, bạn nhận được nó từ args[0]
.
Câu trả lời:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
trong các ứng dụng được triển khai Nhấp chuột một lần. Đối với chúng tôi, đây là trả về " DefaultDomain ", và không phải tên exe ban đầu.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- Trả về tên tệp có phần mở rộng (ví dụ MyApp.exe).
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- Trả về tên tệp mà không cần mở rộng (ví dụ MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Trả về đường dẫn và tên tệp đầy đủ (ví dụ: C: \ example \ Processes \ MyApp.exe). Sau đó, bạn có thể chuyển nó vào System.IO.Path.GetFileName()
hoặc System.IO.Path.GetFileNameWithoutExtension()
để đạt được kết quả tương tự như trên.
/?
chuyển đổi), bởi vì sử dụng phần mở rộng và đường dẫn chỉ làm lộn xộn nó một cách không cần thiết.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
trả lại MyApp.vshost cho tôi.
System.Diagnostics.Process.GetCurrentProcess()
được quá trình hiện đang chạy. Bạn có thể sử dụng ProcessName
tài sản để tìm ra tên. Dưới đây là một ứng dụng giao diện điều khiển mẫu.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
* nixes hoặc .../mono.exe
trên Windows.
Điều này nên đủ:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
là tương tự C # chính xác argv
từ C / C ++.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Đây là mã làm việc cho tôi:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
Tất cả các ví dụ trên đã cho tôi processName với vshost hoặc tên dll đang chạy.
Thử cái này:
System.Reflection.Assembly.GetExecutingAssembly()
Điều này trả về cho bạn một System.Reflection.Assembly
ví dụ có tất cả dữ liệu bạn có thể muốn biết về ứng dụng hiện tại. Tôi nghĩ rằng Location
tài sản có thể có được những gì bạn đang có sau khi cụ thể.
CodeBase
thay vì Location
trong trường hợp tính năng sao chép bóng của .NET đang hoạt động. Xem blogs.msdn.com/suzcook/archive/2003/06/26/...
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
sẽ cung cấp cho bạn Tên tệp của ứng dụng của bạn như thế nào; "MyApplication.exe"
Tại sao không ai đề nghị điều này, nó đơn giản.
Path.GetFileName(Application.ExecutablePath)
Nhiều lựa chọn hơn:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Nếu bạn cần tên Chương trình để thiết lập quy tắc tường lửa, hãy sử dụng:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
Điều này sẽ đảm bảo rằng tên là chính xác cả khi gỡ lỗi trong VisualStudio và khi chạy ứng dụng trực tiếp trong windows.
Khi không chắc chắn hoặc nghi ngờ, hãy chạy theo vòng tròn, la hét và hét lên.
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");
}
}
Tôi không thể tuyên bố đã thử nghiệm từng tùy chọn, nhưng nó không làm điều gì ngu ngốc như trả lại vhost trong các phiên gỡ lỗi.
System.Reflection.Assembly.GetEntryAssembly().Location
trả về vị trí của tên exe nếu lắp ráp không được tải từ bộ nhớ.System.Reflection.Assembly.GetEntryAssembly().CodeBase
trả về vị trí dưới dạng URL.NẾU bạn đang tìm kiếm thông tin đường dẫn đầy đủ của tệp thực thi của mình, cách đáng tin cậy để làm điều đó là sử dụng như sau:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Điều này giúp loại bỏ bất kỳ vấn đề với dlls trung gian, vshost, vv
Bạn có thể sử dụng Environment.GetCommandLineArgs()
để có được các đối số và Environment.CommandLine
để có được dòng lệnh thực tế như đã nhập.
Ngoài ra, bạn có thể sử dụng Assembly.GetEntryAssembly()
hoặc Process.GetCurrentProcess()
.
Tuy nhiên, khi gỡ lỗi, bạn nên cẩn thận vì ví dụ cuối cùng này có thể đặt tên thực thi của trình gỡ lỗi của bạn (tùy thuộc vào cách bạn đính kèm trình gỡ lỗi) thay vì thực thi của bạn, như các ví dụ khác.
Environment.CommandLine
đưa ra đường dẫn tuyệt đối, không phải dòng lệnh đã nhập, ít nhất là trên Mono / Linux.
Đây có phải là những gì bạn muốn:
Assembly.GetExecutingAssembly ().Location
Trên .Net Core (hoặc Mono), hầu hết các câu trả lời sẽ không được áp dụng khi nhị phân xác định quy trình là nhị phân thời gian chạy của Mono hoặc .Net Core (dotnet) chứ không phải ứng dụng thực tế của bạn mà bạn quan tâm. Trong trường hợp đó , dùng cái này:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
có thể trả về null.
Đối với các ứng dụng windows (biểu mẫu và bảng điều khiển) tôi sử dụng điều này:
Thêm một tham chiếu đến System.Windows.Forms trong VS rồi:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
Điều này hoạt động chính xác cho tôi cho dù tôi đang chạy chương trình thực thi hoặc gỡ lỗi thực tế trong VS.
Lưu ý rằng nó trả về tên ứng dụng mà không cần phần mở rộng.
John
Siêu dễ, ở đây:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Để có được đường dẫn và tên
System.Diagnostics.Process.GetCienProcess (). MainModule.FileName