कार्यक्रम अनुसूचित कार्य के रूप में ठीक से नहीं चलता है


12

परिस्थिति

मेरे पास एक बैच स्क्रिप्ट है जो कुछ फाइलें तैयार करती है, एक प्रोग्राम निष्पादित करती है ( .exe) और फिर उक्त फाइलों को डिलीट कर देती है।

यह कार्य प्रति घंटा चलना चाहिए, इसलिए मैं अनुसूचित कार्य का उपयोग करके इसे कॉन्फ़िगर करने का प्रयास कर रहा हूं। समस्या यह है कि पहले उल्लिखित कार्यक्रम ठीक से नहीं चलता है जब कार्य से आमंत्रित किया जाता है (न तो .batस्क्रिप्ट के माध्यम से , और न ही .exeसीधे कॉल करते समय ), लेकिन मुझे लॉग में कोई चेतावनी या त्रुटि संदेश नहीं मिलता है।

सेट अप

कार्य Windows सेवा खाते के रूप में चलाने के लिए कॉन्फ़िगर किया गया है जिसमें सभी विशेषाधिकार ठीक से सेट हैं। आरडीपी के माध्यम से लॉगऑन करने के लिए इस खाते का उपयोग करते समय, मैं समस्याओं के बिना .batऔर .exeसीधे निष्पादित कर सकता हूं , लेकिन फिर भी कार्य कुछ भी नहीं करने के लिए प्रकट होता है। यह आसानी से मनाया जाता है क्योंकि कार्यक्रम हमेशा एक फ़ाइल को संशोधित करता है, और टाइमस्टैम्प पर संशोधित कार्य के माध्यम से नहीं बदलता है।

