Por lo general, obtengo este error: (El servicio "nombre del servicio" en la computadora local se inició y luego se detuvo. Algunos servicios se detienen automáticamente si no están siendo utilizados por otros servicios o programas) cuando hay algún problema con mi código, como no existente rutas de acceso, etc. El servicio de Windows no se iniciará.
Tengo un servicio de Windows que hace copias de seguridad de carpetas / archivos, en una ubicación si alcanzó el límite de tamaño. Todos los detalles son proporcionados por una configuración XML que el servicio de Windows lee al inicio. Tengo formularios de Windows separados que tienen un botón que hace exactamente lo que hace el inicio de mi servicio de Windows. Utilizo mis formularios de Windows para depurar el código antes de ponerlo en mi servicio de Windows.
Cuando comienzo mis formularios de Windows. Hace lo que se supone que debe hacer. Cuando puse mi código en el método OnStart () del servicio de Windows, apareció el error.
Aquí está mi código:
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();
}
}
No sé qué hace que el servicio de Windows no se inicie, el simulador de formularios de Windows funcionó bien. ¿Cuál parece ser el problema?
ACTUALIZACIÓN: Después de muchas pruebas, he notado que al usar solo un directorio de carpetas (sin archivo), el servicio de Windows no funciona. Cuando reemplacé la variable fileWatch con un archivo específico (incluido su directorio), se inició el servicio de Windows. Cuando lo cambié de nuevo a una ubicación de carpeta, no funcionó. Lo que creo es que las ubicaciones de las carpetas no funcionan en un observador de archivos.
Cuando intenté crear un nuevo servicio de Windows que observe la ubicación de una carpeta, funcionó. Sin embargo, cuando probé la misma ubicación en mi servicio de Windows original, ¡no funcionó! ¡Estaba loco! Parece que tengo que crear un nuevo servicio de Windows y compilar el instalador cada vez que coloco un nuevo código / función. De esta manera puedo hacer un seguimiento de dónde obtengo un error.