.NET এ কনসোল অ্যাপ্লিকেশনটির প্রস্থান কোড কীভাবে নির্দিষ্ট করব?


471

.NET এ আমার কাছে একটি তুচ্ছ কনসোল অ্যাপ্লিকেশন রয়েছে। এটি বৃহত্তর প্রয়োগের কেবল একটি পরীক্ষার অংশ। আমি আমার কনসোল অ্যাপ্লিকেশনটির "প্রস্থান কোড" নির্দিষ্ট করতে চাই। আমি এটা কিভাবে করবো?

উত্তর:


599

3 টি বিকল্প:

  • আপনি Mainযদি আপনার Mainপদ্ধতিটি ফিরে আসার ঘোষণা দেন তবে আপনি এটি থেকে ফিরে আসতে পারেন int
  • আপনি কল করতে পারেন Environment.Exit(code)
  • আপনি বৈশিষ্ট্য ব্যবহার করে প্রস্থান কোড সেট করতে পারেন: Environment.ExitCode = -1;। আর কিছুই যদি রিটার্ন কোড সেট না করে বা উপরের অন্যান্য বিকল্পগুলির মধ্যে একটি ব্যবহার না করে তবে এটি ব্যবহার করা হবে)।

আপনার অ্যাপ্লিকেশন (কনসোল, পরিষেবা, ওয়েব অ্যাপ্লিকেশন, ইত্যাদি) এর উপর নির্ভর করে বিভিন্ন পদ্ধতি ব্যবহার করা যেতে পারে।


12
আপনারা যারা বিস্মিত হন কেন এটি তাদের ক্ষেত্রে কাজ করে না, আপনার প্রকল্পটি "উইন্ডোজ অ্যাপ্লিকেশন" হিসাবে নয়, "কনসোল অ্যাপ্লিকেশন" হিসাবে সংকলিত হয়েছে তা নিশ্চিত করুন।
মার্সেল গোসেলিন

9
আমার যদি উইনফরমস অ্যাপ থাকে তবে কিছু আরগ দিয়ে আমি এটি কনসোল অ্যাপ্লিকেশন হিসাবে আচরণ করতে চাই?
sebagomez

5
আপনি কেবল মেইন প্রোগ্রামটি টাইপ করতে পারেন int হিসাবে (পূর্বে শূন্যস্থান প্রতিস্থাপন) এবং উদাহরণস্বরূপ "রিটার্ন -1;" মূল প্রোগ্রাম থেকে ফিরে। এটি পরিবেশের চেয়ে বেশি বহনযোগ্য x এক্সিট () যা পরিবেশের উপর নির্ভর করে)।
11:25 এ জবাব দিন

14
@ ড্যানিবেকেট কনভেনশন অনুসারে, একটি বহির্গমন কোড 0মানে সাফল্য এবং অ-শূন্যের অর্থ ব্যর্থতা। return;প্রস্থান কোডের মাধ্যমে সাফল্য নির্দেশ করে 0এবং return -1;ব্যর্থতা নির্দেশ করে।
allonhadaya

6
আপনি বৈশিষ্ট্যগুলি ব্যবহার করে প্রস্থান কোডও সেট করতে পারেন: পরিবেশ.এক্সিটকোড = -1;
t3b4n

270

রিটার্ন ইন এর উত্তরগুলি কভার করার সাথে সাথে ... সন্তুষ্টির জন্য একটি আবেদন। দয়া করে দয়া করে একটি এনামে আপনার প্রস্থান কোডগুলি সংজ্ঞায়িত করুন, উপযুক্ত হলে পতাকা সহ। এটি ডিবাগিং এবং রক্ষণাবেক্ষণকে এত সহজ করে তোলে (এবং, একটি বোনাস হিসাবে আপনি সহজেই আপনার সহায়তা পর্দায় প্রস্থান কোডগুলি মুদ্রণ করতে পারেন - আপনারগুলির মধ্যে একটি আছে, তাই না?)।

enum ExitCode : int {
  Success = 0,
  InvalidLogin = 1,
  InvalidFilename = 2,
  UnknownError = 10
}

int Main(string[] args) {
   return (int)ExitCode.Success;
}

46
আপনি যোগ করতে চাইতে পারেন, "সাফল্যের" জন্য "0" এর মান যথাযথ নয়, তবে আসলে সেই পরিস্থিতির জন্য "মানক" মান।
খ্রিস্টান.কে