निर्धारित कार्य लॉग में, मुझे एक प्रक्रिया शुरू करने, बाहर निकलने आदि के लिए सूचना संदेश मिलते हैं, "परिणाम कोड", हालांकि, 111(भाग्य के बिना Google के लिए यह प्रयास किया जाता है, केवल संघ मुझे मिलता है "फ़ाइल नाम बहुत लंबा है" ", जो पूरी तरह से अप्रासंगिक AFAIK है)। एप्लिकेशन लॉग में, मुझे बिल्कुल कुछ नहीं मिलता है।

मुझे संदेह है कि समस्या क्या है

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

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


GUI के बारे में संपादित करें

मैंने एक बहुत छोटा C # निष्पादन योग्य बनाया है जो मुख्य विंडो (उपयोग ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden) के बिना प्रोग्राम लॉन्च करता है । इस तरह भी, निर्धारित कार्य अभी भी प्रोग्राम को सही ढंग से लॉन्च करने में सफल नहीं होता है, लेकिन अब रिटर्न कोड है 0


अपडेट करें

जब मैं यह कहने के लिए कार्य को कॉन्फ़िगर करता हूं कि "उपयोगकर्ता लॉग ऑन है या नहीं" चलाएं, और run with highest privilegesविकल्प अनियंत्रित है , तो त्रुटि मान है 2147943859


मैं समस्या निवारण के लिए क्या कर सकता हूं?

OS = Windows Server 2008 R2 SP1

यदि अधिक जानकारी की आवश्यकता है, तो कृपया मुझे टिप्पणियों में बताएं।


क्या आपकी स्क्रिप्ट और "प्रोग्राम" कोई इनपुट लेते हैं, जैसे विकल्प या पैरामीटर? क्या आपने बैच के बजाय पावरशेल का उपयोग करने की कोशिश की है? जब .exeएक स्क्रिप्ट के भीतर से पैरामीटर के साथ "प्रोग्राम" शुरू करते हैं , तो इनपुट को तर्क के रूप में ठीक से प्रदान किया जाना है।
slybloty

1
क्या आपने एक अलग कार्यक्रम के साथ अनुसूचक की कोशिश की है? बस एक कार्यक्रम को एक अलग से बदलें, और देखें कि आपको क्या परिणाम मिलते हैं।
slybloty

2
@ आउट-नल मुझे नहीं लगता कि कार्य शेड्यूलर विंडो का उपयोग यह जानने के लिए करता है कि कार्यक्रम कब समाप्त हो रहा है, इसे प्रक्रिया का इंतजार करना चाहिए, जो भी यह विंडोज़ के साथ करता है। लेकिन अगर प्रोग्राम अपनी स्प्लैश स्क्रीन बनाने के लिए कुछ विशिष्ट देखने की कोशिश करता है (चलो कार्य पट्टी कहते हैं) और इसे खोजने में विफल रहता है (क्योंकि यह एक अलग डेस्कटॉप / विंडो स्टेशन पर चलता है), यह हो सकता है कि तब यह बंद हो जाए ...
22

1
ठीक। क्या आपने इसे लोकल सिस्टम खाते के तहत चलाने की कोशिश की है? इसके अलावा, क्या आपने Sysinternals के प्रोसेस मॉनिटर के साथ प्रोसेस लॉन्च इवेंट की निगरानी करने की कोशिश की है?
लकी ल्यूक

1
@BradBouchard भले ही आपका जवाब इस विशिष्ट मामले में OPs प्रश्न को हल न कर पाए , लेकिन यह एक मान्य उत्तर है और भविष्य के विज़िटर के लिए SF के लिए उपयोगी हो सकता है, और इसलिए मैं आपको इसे नष्ट न करने के लिए प्रोत्साहित करूँगा।
मैं कहता हूं कि मोनिका

जवाबों:


6

मेरा मानना ​​है कि आपकी समस्या को कार्य को चलाने के लिए उपयोग की जा रही खाते की अनुमतियों के साथ करना है, या कार्य को चलाने का प्रयास करते समय खाते का संदर्भ मौजूद है।

कंसोल सत्र की आवश्यकता के लिए टेस्ट

यह संभव है कि आपका .EXEConsole कंप्यूटर पर सत्र (उर्फ सत्र 0) में चलाया जाए । इसके लिए परीक्षण करने के लिए:

  1. उपयोगकर्ता के लॉग ऑन होने पर ही कार्य चलाने के लिए कॉन्फ़िगर करें और भविष्य में 2 मिनट का कार्य प्रारंभ करें
  2. कार्य को चलाने के लिए उपयोग किए जाने वाले समान उपयोगकर्ता खाते के साथ मशीन पर लॉग ऑन करें (अधिमानतः कंसोल सत्र पर लॉग ऑन करें, या तो भौतिक रूप से कंसोल पर हो या रिमोट एक्सेस प्रोग्राम का उपयोग करके जो कंसोल तक पहुंच प्रदान करता है। यह पुष्टि करने के लिए आप उपयोग कर रहे हैं। सांत्वना सत्र, कमांड प्रॉम्प्ट रन से QWINSTA, SESSIONNAMEकॉलम का निरीक्षण करें, और पुष्टि करें कि >सूचक के बगल में है console, दूसरे शब्दों में यह इस प्रकार दिखाई देना चाहिए >console)
  3. कार्य को चलाने के लिए प्रतीक्षा करें

यदि कार्य सही तरीके से चलता है, SCHTASKS.EXEतो /ITपैरामीटर का उपयोग करके कार्य को शेड्यूल करने का प्रयास करें । ऐसा करने में, आपके पास अपने सेवा उपयोगकर्ता खाते के रूप में स्वचालित रूप से लॉग ऑन करने और स्टार्टअप प्रोग्राम के रूप में कार्य चलाने के लिए कंप्यूटर को कॉन्फ़िगर करने के अलावा कोई विकल्प नहीं हो सकता है।

अनुमतियाँ जांचें

इसके अतिरिक्त, जैसा कि मैंने पहले ही सुझाव दिया है, कार्य को ठीक से चलाने के लिए उपयोग किए गए खाते की पुष्टि करने के लिए निम्नलिखित की जांच करें:

  1. एक बैच नौकरी उपयोगकर्ता अधिकार के रूप में लॉगऑन को खाता दें (स्थानीय समूह नीति में मिला Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments)
  2. कार्य की पुष्टि करें उच्चतम विशेषाधिकार के साथ चलाने के लिए कॉन्फ़िगर किया गया है
  3. पुष्टि करें कि उपयोगकर्ता के पास सभी फ़ोल्डर और फ़ाइलों के लिए पूर्ण NTFS अनुमतियाँ हैं, जिनके साथ उसे सहभागिता करनी चाहिए। कोई धारणा न बनाओ; इसके बजाय ऐसे फ़ाइल स्थानों पर नेविगेट करने और Effective Permissionsफ़ाइल / फ़ोल्डर के गुणों में टैब का उपयोग करके पुष्टि करेंSecurity > Advanced

जाँच / प्रयास करने के लिए अतिरिक्त चीजें

  • क्या कार्य को नेटवर्क संसाधनों तक पहुंच की आवश्यकता है? मैप्ड ड्राइव जैसी चीजें तब मौजूद हो सकती हैं जब आप उपयोगकर्ता खाते के साथ लॉगऑन करते हैं, लेकिन सर्वर के कॉन्फ़िगरेशन के आधार पर टास्क शेड्यूलर से निष्पादित होने पर उपयोगकर्ता खाते के संदर्भ में मौजूद नहीं हो सकता है।
  • अपनी बैच फ़ाइल में कुछ लॉगिंग जोड़ें। हर लाइन के क्रियान्वित होने के बाद, यह एक लॉग फ़ाइल में कुछ आउटपुट लिखता है ताकि आप जान सकें कि यह कहाँ अटक रहा है। उदाहरण के लिए:

    @echo off
    echo Line 1 >> "C:\MyLog.txt"
    "C:\My Folder\myOldProgram.exe"
    echo Line 2 >> "C:\MyLog.txt"
    DEL somefile.dat
    echo Line 3 >> "C:\MyLog.txt"
    
  • उदाहरण के लिए, अपने .EXE को चलाने का प्रयास करेंSTARTSTART "myTitle" "C:\full\path\to\my.EXE"


2

मैं किसी पुराने पोस्ट का जवाब दे रहा हूं अगर यह किसी और की मदद करता है। मेरी भी यही समस्या थी। इवेंट लॉग ने कहा कि कार्यक्रम सामान्य रूप से पूरा हो गया है, लेकिन कोड की पहली पंक्ति भी मेरे लिए लॉग पर नहीं लिखेगी। यह कार्य शेड्यूलर में "स्टार्ट इन" विकल्प होने के कारण समाप्त हो गया। यह मेरे लिए हुआ कि जब मैं वर्तमान डायरेक्टरी में था तब प्रोग्राम कमांड लाइन से ठीक चला। एक ही निर्देशिका में प्रकट फाइलें और अन्य निर्भरताएं हैं। इसलिए यदि आप निर्धारित कार्य को EXE के समान निर्देशिका में शुरू करने के लिए कहते हैं, तो आपको अनुकूल परिणाम मिल सकते हैं। यह मेरे लिए समाधान था।


यह एक कस्टम कंसोल ऐप है जो विजुअल स्टूडियो में विकसित कॉन्फिग फाइल के साथ चल रहा है।
बिलफ्रेडटॉम

1

शायद यह आपकी मदद करता है?

/programming/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-requires-a-user-to-be

हमारे पास एक समान समस्या थी और आपका एकमात्र समाधान यह था कि हमने ऑटोलॉगिन के साथ सर्वर पर एक विशेष खाता बनाया। इसलिए यदि कार्य हमारे उपयोगकर्ता में पहले से ही लॉग इन के तहत भाग गया है।

मुझे पता है कि यह एक बहुत अच्छा समाधान नहीं है, लेकिन हमारे लिए यह एकमात्र ऐसी चीज थी जो काम करती थी। मुझे नहीं पता कि यह आपके लिए काम करता है ... (लेकिन इस काम के साथ आपको अपने आसपास की जाँच करनी होगी कि क्या उपयोगकर्ता वास्तव में हर समय लॉग इन है ...)


जब उपयोगकर्ता प्रभावी रूप से चलाता है (RDP के माध्यम से) पर लॉग किया गया है, तो यह कार्य मेरे लिए सही ढंग से भी नहीं चलता है। मैं RDP के माध्यम से लॉग ऑन करने के लिए सेवा खाते का उपयोग करता हूं, कार्य को मैन्युअल रूप से शुरू करता हूं और मुझे एक विंडो दिखाई नहीं देती है।
मारियो 10

2
क्या आपने "उच्चतम विशेषाधिकारों के साथ चलने" का विकल्प चुना है? मुझे लगता है कि जब आपने इस विकल्प की जांच की है तो अधिकारों का एक रहस्योद्घाटन (यूएसी) होगा और जब उपयोगकर्ता लॉग इन होगा तब भी आपको एक विंडो नहीं दिखाई देगी (बिना विंडो के एक अलग सत्र में बुलाया जाएगा और विफल हो जाएगा)। इसके अलावा "कॉन्फ़िगर के लिए" -> "विंडोज सर्वर 2003, विंडोज एक्सपी या विंडोज 2000" विकल्प का चयन करने का प्रयास करें।
Frupfrup

ऐसा लगता है कि कोई फर्क नहीं पड़ता, सिवाय इसके कि जब मैं अब सेट करता हूं "तो चलाएं कि उपयोगकर्ता लॉग ऑन है या नहीं" मुझे त्रुटि कोड 2147943859 मिलता है। मैं केवल Windows Vista/Windows Server 2008या तो "कॉन्फ़िगर किया गया" सेट कर सकता हूं या नहीं Windows 7/Windows Server 2008 R2। इससे कोई फर्क नहीं पड़ता।
मारियो

ठीक। एक आखिरी परीक्षा: "आसान कार्य बनाएं" के बजाय "नया कार्य बनाएं" के साथ एक नया कार्य बनाएं (मुझे नहीं पता कि कौन सा पाठ वास्तव में दिखाया गया है - मेरे सर्वर जर्मन हैं - लेकिन मुझे आशा है कि आपको पता है कि मेरा क्या मतलब है।) और फिर। मुझे लगता है कि आप "विंडोज़ सर्वर 2003, ..." का चयन कर सकते हैं। और फिर pls अन्य विकल्पों के साथ एक बार फिर कोशिश करें ...
frupfrup

1

हमारे ग्राहकों के सर्वर चलाने वाली कंपनी के लोगों ने कहा कि GUI कार्यक्रम किसी भी तरह से निर्धारित कार्यों से नहीं चलेगा।

वे एक निगरानी प्रणाली का उपयोग करते हैं जिसमें कार्य समय-निर्धारण विशेषताएं भी होती हैं। उन्होंने इसे उसी के माध्यम से स्थापित किया है और यह काम करने के लिए प्रकट होता है।

क्षमा करें कि मुझे यहां अधिक सुझावों का मूल्यांकन करने का मौका नहीं मिला, लेकिन फिर भी मदद करने के लिए धन्यवाद। मुझे उम्मीद है कि यह भविष्य में दूसरों की मदद कर सकता है, जो मुझे लगता है कि यह निश्चित रूप से होगा।


1

मैं Windows 2008 R2 सर्वर पर कार्य शेड्यूलर का उपयोग करके VB6 प्रोग्राम शुरू करने और पुराना करने का प्रयास कर रहा था। आवेदन एक्स से, बैच फ़ाइल के माध्यम से या शॉर्टकट पर क्लिक करके चलेगा, लेकिन कार्य अनुसूचक से नहीं चलेगा। मैंने पाया कि जब अनुप्रयोग के लिए विन्यास फाइल, जो कि C: \ program files (x86) डायरेक्टरी में एप्लीकेशन फोल्डर में संग्रहित थी, को c: \ programdata पर एप्लिकेशन फोल्डर में कॉपी किया गया था। शेड्यूलर ने काम किया। ऐसा प्रतीत होता है कि cmd.exe कार्य शेड्यूलर द्वारा उपयोग किए गए किसी भिन्न स्थान से कॉन्फ़िगरेशन को लागू करता है। यदि आपके एप्लिकेशन में कॉन्फ़िगरेशन फ़ाइलें हैं, तो आप उन्हें c: \ programdata \ application फ़ोल्डर में ले जाने का प्रयास कर सकते हैं।


0

क्या आप अपनी स्क्रिप्ट या प्रोग्राम में किसी भी मैप किए गए नेटवर्क ड्राइव को संदर्भित कर रहे हैं ? मेरे पास कुछ समय पहले ऐसा ही मुद्दा था, जहां मेरा निर्धारित कार्य नहीं चलेगा, और मैं यह पता नहीं लगा सका कि क्यों। UNC के रास्तों को बदलने से यह मेरे लिए हल हो गया।

बदलें T:\Apps\MyProgram.exeकरने के लिए\\MyServer\MyShare\Apps\MyProgram.exe


नहींं, कार्यक्रम स्थानीय C:ड्राइव पर है।
मारियोडीएस

0

जब मैं यह कहने के लिए कि "उपयोगकर्ता लॉग ऑन है या नहीं" कार्य को कॉन्फ़िगर करें, और उच्चतम विशेषाधिकार विकल्प के साथ रन अनियंत्रित है, तो त्रुटि मान 2147943859 है।

2147943859 हेक्स में परिवर्तित हो गया 800705b3 है जो Google की एक त्वरित यात्रा का अर्थ है "कंप्यूटर पर इंस्टॉलेशन शुरू नहीं कर सका। इस ऑपरेशन के लिए एक इंटरैक्टिव विंडो स्टेशन की आवश्यकता है।"

अब, PSEXEC (Sysinternals से) का उपयोग किए बिना इसे अंतःक्रियात्मक तरीके से चलाने का कारण हो सकता है, लेकिन जब से मैं पहले से ही जानता हूं कि PSEXEC के माध्यम से यह कैसे करना है कि मैं क्या उपयोग करूंगा।

PSExec: http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

इसलिए, psexec.exe -i (और -h यदि आपको इसे उच्चीकृत करने की आवश्यकता है) के साथ सब कुछ प्रस्तुत करने के लिए अपनी कार्रवाई को बदलें और इसे काम करना चाहिए।

मैंने अपनी 'कार्रवाई' में निम्न के साथ Windows Server 2008 R2 SP1 पर यह कोशिश की है:

c:\windows\system32\cmd.exe

और फिर पैरामीटर:

/c psexec.exe -h -i notepad.exe

जब मैं मैन्युअल रूप से कार्य चलाता हूं (चूंकि मेरे पास इसका समय नहीं है) तो मुझे अपने वर्तमान सत्र में एक ऊंचा नोटपैड चल रहा है।


0

शायद इस सवाल का जवाब किसी और को इस धागे को पढ़ने में मदद करेगा?

/programming/32589381/

सारांश: विंडोज 2012 शेड्यूल किए गए टास्क को उस खाते के लिए सही वातावरण वेरिएबल नहीं दिखाई देता है, जिसमें PATHकार्य को चलाने के लिए सेट किया गया है।

इससे पहले कि मैंने ऊपर काम किया, मैं यह सब काफी पहले पढ़ चुका था। (जो ओपी के सवाल के समान ही मेरी अपनी समस्या थी।)

एक बार जब आप (अंत में!) यह जानते हैं, तो इसके लिए परीक्षण करना बहुत आसान है (स्टैकओवरफ्लो उत्तर के अनुसार), इसे होते हुए देखें, और इसके चारों ओर काम करें ...।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.