通常,我会遇到这个错误:(“服务名称”服务在本地计算机上启动然后停止。如果某些服务未被其他服务或程序使用,则某些服务将自动停止),当我的代码出现问题时,例如不存在的驱动路径等。Windows服务将无法启动。
我有一个Windows服务,用于备份文件/文件夹到一定大小时的位置。所有详细信息都由XML配置提供,Windows服务在启动时读取。我有一个单独的Windows表单,其中有一个按钮可以执行与我的Windows服务OnStart相同的操作,我使用我的Windows表单来调试代码,然后再将其放入我的Windows服务中。
当我启动我的Windows表单时,它会执行其应该执行的操作。但是,当我将我的代码放入Windows服务的OnStart()方法中时,就会出现错误。
以下是我的代码:
更新: 经过多次尝试,我注意到,如果只使用文件夹路径(没有文件),则Windows服务将无法正常工作。当我用特定的文件(包括其路径)替换fileWatch变量时,Windows服务就能够启动。当我把它改回文件夹位置时,它就无法正常工作。我的想法是,文件夹位置在文件监视器中无法正常工作。
当我尝试创建一个新的Windows服务来监视文件夹位置时,它可以正常工作。但是,当我在我的原始Windows服务中尝试相同的位置时,它就不能工作!这让我很困惑!看来我必须每次放置新的代码/函数时都要创建一个新的Windows服务并构建安装程序。这样我就可以追踪到错误发生的地方。
我有一个Windows服务,用于备份文件/文件夹到一定大小时的位置。所有详细信息都由XML配置提供,Windows服务在启动时读取。我有一个单独的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服务并构建安装程序。这样我就可以追踪到错误发生的地方。
jenkins.xml
文件的executable
标签中配置新路径。我发现这个答案真的很有帮助!+1。 - Jay