2011-11-17 9 views
5

मुझे कोड मिला है जो कार्य बनाने के लिए C# TaskManager ऑब्जेक्ट का उपयोग करता है। विंडोज 7 पर यह ठीक काम करता है लेकिन विंडोज एक्सपी (और संभवतः अन्य विंडोज़) पर यह बिल्कुल काम नहीं करता है क्योंकि कार्य के लिए डिफ़ॉल्ट उपयोगकर्ता सिस्टम है और इस प्रकार जीयूआई प्रदर्शित होने के लिए कोई सत्र नहीं है। यदि मैं नियंत्रण कक्ष विजेट में मैन्युअल रूप से बनाए गए कार्य को मैन्युअल रूप से चलाने के लिए सेट करता हूं, तो उपयोगकर्ता केवल लॉग इन होने पर और केवल विशेष उपयोगकर्ता के लिए, तो सब कुछ पूरी तरह से काम करता है। लेकिन खोज के घंटों के बावजूद मुझे सी # ऑब्जेक्ट्स में इन विकल्पों को सेट करने के लिए कोई विकल्प नहीं दिखता है। किसी को मौजूदा वस्तुओं के साथ समाधान पता है? मैं शेड्यूलर EXE मैन्युअल रूप से चलाने के लिए सब कुछ लिखने से नफरत करता हूं और कमांड लाइन द्वारा सामान में पास करता हूं।सी # में टास्कशेड्यूलर के साथ "केवल लॉग इन होने पर" और "रन" के रूप में सेट करने के लिए कैसे सेट करें?

क्यू

+1

कार्य शेड्यूलर इंटरफ़ेस COM आधारित है, उदाहरण के लिए आपको IScheduledWorkItem :: SetFlags() की आवश्यकता होगी। कोई "सी # कार्य प्रबंधक वस्तु" नहीं है। शायद आपको कहीं भी मिले कोड के लिंक को पोस्ट करना चाहिए? –

+0

धन्यवाद! मैंने इसे अपने आप खोजना समाप्त कर दिया, लेकिन आप मेरे बारे में एक तीसरे पक्ष के आवरण का उपयोग करने के बारे में सही थे, मुझे एहसास नहीं हुआ! मैंने समाधान पोस्ट किया। –

+0

@QuinxyvonBesiex आपको अपना उत्तर नीचे जोड़ना चाहिए और फिर समय की आवश्यकता के बाद, इसे उत्तर के रूप में चुनें - चीजों को साफ रखता है – Prescott

उत्तर

4

ठीक है, मैं इस सवाल का जवाब पता लगा!

मुझे इसका एहसास नहीं था, लेकिन मैं तीसरे पक्ष Task Scheduler Managed Wrapper का उपयोग कर रहा था (यह थोड़ी देर के बाद से मैंने अपने कोड का हिस्सा लिखा था) और यह बताता है कि मदद क्यों मुश्किल थी! मैं एक पल पहले उस पृष्ठ पर ठोकर खाई और वहां उनके उदाहरणों में बस वही था जो मुझे चाहिए! detailed solution in context can be found here, लेकिन महत्वपूर्ण हिस्सा है:

// Create a new task definition and assign properties 
TaskDefinition td = ts.NewTask(); 
td.Principal.UserId = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
td.Principal.LogonType = TaskLogonType.InteractiveToken; 

मदद करने की कोशिश कर के लिए धन्यवाद!

+0

कुछ मामलों में लॉगऑन प्रकार को बस सेट करने से कहीं अधिक है। यदि अकेले इस उत्तर को आपका कोड काम नहीं मिल रहा है, तो यह प्रश्न देखें: http: //stackoverflow.com/questions/43599271/how-to-set-run-only-if-logged-in-and-run-as- साथ-taskscheduler-इन-सी/43767201 # 43767201 – MadTigger