2010-04-21 14 views
41

मेरे पास सी # में एक कंसोल एप्लिकेशन लिखा गया है जो अंतर्निहित विंडोज टास्क शेड्यूलर का उपयोग करके हर 15 मिनट या तो चलाने के लिए निर्धारित है।पृष्ठभूमि में एक .NET कंसोल एप्लिकेशन कैसे चलाएं

हर बार जब यह चलता है, तो ब्लैक कंसोल बॉक्स इसके निष्पादन की अवधि के लिए पॉप अप करता है और फिर बंद हो जाता है। मैं कंसोल पर कुछ भी नहीं लिख रहा हूं। पृष्ठभूमि में यह रन बनाने का कोई तरीका है?

+0

कंसोल ऐप से नहीं, मुझे लगता है कि आपको सुपरसियर से यह पूछना चाहिए कि इसे शेड्यूलर में कैसे कॉन्फ़िगर करें। –

उत्तर

46

आसान:

कोड सांत्वना कम करने के लिए!

यह विश्वास करना मुश्किल लगता है, लेकिन यह एक आकर्षण के रूप में काम करता है। मैंने कुछ सेटअप परियोजनाओं के लिए इसका उपयोग किया है, जब आप इसके बिना किसी संकेत के कस्टम कार्य करना चाहते हैं।

  • विंडोज़ एप्लिकेशन प्रोजेक्ट के रूप में प्रोजेक्ट बनाएं (यह कठिन हिस्सा है)।
  • किसी भी रूप में कभी भी कॉल न करें। बस अपने सांत्वना आवेदन

    class Program 
    { 
        static void Main(string[] args) 
        { 
         // Just don't call Application.Run(new frmMain(args)); 
    
         // ... your code 
        } 
    } 
    

इसका कारण यह है खिड़कियों आवेदन परियोजनाओं कोई वास्तव में, सांत्वना की तुलना में अलग है क्योंकि प्रथम रूप और संदर्भ के अलावा हैं की ही तरह बिल्कुल में पर रहते हैं। यह पूरी तरह छुपा निष्पादन है। कोशिश करो!

+0

मुझे ऐसा लगता है कि कोड कोड की तरह दिखता है - sry –

9

ऐप को विंडोज़ सेवा में लागू करने के बारे में क्या? आप अंतराल को 15 मिनट तक सेट कर सकते हैं और ऑपरेशन को timer_tick में चला सकते हैं।

1

गंदा वहाँ बाहर कुछ भी लेकिन (from here) के रूप में:

प्रक्रिया 3 फ़ाइलें लेता है। launch.bat, invis.vbs, और (आपके प्रोग्राम)। Launch.bat में (यह फ़ाइल आपके प्रोग्राम को चुपचाप चलाती है), wscript.exe "C:\yourpath\invis.vbs" "your file.bat" पर डालें। invis.vbs में,

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False

और अंत में आपकी फ़ाइल में, launch.bat, डाल जो चाहो में डाल ...

echo off erase c:\junk.txt। ठीक है आप कर चुके हैं। बस launch.bat खोलें।

हालांकि यह एक आकर्षण की तरह काम करता है। यह पहला बल्ले (लॉन्च.बैट) लॉन्च करता है, जो बदले में आपकी सेवा/निष्पादन योग्य चुपके में लॉन्च करता है। तो, यह मूल लॉन्च के लिए ब्लिप है, फिर चला गया।

9

आप कंसोल बॉक्स को कम करने के लिए विंडोज एपीआई का उपयोग कर सकते हैं। अन्यथा आप इसे एक विंडोज एक्सई फ़ाइल बना सकते हैं जो वास्तव में एक फॉर्म लोड नहीं करता है और System.Windows.Forms.Application.Run() पर कॉल करता है।

[DllImport("user32.dll")] 
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

public const int SW_SHOWMINIMIZED = 2; 

IntPtr winHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; 
ShowWindow(winHandle, SW_SHOWMINIMIZED); 
+1

मैं इसे पोस्ट करने के लिए तैयार हो रहा था! विंडो छुपाने के लिए: सार्वजनिक कॉन्स int SW_HIDE = 0; पुनर्स्थापित करने के लिए: सार्वजनिक कॉन्स int SW_RESTORE = 9; – JohnForDummies

2

यह केवल तब दिखाया जाएगा जब यह उसी उपयोगकर्ता के रूप में चलाने के लिए निर्धारित है जो वर्तमान में लॉग इन है। हास्यास्पद रूप से लंबे पासवर्ड के साथ मशीन पर एक और उपयोगकर्ता बनाएं, इसे एक प्रशासक (केवल तभी आवश्यक हो) सेट करें और कार्य को शेड्यूल करें उस उपयोगकर्ता के रूप में चलाने के लिए।

0

यह आसान है। उस खाते के अंतर्गत चलाने के लिए कार्य सेट करें जो आपका लॉगिन खाता नहीं है।

133

प्रोजेक्ट> गुण> एप्लिकेशन टैब> आउटपुट प्रकार को "विंडोज़ एप्लिकेशन" में बदलें।

कोई और कंसोल विंडो नहीं।

+6

मैं एक ही समस्या में भाग गया था, और इस जवाब ने मुझे स्वीकार किए गए एक से कहीं अधिक मदद की। – user17753

+0

सहमत - यह एक अच्छा जवाब है - वास्तव में सरल है और पूरी तरह से काम करता है –

+2

अविश्वसनीय चाल, धन्यवाद :) –

5

यदि आपके पास पहले से ही एक विंडोज कंसोल ऐप बनाया गया है तो आप अपने ऐप के आउटपुट प्रकार को विंडोज एप्लिकेशन में बदल सकते हैं।

अपनी परियोजना के तहत: गुणों पर जाएं> एप्लिकेशन आउटपुट प्रकार के रूप में "विंडोज़ एप्लिकेशन" का चयन करें।

यह कम से कम प्रभाव होगा और आप अपने विंडोज टास्क शेड्यूलर को एक ही कार्य को चला सकते हैं।

संबंधित मुद्दे