Normalmente, recebo este erro: (O serviço "nome do serviço" no Computador Local foi iniciado e depois interrompido. Alguns serviços param automaticamente se não estiverem em uso por outro serviço ou programa) quando há algo errado com meu código, como inexistente caminhos da unidade, etc. O serviço do Windows não será iniciado.
Eu tenho um serviço do Windows que faz backup de pastas / arquivos em um local se atingiu o limite de tamanho. Os detalhes são fornecidos por uma configuração XML que o serviço do Windows lê na inicialização. Eu tenho um windows forms separado que tem um botão que faz exatamente o que o onstart do meu serviço do Windows está fazendo. Eu uso meus formulários do Windows para depurar o código antes de colocá-lo no serviço do Windows.
Quando eu inicio o meu windows forms. Ele faz o que deveria fazer. Quando coloquei meu código no método OnStart () do serviço do Windows, o erro apareceu.
Este é o meu 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();
}
}
Não sei o que impede o serviço do Windows de iniciar, o simulador do Windows Form funcionou bem. Oque parece ser o problema?
ATUALIZAÇÃO: Depois de muitas tentativas, notei que usando apenas um diretório de pasta (sem arquivo), o serviço do Windows não funciona. Quando substituí a variável fileWatch por um arquivo específico (incluindo seu diretório), o serviço do Windows foi iniciado. Quando mudei de volta para um local de pasta, não funcionou. O que eu acho é que os locais das pastas não funcionam em um arquivador.
Quando tentei criar um novo serviço do Windows que vigia o local de uma pasta, funcionou. No entanto, quando tentei o mesmo local no meu serviço do Windows original, não funcionou! Eu estava pensando! Parece que tenho que criar um novo serviço do Windows e construir o instalador toda vez que coloco um novo código / função. Desta forma, posso acompanhar onde recebo um erro.