Biasanya, saya mendapatkan kesalahan ini: (Layanan "nama layanan" di Komputer Lokal dimulai dan kemudian dihentikan. Beberapa layanan berhenti secara otomatis jika tidak digunakan oleh layanan atau program lain) ketika ada yang salah dengan kode saya, seperti tidak ada jalur drive, dll. Layanan windows tidak akan dimulai.
Saya memiliki layanan windows yang mencadangkan folder / file, ke lokasi jika mencapai batas ukuran. Detail semuanya disediakan oleh Konfigurasi XML yang dibaca oleh layanan windows saat dimulai. Saya memiliki formulir windows terpisah yang memiliki tombol yang melakukan persis apa yang dilakukan layanan windows saya. Saya menggunakan formulir windows saya untuk men-debug kode sebelum saya memasukkannya ke dalam layanan windows saya.
Ketika saya memulai bentuk jendela saya. Itu melakukan apa yang seharusnya dilakukan. Ketika saya meletakkan kode saya di layanan windows metode OnStart () kesalahan muncul.
Ini kode saya:
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();
}
}
Saya tidak tahu apa yang membuat layanan windows tidak dimulai, simulator bentuk windows berfungsi dengan baik. Apa masalahnya?
UPDATE: Setelah banyak percobaan saya perhatikan bahwa hanya menggunakan direktori folder (tanpa file), layanan windows tidak berfungsi. Ketika saya mengganti variabel fileWatch dengan file tertentu (termasuk direktorinya), layanan windows dimulai. Ketika saya mengubahnya kembali ke lokasi folder, itu tidak berhasil. Menurut saya, lokasi folder tidak berfungsi di filewatcher.
Ketika saya mencoba membuat layanan windows baru yang melihat lokasi folder, itu berhasil .. Namun, ketika saya mencoba lokasi yang sama di layanan windows asli saya, itu tidak berhasil! Saya mindf $ # * ed! Sepertinya saya harus membuat layanan windows baru dan membangun penginstal setiap kali saya menempatkan kode / fungsi baru .. Dengan cara ini saya dapat melacak di mana saya mendapatkan kesalahan.