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.
sumber
Tidak yakin ini akan membantu, tetapi untuk men-debug layanan, Anda selalu dapat menggunakan yang berikut ini dalam metode OnStart:
daripada Anda bisa melampirkan studio visual Anda ke proses dan memiliki kemampuan debug yang lebih baik.
semoga bermanfaat, semoga berhasil
sumber
Saya merasa sangat berguna untuk mengubah layanan windows yang ada ke konsol hanya dengan mengubah program Anda dengan yang berikut ini. Dengan perubahan ini Anda dapat menjalankan program dengan debugging di visual studio atau menjalankan executable secara normal. Tetapi itu juga akan berfungsi sebagai layanan windows. Saya juga membuat posting blog tentang itu
program.cs
PROGRAM_Anda
sumber
Harap periksa apakah Anda telah mendaftarkan semua titik akhir HTTP di Access Control List (ACL) mahcine lokal
http://just2thepoint.blogspot.fr/2013/10/windows-service-on-local-computer.html
sumber
EventLog.Log harus disetel sebagai "Aplikasi"
sumber
Sementara itu, alasan lain: file .config terhapus secara tidak sengaja menyebabkan munculnya pesan error yang sama:
sumber
Gunakan Timer dan centang acara untuk menyalin file Anda.
Saat memulai layanan, mulai waktu dan tentukan interval waktu.
Jadi layanan tetap berjalan dan salin file ontick.
Semoga membantu.
sumber
Anda mungkin ingin menguji unit inisialisasi - tetapi karena inisialisasi itu ada di
OnStart
metode ini hampir tidak mungkin. Saya akan menyarankan memindahkan kode inisialisasi ke kelas terpisah sehingga dapat diuji atau setidaknya digunakan kembali dalam penguji formulir.Kedua, menambahkan beberapa logging (menggunakan Log4Net atau serupa) dan menambahkan beberapa logging panjang sehingga Anda dapat melihat detail tentang error runtime. Contoh error runtime
AccessViolation
dsb. Terutama jika layanan Anda berjalan tanpa cukup hak untuk mengakses file konfigurasi.sumber
Akun yang menjalankan layanan mungkin tidak memetakan D: -drive (khusus pengguna). Coba bagikan direktori, dan gunakan jalur UNC lengkap di
backupConfig
.Anda
watcher
tipeFileSystemWatcher
adalah variabel lokal, dan keluar dari ruang lingkup ketikaOnStart
metode dilakukan. Anda mungkin membutuhkannya sebagai instance atau variabel kelas.sumber
Saya menemukan masalah yang sama. Layanan saya mengupload / menerima XMLS dan menulis kesalahan ke Event Log.
Saat saya membuka Log Peristiwa, saya mencoba memfilternya. Ini mengingatkan saya bahwa Log Peristiwa rusak.
Saya membersihkan Log Peristiwa dan semua OK.
sumber
Dalam kasus kami, tidak ada yang ditambahkan di Windows Event Logs kecuali log bahwa layanan bermasalah telah dimulai dan kemudian dihentikan.
Ternyata file CONFIG layanan tidak valid. Memperbaiki file CONFIG yang tidak valid memperbaiki masalah.
sumber