Di solito ricevo questo errore: (Il servizio "nome servizio" sul computer locale è stato avviato e poi arrestato. Alcuni servizi si interrompono automaticamente se non sono utilizzati da altri servizi o programmi) quando c'è qualcosa che non va nel mio codice, come se non esistesse percorsi di unità, ecc. Il servizio Windows non verrà avviato.
Ho un servizio Windows che esegue il backup di cartelle / file, in una posizione se ha raggiunto il limite di dimensione. I dettagli sono tutti forniti da una configurazione XML che il servizio Windows legge all'avvio. Ho un Windows Form separato che ha un pulsante che fa esattamente ciò che sta facendo onstart il mio servizio Windows. Uso i miei Windows Form per eseguire il debug del codice prima di inserirlo nel mio servizio Windows.
Quando avvio i miei Windows Form. Fa quello che dovrebbe fare. Quando ho inserito il mio codice nel metodo OnStart () del servizio Windows, è stato visualizzato l'errore.
Ecco il mio codice:
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();
}
}
Non so cosa impedisce l'avvio del servizio Windows, il simulatore di Windows Form ha funzionato bene. Quello che sembra essere il problema?
AGGIORNAMENTO: Dopo molte prove ho notato che utilizzando solo una directory di cartelle (senza file), il servizio Windows non funziona. Quando ho sostituito la variabile fileWatch con un file specifico (inclusa la sua directory), il servizio Windows è stato avviato. Quando l'ho cambiato di nuovo in una posizione di cartella, non ha funzionato. Quello che penso è che le posizioni delle cartelle non funzionano in un filewatcher.
Quando ho provato a creare un nuovo servizio Windows che controlla la posizione di una cartella, ha funzionato .. Tuttavia, quando ho provato la stessa posizione nel mio servizio Windows originale, non ha funzionato! Ero impazzito $ # * ed! Sembra che devo creare un nuovo servizio Windows e compilare il programma di installazione ogni volta che inserisco un nuovo codice / funzione .. In questo modo posso tenere traccia di dove ricevo un errore.