39
এই. এই কারণেই এসও হ'ল ইন্টারনেটের ইতিহাসের সেরা ওয়েবসাইট। এই পরামর্শটি কোনও পাঠ্যপুস্তকে সহজেই পাওয়া যায় না এবং কেবল পাকা পেশাদারের সাথে কথা বলেই তা সংগ্রহ করা যায়। ধন্যবাদ.
ড্যানিয়েল জাজো

17
আপনি বলছেন যে 0 সাফল্যের মান, এবং তবুও 0/1 কে বুলিয়ান রূপান্তর করার সময় 0 টি মিথ্যা এবং 1 সত্য! এটি বলা আরও সঠিক হতে পারে যে 0 এর একটি প্রস্থান কোডের অর্থ "সাফল্য" না হয়ে "ত্রুটি নেই", কারণ প্রস্থান কোডটি কেবল একটি ফলাফল নয়, ত্রুটিযুক্ত ফলাফল।
শাপিরো

11
মাইক্রোসফ্ট কনভেনশনটির সম্পূর্ণ তালিকার জন্য, msdn.microsoft.com/en-us/library/windows/desktop/… দেখুন । কিছু লোক কনসেন্টগুলির একটি বিশাল তালিকা তৈরি করেছে এবং আরও নীচে মন্তব্যে একটি স্যুইচ ক্ষেত্রে ব্যবহার করেছে।
নওফাল

5
@ মার্কশাপিরো, আমি অনুমান করি 0 = Successযে কেবলমাত্র একটি সাফল্য কোড প্রয়োজন, তবে অনেকগুলি ত্রুটি কোড, যেমন 0, কম্পিউটারের পূর্ণসংখ্যায় + বা - না থাকায়, সাফল্যের অনন্য পরিচয় সনাক্ত করতে ব্যবহার করা যেতে পারে
সেবাস্তিয়ান

49

তিনটি পদ্ধতি রয়েছে যা আপনি কনসোল অ্যাপ্লিকেশন থেকে প্রস্থান কোডটি ফেরত দিতে ব্যবহার করতে পারেন।

  1. Mainআপনার অ্যাপ্লিকেশনটিতে পদ্ধতিটি সংশোধন করুন যাতে এটি intপরিবর্তে void( ভিবি.নেটের Integerপরিবর্তে একটি ফাংশন দেয় এমন ফাংশন Sub) দেয় এবং তারপরে সেই পদ্ধতি থেকে প্রস্থান কোডটি ফিরে আসে।
  2. সেট Environment.ExitCode প্রস্থান কোডে সম্পত্তি। নোট করুন যে পদ্ধতি 1। অগ্রাধিকার নেয় - Mainপদ্ধতিটি যদি void( SubVB.Net এ একটি ) ব্যতীত অন্য কোনও কিছু প্রদান করে তবে এই সম্পত্তির মান উপেক্ষা করা হবে।
  3. এনভায়রন কোডটি পরিবেশ.এক্সিট পদ্ধতিতে পাস করুন । এটি অন্যান্য দুটি পদ্ধতির বিপরীতে প্রক্রিয়াটি অবিলম্বে বন্ধ করে দেবে।

একটি গুরুত্বপূর্ণ মান যা পালন করা উচিত তা হ'ল 0'সাফল্য' উপস্থাপন করে।

সম্পর্কিত বিষয়ে, আপনার অ্যাপ্লিকেশনটি যে ফিরিয়ে দিতে চলেছে সেই প্রস্থান কোডগুলি সংজ্ঞায়িত করতে একটি গণনা ব্যবহার করে বিবেচনা করুন। FlagsAttribute কোডগুলি সংমিশ্রণ ফিরে যাওয়ার অনুমতি দেবে।

এছাড়াও, আপনার আবেদনটি একটি 'কনসোল অ্যাপ্লিকেশন' হিসাবে সংকলিত হয়েছে তা নিশ্চিত করুন।


1
এটি একটি আকর্ষণীয় বিষয় নিয়ে আসে। সেটিং Environment.ExitCodeবন্ধ না প্রোগ্রাম অবিলম্বে করে কিন্তু Environment.Exitপদ্ধতি অবিলম্বে প্রোগ্রাম বন্ধ
PsychoData

1
উইন্ডোজ অ্যাপ্লিকেশনগুলিতে প্রস্থান কোডও কাজ করে। যদি অ্যাপ্লিকেশনটি কোনও ## এর মাধ্যমে সি # থেকে শুরু করা হয়ে Processথাকে, আপনি বস্তুকে জিজ্ঞাসা করতে পারেন WaitForExit()এবং তারপরে এটি থেকে প্রস্থান কোডের জন্য অনুরোধ করতে পারেন।
নাইয়ারগডস

43

