आमतौर पर, मुझे यह त्रुटि मिलती है: (स्थानीय कंप्यूटर पर "सेवा का नाम" सेवा शुरू हुई और फिर बंद हो गई। कुछ सेवाएं अपने आप बंद हो जाती हैं यदि वे अन्य सेवा या कार्यक्रमों के उपयोग में नहीं होती हैं) जब मेरे कोड में कुछ गड़बड़ है, जैसे गैर-मौजूद ड्राइव पथ, आदि। विंडोज़ सेवा शुरू नहीं होगी।
मेरे पास एक विंडोज़ सेवा है जो फ़ोल्डर / फ़ाइलों का बैक अप लेती है, यदि यह आकार सीमा तक पहुंच गया है तो किसी स्थान पर। विवरण सभी एक्सएमएल कॉन्फ़िगरेशन द्वारा प्रदान किए जाते हैं जो विंडोज़ सेवा शुरू में पढ़ते हैं। मेरे पास एक अलग विंडोज़ फॉर्म है जिसमें एक बटन है जो ठीक उसी तरह से करता है जो मेरी विंडोज़ सेवा का ऑनस्टार्ट कर रहा है। अपनी विंडो सेवा में रखने से पहले मैं कोड डीबग करने के लिए अपने विंडोज़ रूपों का उपयोग करता हूं।
जब मैं अपने विंडोज़ फॉर्म शुरू करता हूँ। यह वही करता है जो इसे करने के लिए लगता है। जब मैंने अपना कोड विंडोज़ सर्विस ऑनस्टार्ट () विधि में डाला तो त्रुटि दिखाई दी।
यहाँ मेरा कोड है:
protected override void OnStart(string[] args)
{
private static string backupConfig = @"D:\LogBackupConfig\backupconfig.xml";
private static string serviceStat = @"D:\LogBackupConfig\Status.txt";
private static string fileFolderStat = @"D:\LogBackupConfig\FileFolderStat.txt";
protected override void OnStart(string[] args)
{
if (File.Exists(backupConfig))
{
FileSystemWatcher watcher = new FileSystemWatcher();
XmlTextReader reader = new XmlTextReader(backupConfig);
XmlNodeType type;
List<string> listFile = new List<string>();
string fileWatch = "";
//this loop is for reading XML elements and assigning to variables
while (reader.Read())
{
type = reader.NodeType;
if (type == XmlNodeType.Element)
{
if (reader.Name == "File")
{
reader.Read();
fileWatch = reader.Value;
}
else if (reader.Name == "Folder")
{
reader.Read();
fileWatch = reader.Value;
}
}
}
reader.Close();
watcher.Path = fileWatch;
watcher.Filter = "*.*";
//this loop reads whether the service will watch a file/folder
XmlTextReader reader1 = new XmlTextReader(backupConfig);
while (reader1.Read())
{
type = reader1.NodeType;
if (type == XmlNodeType.Element)
{
if (reader1.Name == "File")
{
watcher.IncludeSubdirectories = false;
watcher.Changed += new FileSystemEventHandler(OnChangedFile);
}
else if (reader1.Name == "Folder")
{
watcher.IncludeSubdirectories = true;
watcher.Changed += new FileSystemEventHandler(OnChangedFolder);
}
}
}
reader1.Close();
watcher.EnableRaisingEvents = true;
}
else
{
StreamWriter sw = new StreamWriter(serviceStat, true);
sw.WriteLine("File not found. Please start the Log Backup UI first.");
sw.Close();
}
}
मुझे नहीं पता कि विंडोज़ सेवा क्या शुरू नहीं करती है, विंडोज़ फॉर्म सिम्युलेटर ने ठीक काम किया है। आखिर समस्या क्या लग रही है?
अद्यतन: कई परीक्षणों के बाद मैंने देखा है कि केवल एक फ़ोल्डर निर्देशिका (w / आउट फ़ाइल) का उपयोग करके, विंडोज़ सेवा काम नहीं करती है। जब मैंने एक विशिष्ट फ़ाइल (इसकी निर्देशिका सहित) के साथ फाइलवैक चर को प्रतिस्थापित किया, तो विंडोज़ सेवा शुरू हुई। जब मैंने इसे वापस फ़ोल्डर स्थान में बदल दिया, तो यह काम नहीं किया। मुझे लगता है कि फ़ोल्डर स्थानों एक filewatcher में काम नहीं करता है।
जब मैंने एक नई विंडोज़ सेवा बनाने की कोशिश की, जो एक फ़ोल्डर स्थान को देखता है, तो यह काम करता है .. हालांकि, जब मैंने अपनी मूल विंडोज़ सेवा में समान स्थान की कोशिश की, तो यह काम नहीं किया! मैं माइंडफ $ # * एड था! ऐसा लगता है कि मुझे एक नई विंडोज़ सेवा बनानी है और हर बार इंस्टॉलर का निर्माण करना है, मैं एक नया कोड / फ़ंक्शन देता हूं। इस तरह मैं ट्रैक कर सकता हूं जहां मुझे कोई त्रुटि मिलती है।