Tôi có một ứng dụng giao diện điều khiển tầm thường trong .NET. Nó chỉ là một phần thử nghiệm của một ứng dụng lớn hơn. Tôi muốn chỉ định "mã thoát" của ứng dụng bảng điều khiển của mình. Làm thế nào để tôi làm điều này?
Tôi có một ứng dụng giao diện điều khiển tầm thường trong .NET. Nó chỉ là một phần thử nghiệm của một ứng dụng lớn hơn. Tôi muốn chỉ định "mã thoát" của ứng dụng bảng điều khiển của mình. Làm thế nào để tôi làm điều này?
Câu trả lời:
3 tùy chọn:
Mainnếu bạn khai báo Mainphương thức của bạn để trả về int.Environment.Exit(code).Environment.ExitCode = -1;. Điều này sẽ được sử dụng nếu không có gì khác đặt mã trả về hoặc sử dụng một trong các tùy chọn khác ở trên).Tùy thuộc vào ứng dụng của bạn (bảng điều khiển, dịch vụ, ứng dụng web, v.v.) các phương pháp khác nhau có thể được sử dụng.
0có nghĩa là thành công và khác không có nghĩa là thất bại. return;chỉ ra thành công thông qua mã thoát 0và return -1;chỉ ra thất bại.
Ngoài các câu trả lời về sự trở lại của int ... một lời cầu xin sự tỉnh táo. Xin vui lòng, vui lòng xác định mã thoát của bạn trong một enum, với Cờ nếu thích hợp. Nó giúp việc gỡ lỗi và bảo trì dễ dàng hơn rất nhiều (và, như một phần thưởng, bạn có thể dễ dàng in ra các mã thoát trên màn hình trợ giúp của mình - bạn có một trong số đó không?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Successxuất phát từ thực tế là chỉ cần một mã thành công, nhưng nhiều mã lỗi, như 0, không có + hoặc - trong các số nguyên Máy tính, có thể được sử dụng để xác định thành công duy nhất
Có ba phương pháp mà bạn có thể sử dụng để trả về mã thoát khỏi ứng dụng bảng điều khiển.
Mainphương thức trong ứng dụng của bạn để nó trả về một intthay vì void(một hàm trả về Integerthay vì Subtrong VB.Net) và sau đó trả về mã thoát khỏi phương thức đó.Mainphương thức trả về bất kỳ thứ gì khác ngoài void(là Subtrong VB.Net) thì giá trị của thuộc tính này sẽ bị bỏ qua.Một tiêu chuẩn quan trọng cần được quan sát là 0đại diện cho 'Thành công'.
Về một chủ đề liên quan, hãy xem xét sử dụng một bảng liệt kê để xác định mã thoát mà ứng dụng của bạn sẽ trả về. Các FlagsAttribute sẽ cho phép bạn quay trở lại một sự kết hợp của mã.
Ngoài ra, đảm bảo rằng ứng dụng của bạn được biên dịch dưới dạng 'Ứng dụng Bảng điều khiển'.
Environment.ExitCodekhông đóng chương trình ngay lập tức nhưng Environment.Exitphương thức sẽ đóng chương trình ngay lập tức
Processđối tượng, bạn có thể yêu cầu đối tượng WaitForExit()đó và sau đó yêu cầu mã thoát khỏi nó.
Nếu bạn định sử dụng phương pháp do David đề xuất, bạn cũng nên xem thuộc tính [Cờ].
Điều này cho phép bạn thực hiện các thao tác bit khôn ngoan trên enums.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Sau đó
(ExitCodes.SignFailed | ExitCodes.UnknownError)
sẽ là 16 + 32. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/l Library / system.en môi.exitcode.aspx
Chỉ cần trả lại mã chiếm dụng từ chính.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Sử dụng ExitCode nếu chính của bạn có chữ ký trả về khoảng trống, nếu không bạn cần "đặt" nó theo giá trị bạn trả về.
Môi trường.ExitCode Thuộc tính
Nếu phương thức Main trả về void, bạn có thể sử dụng thuộc tính này để đặt mã thoát sẽ được trả về môi trường gọi. Nếu Main không trả về void, thuộc tính này sẽ bị bỏ qua. Giá trị ban đầu của tài sản này bằng không.
Như một cập nhật cho câu trả lời của Scott Munro :
Mainkhông có hiệu lực.mainđiểm vào được tôn trọng.Main()việc không đặt Process.ExitCodeứng dụng gọi điện.
int Mainvẫn có thể được sử dụng như là một thay thế cho Môi trường.ExitCode. liên kết
Tùy chọn liệt kê là tuyệt vời tuy nhiên có thể được cải thiện bằng cách nhân các số như trong:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Trong trường hợp có nhiều lỗi, việc cộng các số lỗi cụ thể lại với nhau sẽ cho bạn một số duy nhất biểu thị sự kết hợp của các lỗi được phát hiện.
Ví dụ: một lỗi 6 chỉ có thể bao gồm các lỗi 4 và 2, 12 chỉ có thể bao gồm các lỗi 4 và 8, 14 chỉ có thể bao gồm 2, 4 và 8, v.v.
2 xu của tôi:
Bạn có thể tìm thấy mã lỗi hệ thống tại đây: https://msdn.microsoft.com/en-us/l Library / windows / desktop / ms681382 (v = vs85) .aspx
Bạn sẽ tìm thấy các mã điển hình như 2 cho "không tìm thấy tệp" hoặc 5 cho "truy cập bị từ chối".
Và khi bạn vấp phải một mã không xác định, bạn có thể sử dụng lệnh này để tìm hiểu ý nghĩa của nó:
net helpmsg decimal_code
ví dụ
trợ giúp ròng 1
trả lại
Chức năng không chính xác
Sử dụng mã này
Environment.Exit(0);
sử dụng 0 làm int nếu bạn không muốn trả lại bất cứ thứ gì.