Saya punya aplikasi konsol sepele di .NET. Itu hanya bagian uji aplikasi yang lebih besar. Saya ingin menentukan "kode keluar" dari aplikasi konsol saya. Bagaimana saya melakukan ini?
Saya punya aplikasi konsol sepele di .NET. Itu hanya bagian uji aplikasi yang lebih besar. Saya ingin menentukan "kode keluar" dari aplikasi konsol saya. Bagaimana saya melakukan ini?
Jawaban:
3 pilihan:
Main
jika Anda menyatakan Main
metode Anda untuk kembali int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Ini akan digunakan jika tidak ada lagi yang mengatur kode pengembalian atau menggunakan salah satu opsi lain di atas).Bergantung pada aplikasi Anda (konsol, layanan, aplikasi web, dll) metode yang berbeda dapat digunakan.
0
berarti sukses, dan bukan nol berarti kegagalan. return;
menunjukkan keberhasilan melalui kode keluar 0
, dan return -1;
menunjukkan kegagalan.
Selain jawaban yang mencakup int kembali ... permohonan untuk kewarasan. Tolong, tolong tentukan kode keluar Anda dalam enum, dengan Bendera jika perlu. Itu membuat debugging dan pemeliharaan jauh lebih mudah (dan, sebagai bonus, Anda dapat dengan mudah mencetak kode keluar di layar bantuan Anda - Anda memiliki salah satunya, kan?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
berasal dari kenyataan bahwa hanya ada satu kode keberhasilan yang diperlukan, tetapi banyak kode kesalahan, sehingga 0, karena tidak memiliki + atau - dalam bilangan bulat Komputer, dapat digunakan untuk secara unik mengidentifikasi keberhasilan
Ada tiga metode yang dapat Anda gunakan untuk mengembalikan kode keluar dari aplikasi konsol.
Main
metode dalam aplikasi Anda sehingga mengembalikan int
bukan void
(fungsi yang mengembalikan Integer
bukan Sub
di VB.Net) dan kemudian mengembalikan kode keluar dari metode itu.Main
metode mengembalikan apa pun selain void
(adalah Sub
dalam VB.Net) maka nilai properti ini akan diabaikan.Standar penting yang harus diperhatikan adalah yang 0
mewakili 'Sukses'.
Pada topik terkait, pertimbangkan untuk menggunakan enumerasi untuk menentukan kode keluar yang akan dikembalikan oleh aplikasi Anda. The FlagsAttribute akan memungkinkan Anda untuk kembali kombinasi kode.
Selain itu, pastikan aplikasi Anda dikompilasi sebagai 'Aplikasi Konsol'.
Environment.ExitCode
tidak menutup program dengan segera tetapi Environment.Exit
metode segera menutup program
Process
objek, Anda dapat meminta objek untuk WaitForExit()
, dan kemudian meminta kode keluar dari itu.
Jika Anda akan menggunakan metode yang disarankan oleh David, Anda juga harus melihat Atribut [Bendera].
Ini memungkinkan Anda untuk melakukan operasi sedikit bijak pada enum.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Kemudian
(ExitCodes.SignFailed | ExitCodes.UnknownError)
akan menjadi 16 + 32. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Cukup kembalikan kode yang sesuai dari utama.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Gunakan ExitCode jika utama Anda memiliki tanda tangan kembali kosong, jika tidak, Anda perlu "mengatur" dengan nilai yang Anda kembalikan.
Jika metode utama mengembalikan void, Anda dapat menggunakan properti ini untuk mengatur kode keluar yang akan dikembalikan ke lingkungan panggilan. Jika Main tidak mengembalikan void, properti ini diabaikan. Nilai awal properti ini adalah nol.
Sebagai pembaruan untuk jawaban Scott Munro :
Main
tidak berpengaruh.main
titik masuk dihormati.Main()
tidak mengatur Process.ExitCode
seperti yang terlihat oleh aplikasi panggilan.
int Main
masih dapat digunakan sebagai alternatif untuk Environment.ExitCode. tautan
Opsi enumerasi sangat baik namun dapat ditingkatkan dengan mengalikan angka seperti pada:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Dalam kasus beberapa kesalahan, menambahkan nomor kesalahan spesifik bersama-sama akan memberi Anda nomor unik yang akan mewakili kombinasi kesalahan yang terdeteksi.
Misalnya, tingkat kesalahan 6 hanya bisa terdiri dari kesalahan 4 dan 2, 12 hanya bisa terdiri dari kesalahan 4 dan 8, 14 hanya bisa terdiri dari 2, 4 dan 8 dll.
2 sen saya:
Anda dapat menemukan kode kesalahan sistem di sini: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
Anda akan menemukan kode-kode khas seperti 2 untuk "file tidak ditemukan" atau 5 untuk "akses ditolak".
Dan ketika Anda menemukan kode yang tidak dikenal, Anda dapat menggunakan perintah ini untuk mencari tahu artinya:
net helpmsg decimal_code
misalnya
bantuan bersih 1
kembali
Fungsi yang salah
Gunakan kode ini
Environment.Exit(0);
gunakan 0 sebagai int jika Anda tidak ingin mengembalikan apa pun.