हमारे पास एक प्रोग्राम है जो स्थानीय बैकअप करने के लिए साप्ताहिक निर्धारित कार्य सम्मिलित करता है।

घटना कक्षा WeeklyTrigger का उपयोग करके उत्पन्न होती है और विंडोज़ कार्य अनुसूचक में डाली जाती है। पंजीकरण का थोक कोड है:

var wt = new WeeklyTrigger
{
    DaysOfWeek = weekday,
    StartBoundary = startDate,
    Enabled = true
};
using (TaskService ts = new TaskService())
{
    TaskDefinition td = ts.NewTask();
    td.RegistrationInfo.Description = "Backup";
    td.Triggers.Add(wt);
    td.Actions.Add(Application.ExecutablePath, arg);
    td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
    ts.RootFolder.RegisterTaskDefinition(name, td);
}

यह सही ढंग से काम करता है लेकिन निर्धारित कार्य को विकल्प Syncronize across time zones सक्षम के साथ सम्मिलित करता है जो निर्धारित समय को यूटीसी के रूप में सेट करता है। इस कॉन्फ़िगरेशन के साथ जब डेलाइट सेविंग टाइम शुरू होता है (या समाप्त होता है) कार्य चलने का समय अपडेट नहीं होता है और इसके परिणामस्वरूप अपेक्षित चलने वाले समय से 1 घंटे ऑफसेट होता है।

Syncronize across time zones विकल्प को अक्षम करने से निर्धारित कार्य स्थानीय समय का उपयोग करके चलने देता है।

enter image description here

अधिक स्पष्ट होने के लिए संपादित करें यदि हम दिन के उजाले की बचत समय के साथ सोमवार को 10:00 CET पर कार्य शेड्यूल करते हैं और फिर जब डेलाइट सेविंग टाइम हटा दिया जाता है तो सेट समय UTC में रहता है और कार्य सोमवार को 09:00 CET पर शुरू होता है। हम इससे बचना चाहते हैं क्योंकि उपयोगकर्ता अपने कार्य सप्ताह के अंत में अपने बैकअप की योजना बनाते हैं और एक घंटे पहले या बाद में डेटा अखंडता में भारी अंतर ला सकते हैं।

क्या प्रोग्राम के रूप में Syncronize across time zones विकल्पों के बिना शेड्यूल किए गए कार्य को बनाना संभव है? क्या कोई विशिष्ट दस्तावेज है जिसे हम जांच सकते हैं?

1
Zucch 30 अक्टूबर 2020, 20:00

1 उत्तर

सबसे बढ़िया उत्तर

समाधान एक्सएमएल टेक्स्ट को सीधे संशोधित करना है जो कार्य को परिभाषित करता है। इसे TaskDefinition.XmlText प्रॉपर्टी का उपयोग करके प्राप्त/सेट किया जा सकता है।

आपको यहां संशोधित करने की आवश्यकता के बारे में अधिक जानकारी प्राप्त करें।

1
230Daniel 30 अक्टूबर 2020, 20:15