Normalmente, aparece este error: (el servicio "nombre de servicio" en el equipo local se inició y luego se detuvo. Algunos servicios se detienen automáticamente si no están siendo utilizados por otro servicio o programas) cuando hay algún problema con mi código, como rutas de disco no existentes, etc. El servicio de Windows no se iniciará.Servicio de Windows en computadora local iniciado y luego detenido error
Tengo un servicio de Windows que realiza una copia de seguridad de las carpetas/archivos, en una ubicación si alcanzó el límite de tamaño. Los detalles son proporcionados por una Configuración XML que el servicio de Windows lee al inicio. Tengo un formulario de Windows separado que tiene un botón que hace exactamente lo que está haciendo el inicio de mi servicio de Windows. Uso 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 servicio de Windows, el método OnStart() 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é lo que mantiene el servicio de Windows no se inicia, el simulador de forma ventanas funcionaba 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 de FileWatch con un archivo específico (incluido su directorio), se inició el servicio de Windows. Cuando lo cambié a una ubicación de carpeta, no funcionó. Lo que creo es que las ubicaciones de las carpetas no funcionan en un vigilante de archivos.
Cuando traté de crear un nuevo servicio de Windows que mira la ubicación de una carpeta, funcionó .. Sin embargo, cuando probé la misma ubicación en mi servicio de Windows original, ¡no funcionó! ¡Tenía la mente $ # * ed! Parece que tengo que crear un nuevo servicio de Windows y construir el instalador cada vez que coloque un nuevo código/función. De esta forma puedo hacer un seguimiento de donde obtengo un error.
Muchas gracias! Lo intenté y este es el error: "El servicio no se puede iniciar. System.ArgumentException: La ruta no es de una forma legal. en System.IO.Path.NormalizePath (ruta de la cadena, Boolean fullCheck, Int32 maxPathLength) en el sistema .IO.Path.GetFullPathInternal (String path) en System.IO.Path.GetFullPath (camino String) en System.IO.FileSystemWatcher.StartRaisingEvents() en System.IO.FileSystemWatcher.set_EnableRaisingEvents (valor booleano) en LogBackupWinSvc.Service1.OnStart (String [] args) en System.ServiceProcess.ServiceBase. ServiceQueuedMainCallback (estado del objeto) " – Blackator
Windows Event Viewer mostró el rastro completo de la pila, herramienta muy útil. –