আপনি যদি ডেভিড দ্বারা প্রস্তাবিত পদ্ধতিটি ব্যবহার করতে চলেছেন তবে আপনার [পতাকা] বৈশিষ্ট্যটিও একবার দেখে নেওয়া উচিত।

এটি আপনাকে এনামগুলিতে বিট বুদ্ধিমান অপারেশন করতে দেয়।

[Flags]
enum ExitCodes : int
{
  Success = 0,
  SignToolNotInPath = 1,
  AssemblyDirectoryBad = 2,
  PFXFilePathBad = 4,
  PasswordMissing = 8,
  SignFailed = 16,
  UnknownError = 32
}

তারপর

(ExitCodes.SignFailed | ExitCodes.UnknownError)

16 + 32. :) হবে


3
এটি সূচিত করে যে কোনও প্রোগ্রাম বলবে যে 'আপনার পাসওয়ার্ডটি ভুল' তারপরে যা যা স্বাক্ষর করছে তা স্বাক্ষর করে দেখুন এবং ব্যর্থ হলে কেবল বন্ধ করুন। একবার ব্যর্থ হয়ে গেলে আপনার ফিরে আসা উচিত; অন্য কিছু একটি সতর্কবার্তা এবং প্রোগ্রাম এখনও 0. ফিরে যাওয়া উচিত
পিট Kirkham

3
অল্প পরিচিত তথ্য হ'ল [ফ্ল্যাগস] বিটওয়াইজ অপারেশন সক্ষম বা অক্ষম করতে কিছুই করে না। এটি যা কিছু করে তা টুস্ট্রিং পদ্ধতিকে ওভাররাইড করে যাতে আউটপুট বিটওয়াইড পতাকাগুলি উপস্থাপন করে। এটির সাথে বা এটি ছাড়া আপনি এখনও বিটওয়াইজ অপারেশন করতে পারেন।
স্টিভেন

3
@ স্টিভেন এটি জানতে পেরে ভাল তবে আমি এখনও এই বৈশিষ্ট্যটি সহ "পতাকা ব্যবহারের" উদ্দেশ্যে উদ্ভুত এনামগুলিকে সাজানোর প্রস্তাব দিই, যদি অন্য কোনও কিছু উদ্দেশ্য না জানায়।
মারিওডিএস

25
int code = 2;
Environment.Exit( code );

17
কোনও প্রযুক্তিগত কারণে আপনি কেবল "পরিবেশ.এক্সিট (2)" লিখেন নি; ?
ব্লারগার্ড

52
অর্থহীন নামের সাথে একটি ভেরিয়েবলে একটি ম্যাজিক নম্বর নির্ধারণ করা কোনও কম যাদু করে না।
ব্লারগার্ড


11

মূল থেকে অ্যাপ্রোপিয়েট কোডটি ফিরিয়ে দিন।

int main(string[] args)
{
      return 0; //or exit code of your choice
}

2
ডিফল্ট সি # কনসোল অ্যাপ্লিকেশন একেবারেই প্রধান ঘোষণা করে না। এটি ঘোষণা করেছে static void Main(string[] args);
মার্ক লাটাটা

19
@ মার্ক লত্তা: তাহলে এটাকে বদলান, না?
এস্তেবান আরায়ায়

11

যদি আপনার প্রধানটির শূন্য রিটার্ন স্বাক্ষর থাকে তবে এক্সিটকোড ব্যবহার করুন, অন্যথায় আপনি যে মানটি ফিরিয়েছেন তার দ্বারা আপনাকে এটি "সেট" করতে হবে।

পরিবেশ.এক্সিট কোড কোড

যদি প্রধান পদ্ধতিটি বাতিল হয়ে যায়, আপনি এই সম্পত্তিটি প্রস্থান কোড সেট করতে ব্যবহার করতে পারবেন যা কলিং পরিবেশে ফিরে আসবে। যদি মেইন অকার্যকর না ফিরে আসে তবে এই সম্পত্তিটিকে অগ্রাহ্য করা হবে। এই সম্পত্তিটির প্রাথমিক মান শূন্য।


8

স্কট মুনরোর উত্তরটির আপডেট হিসাবে :


আপনার # # সি সম্পর্কিত 1 ম পয়েন্টটি যাচাই করা যেতে পারে? আমি অনলাইনে কিছুই খুঁজে পাচ্ছি না। মূল ফাংশন থেকে ফেরতের মান প্রক্রিয়াটির প্রস্থান কোডের সাথে সংযুক্ত থাকে (কমপক্ষে সমস্ত পূর্ববর্তী সংকলকগুলিতে), কেন তাদের এটি পরিবর্তন করা উচিত ছিল?
আরমান ম্যাকহেষ্টিয়ান

