Я делаю службу Windows в Visual Studio с помощью C#. Когда я запускаю программу из командной строки, она работает так, как ожидалось. Никакие исключения не могут быть выброшены или что-то в этом роде, и журнал событий будет записан как нормальный. Вот мой метод ввода.Служба Windows по-прежнему не работает при запуске в SCM
var service = new CSFolderWatcher();
if (Environment.UserInteractive)
{
service.CallStart(args);
Console.WriteLine("Press enter to stop program");
Console.Read();
service.CallStop();
}
else
{
ServiceBase.Run(new ServiceBase[] { new CSFolderWatcher() });
}
Однако, когда я иду в SCM, чтобы запустить службу, ящик сразу всплывает, что говорит: «Служба CS Folder Watcher на локальном компьютере запущена и затем остановлена. Некоторые службы автоматически останавливаются, если они не находятся в использование другими службами или программами ». Ничто не записывается в журнал событий вообще. Вот мой OnStart код:
internal void CallStart(string[] args) { OnStart(args); }
internal void CallStop() { OnStop(); }
protected override void OnStart(string[] args)
{
this.ServiceName = MyServiceName;
Properties.Settings.Default.Reload();
this.destfolder = Properties.Settings.Default.DestinationFolder;
this.watchfolder = Properties.Settings.Default.WatchFolder;
this.watchfilter = Properties.Settings.Default.WatchFilter;
LogEvent(this.ServiceName + " starting" + "\r\n" +
"Destination folder: " + this.destfolder + "\r\n" +
"Watch Folder: " + this.watchfolder + "\r\n" +
"Watch Filter: " + this.watchfilter + "\r\n" +
"OnStart args: " + string.Join(", ", args));
// Create a new FileSystemWatcher with the path
//and text file filter
try { watcher = new FileSystemWatcher(watchfolder, watchfilter); }
catch (Exception e) { LogEvent(e.ToString()); throw; }
watcher.IncludeSubdirectories = Properties.Settings.Default.WatchSubdirectories;
watcher.NotifyFilter = NotifyFilters.LastAccess
| NotifyFilters.LastWrite
| NotifyFilters.FileName
| NotifyFilters.DirectoryName;
// Add event handlers.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
watcher.EnableRaisingEvents = true;
}
Вот код LogEvent:
private void LogEvent(string message)
{
string eventSource = MyServiceName;
DateTime dt = new DateTime();
dt = System.DateTime.UtcNow;
message = dt.ToLocalTime() + ": " + message;
Console.WriteLine(message);
EventLog.WriteEntry(eventSource, message);
}
'Properties.Settings.Default.DestinationFolder', что путь к папке он ищет на цель/погонный машину за пределами вашей локальной ..? вы уверены, что пути даже существуют так же, как и в вашей локальной среде .. также каковы права, которые имеет Служба на целевой машине ..? может ли это быть проблемой прав/разрешений ..? если бы это не было проблемой «Путь» ..? также, если это служба 'FileSystemWatcher', почему вы вызываете stop ..? не должен ли это работать всегда и иметь ручное вмешательство, чтобы остановить его.? – MethodMan
CallStart и CallStop предназначены только для запуска с консоли, потому что я не мог напрямую обращаться к методам OnStart и OnStop. Так что да, это просто метод OnStop, который должен быть там. –
Что вы подразумеваете под этим, это может быть проблема PATH? –