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:
Main
nếu bạn khai báo Main
phươ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.
0
có 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 0
và 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 = Success
xuấ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.
Main
phương thức trong ứng dụng của bạn để nó trả về một int
thay vì void
(một hàm trả về Integer
thay vì Sub
trong VB.Net) và sau đó trả về mã thoát khỏi phương thức đó.Main
phương thức trả về bất kỳ thứ gì khác ngoài void
(là Sub
trong 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.ExitCode
không đóng chương trình ngay lập tức nhưng Environment.Exit
phươ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 :
Main
khô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 Main
vẫ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ì.