namespace ResRepricerImportFolderMonitor >{ > public partial class ResRepricerImportFolderMonitor : ServiceBase > { > public enum ServiceState > { > SERVICE_STOPPED = 0x00000001, > SERVICE_START_PENDING = 0x00000002, > SERVICE_STOP_PENDING = 0x00000003, > SERVICE_RUNNING = 0x00000004, > SERVICE_CONTINUE_PENDING = 0x00000005, > SERVICE_PAUSE_PENDING = 0x00000006, > SERVICE_PAUSED = 0x00000007, > } > > [StructLayout(LayoutKind.Sequential)] > public struct ServiceStatus > { > public long dwServiceType; > public ServiceState dwCurrentState; > public long dwControlsAccepted; > public long dwWin32ExitCode; > public long dwServiceSpecificExitCode; > public long dwCheckPoint; > public long dwWaitHint; > }; > > [DllImport("advapi32.dll", SetLastError = true)] > private static extern bool SetServiceStatus(IntPtr handle, ref ServiceStatus serviceStatus); > > private FileSystemWatcher watcher = null; > > public ResRepricerImportFolderMonitor() > { > InitializeComponent(); > } > > protected override void OnStart(string[] args) > { > // Update the service state to Start Pending. > ServiceStatus serviceStatus = new ServiceStatus(); > serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING; > serviceStatus.dwWaitHint = 100000; > SetServiceStatus(this.ServiceHandle, ref serviceStatus); > > // Create a new FileSystemWatcher with the path > //and text file filter > > string CSVFolder = ConfigurationManager.AppSettings["CSVFolder"]; > string CSVFolderProcessed = ConfigurationManager.AppSettings["CSVFolderProcessed"]; > > FileSystemWatcher watcher = new FileSystemWatcher(CSVFolder, "*.csv"); > > //Watch for changes in LastAccess and LastWrite times, and > //the renaming of files or directories. > 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); > > // Begin watching. > watcher.EnableRaisingEvents = true; > > // Update the service state to Running. > serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING; > SetServiceStatus(this.ServiceHandle, ref serviceStatus); > > LogEvent("started"); > } > > protected override void OnStop() > { > watcher.EnableRaisingEvents = false; // error occurs here > watcher.Dispose(); > > LogEvent("stopped"); > }Wrong scope. You have a variable type in front of the variable when you instantiate it. This causes it to create a local variable in the method instead of using the field in your class.