বিশুদ্ধ অকল্পনীয় প্রমাণ, কিন্তু আমি শুধু এই মধ্যে আমার নিজের গ্রন্থাগার, যেখানে কেবল থেকে আমার ফলাফলের / ত্রুটি কোড ফেরার দৌড়ে Main()সেট না Process.ExitCodeযেমন কলিং অ্যাপ্লিকেশন দ্বারা দেখা যায়।
মার্কাস মঙ্গেলসডর্ফ

এমএসডিএন কন্টেন্টগুলি int Mainএখনও পরিবেশ.এক্সিট কোডের বিকল্প হিসাবে ব্যবহার করা যেতে পারে। লিংক
আরমান ম্যাকহেষ্টিয়ান

আমার একটি অ্যাপ্লিকেশন রয়েছে যা একাধিক থ্রেড চালায়। কিছু নির্দিষ্ট পরিস্থিতিতে, অ্যাপ্লিকেশনটি ছাড়ার আগে আমাকে থ্রেড.এবার্ট () এর মাধ্যমে কিছু থ্রেড ক্লোবার করতে হবে। এই পরিস্থিতিতে, ইন মেইন () thread ... থ্রেড.এবোর্ট (); ... রিটার্ন 0; এর প্রসেস প্রস্থান কোডের ফলাফল 0 হয় না: প্রক্রিয়া প্রস্থান কোড -1 হয়। কিছু পরিস্থিতিতে মনে হয়, এমএস সিদ্ধান্ত নিয়েছে যে প্রক্রিয়াটির প্রস্থান কোড নির্ধারণের জন্য মূল থ্রেডের রিটার্ন মান ব্যবহারের কনভেনশনটি তাদের পক্ষে যথেষ্ট ভাল নয়। ন্যায়বিচারে, এটি একটি সময়সীমা হতে পারে: থ্রেড অ্যাওর্টটি খেলায় খুব দেরিতে প্রস্থান কোডটি সেট করে।
ডেভিড আই ম্যাকিনটোস

7

গণনা বিকল্পটি দুর্দান্ত তবে সংখ্যার গুণকে আরও উন্নত করা যেতে পারে:

enum ExitCodes : int
{
  Success = 0,
  SignToolNotInPath = 1,
  AssemblyDirectoryBad = 2,
  PFXFilePathBad = 4,
  PasswordMissing = 8,
  SignFailed = 16,
  UnknownError = 32
}

একাধিক ত্রুটির ক্ষেত্রে, নির্দিষ্ট ত্রুটি সংখ্যা একসাথে যুক্ত করা আপনাকে একটি অনন্য নম্বর দেয় যা সনাক্ত করা ত্রুটির সংমিশ্রণের প্রতিনিধিত্ব করবে।

উদাহরণস্বরূপ, 6 এর একটি ত্রুটিযুক্ত মাত্রায় কেবল 4 এবং 2 ত্রুটি থাকতে পারে, 12 কেবলমাত্র 4 এবং 8 ত্রুটিগুলি নিয়ে গঠিত হতে পারে, 14 কেবল 2, 4 এবং 8 ইত্যাদির সমন্বয়ে থাকতে পারে etc.


2
এটি হ'ল যদি আপনি মুখোমুখি হওয়ার পরে আরও ত্রুটিগুলি পরীক্ষা করার জন্য বিরক্ত হন। বেশিরভাগ অ্যাপ্লিকেশন না।
নাইয়ারগডস

3

আমার 2 সেন্ট:

আপনি এখানে সিস্টেম ত্রুটি কোডগুলি খুঁজে পেতে পারেন: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

আপনি "ফাইল পাওয়া যায়নি" এর জন্য 2 বা "অ্যাক্সেস প্রত্যাখ্যান" এর জন্য 5 এর মতো সাধারণ কোডগুলি দেখতে পাবেন।

এবং আপনি যখন অজানা কোডটিতে হোঁচট খাচ্ছেন, আপনি এর অর্থ কী তা জানার জন্য এই আদেশটি ব্যবহার করতে পারেন:

net helpmsg decimal_code

যেমন

নেট হেল্পসএমজি 1

আয়

ভুল ফাংশন


0

এই কোড ব্যবহার করুন

Environment.Exit(0);

আপনি যদি কিছু ফিরিয়ে দিতে না চান তবে 0 ব্যবহার করুন int


এটি ওপি-র প্রশ্নের উত্তর দিচ্ছে না এবং 0 ফিরাই কিছু ফিরিয়ে দিচ্ছে ...
পিএল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.