मेरे पास एक सी # एप्लिकेशन है जिसमें एक गुई है और इसका आउटपुट प्रकार विंडोज एप्लिकेशन के रूप में सेट है। मैं इसे कमांड लाइन (पैरामीटर के माध्यम से) से भी आमंत्रित करना चाहता हूं और इस प्रकार इसे कंसोल एप्लिकेशन भी होना चाहिए। क्या मेरे एप्लिकेशन को विंडोज़ एप्लिकेशन और कंसोल एप्लिकेशन के रूप में चलाने के लिए कोई तरीका है? क्या इसे रन टाइम पर सेट करने का कोई तरीका है या क्या यह संकलन समय सेटिंग है?.NET प्रोग्राम को आउटपुट प्रकार का विंडोज़ एप्लिकेशन और कंसोल एप्लिकेशन
उत्तर
आप कंसोल संलग्न कर सकते हैं। Program.cs में कोड इस तरह दिखें:
[STAThread]
static void Main(string[] args) {
if (args.Length > 0) {
AttachConsole(-1);
Console.WriteLine("");
Console.WriteLine("Running in console, press ENTER to continue");
Console.ReadLine();
}
else {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);
एक विंडोज़ फॉर्म एप्लिकेशन कमांड लाइन तर्क स्वीकार कर सकता है। एप्लिकेशन को मुख्य फॉर्म दिखाने से पहले आपको अपने मुख्य कार्य में इस मामले को संभालने की आवश्यकता है।
static void Main(string[] args)
{
if (args.Length > 0)
{
// Run it without Windows Forms GUI
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
यहां तक कि अपने अनुप्रयोगों के उत्पादन प्रकार विंडोज़ अनुप्रयोग के रूप में सेट कर दिया जाता है, तो आप अभी भी यह कमांड लाइन से आह्वान और तर्क पारित कर सकते हैं।
बस अपनी मुख्य विधि परिभाषा को यहां बदलें: स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {...} और आपके पास 'args' चर में पास किए गए तर्कों तक पहुंच है।
यह एक संकलन-समय सेटिंग है: विकल्प csc
संकलक पर विकल्प है। /target:winexe
एक विंडोज़ एप्लिकेशन बनाता है (यानी एक जीयूआई के साथ); /target:exe
एक कंसोल अनुप्रयोग बनाता है। हालांकि, दोनों प्रकार के आवेदन कमांड लाइन तर्क स्वीकार कर सकते हैं।
मैंने दोनों का निर्माण समाप्त कर दिया है - मैं एक सच्चे विंडोज़ प्रोग्राम और एक सच्चे कंसोल एप्लिकेशन चाहता था। – DanDan
इस तरह के काम करता है लेकिन यह थोड़ा विचित्र लगता है। मैं स्वीकार करूंगा लेकिन मैं दो अलग-अलग अनुप्रयोगों, विंडोज और कंसोल के लिए गया हूं। – DanDan
क्विर्की बिट शायद आप एक ऐसे कंसोल में लिख रहे हैं जिसे आपने नहीं बनाया था। आउटपुट मिश्रित हो जाता है। आप AllocConsole() का भी उपयोग कर सकते हैं लेकिन फिर इसे स्वयं प्राप्त हो जाता है। –