通常,我收到此错误:(本地计算机上的“服务名称”服务启动然后停止。如果某些服务未被其他服务或程序使用,则某些服务会自动停止)当我的代码出现问题时,例如不存在驱动器路径等。Windows 服务将无法启动。
我有一个 Windows 服务,可以将文件夹/文件备份到某个位置(如果它达到大小限制)。详细信息均由 Windows 服务在启动时读取的 XML 配置提供。我有一个单独的 Windows 窗体,它有一个按钮,它完全符合我的 Windows 服务的 onstart 正在做的事情。在将代码放入我的 Windows 服务之前,我使用我的 Windows 窗体来调试代码。
当我启动我的 Windows 窗体时。它做它应该做的事情。当我将代码放入 Windows 服务 OnStart() 方法时,出现了错误。
这是我的代码:
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();
}
}
我不知道是什么让 Windows 服务无法启动,Windows 窗体模拟器工作正常。似乎是什么问题?
更新:经过多次试验,我注意到仅使用文件夹目录(无文件),Windows 服务不起作用。当我用特定文件(包括其目录)替换 fileWatch 变量时,Windows 服务启动。当我将其更改回文件夹位置时,它不起作用。我认为文件夹位置在文件观察器中不起作用。
当我尝试创建一个监视文件夹位置的新 Windows 服务时,它起作用了。但是,当我在原始 Windows 服务中尝试相同的位置时,它不起作用!我很介意$#*!似乎每次我放置一个新的代码/功能时,我都必须创建一个新的 Windows 服务并构建安装程序。这样我可以跟踪哪里出现错误。