Ciao a tutti 
 
Mi sto cimentando (solo a fini didattici) a scrivere un piccolo servizio per windows passo dopo passo senza cioè utilizzare il wizard di visual studio.
Studiando vari esempi sono giunto a:
	Codice:
	//scopo del programma di copiare dei file da una directory in un'altra
using System;
using System.ServiceProcess;
using System.Threading;
namespace TestCronService
{
    public class BatchCopy : ServiceBase
    {
        private BatchCopyAction bc;
        private Timer stateTimer;
        private TimerCallback timerDelegate;
        public BatchCopy()
        {
            this.ServiceName = "TestBatchCopy";
            this.CanStop = true;
            this.CanPauseAndContinue = false;
            this.AutoLog = true;
        }
        protected override void OnStart(string[] args)
        {
            
            bc = new BatchCopyAction();
            timerDelegate = new TimerCallback(bc.DoCopy);
            stateTimer = new Timer(timerDelegate, null, 1000, 1000);
        }
        protected override void OnStop()
        {
            
            stateTimer.Dispose();
        }
        public static void Main()
        {
            Run(new BatchCopy());
        }
    }
}
//File BatchCopyAction.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace TestCronService
{
    public class BatchCopyAction
    {
        private string source = @"c:\test";
        
        private string destination = @"c:\test\Bck";
        
        public void DoCopy(object stateObject)
        {
            try
            {
                if (Directory.Exists(source))
                {
                    string[] fileInSource = Directory.GetFiles(source);
                    foreach (string fileName in fileInSource)
                    {
                        string sourceFile = Path.GetFileName(fileName);
                        string destFile = Path.Combine(destination, DateTime.Now.ToShortDateString().Replace("/", "-") + DateTime.Now.ToShortTimeString().Replace(".", "-") + sourceFile);
                        File.Copy(sourceFile, destFile, true);
                    }
                }
            }
            catch (IOException ex)
            {
                Console.Write(ex.Message);
            }
        }
               
    }
}
//File BatchCopyInstaller.cs
using System;
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
namespace TestCronService
{
    [RunInstaller(true)]
    public class BatchCopyInstaller : Installer
    {
        private ServiceProcessInstaller processInstaller;
        private ServiceInstaller serviceInstaller;
        public BatchCopyInstaller()
        {
            processInstaller = new ServiceProcessInstaller();
            serviceInstaller = new ServiceInstaller();
            processInstaller.Account = ServiceAccount.LocalSystem;
            serviceInstaller.StartType = ServiceStartMode.Manual;
            serviceInstaller.ServiceName = "TestBatchCopy";
            Installers.Add(serviceInstaller);
            Installers.Add(processInstaller);
        }
    }
}
 
Compila senza errori e senza warning.
Il problema che ho è quando cerco di installare il servizio e di avviarlo:
questo è il log dopo:
	Codice:
	InstallUtil /LogToConsole=true TestBatchCopy.exe
 
	Codice:
	//log dell'installer
Esecuzione di un'installazione transazionale.
Inizio della fase di installazione.
Vedere il contenuto del file di log per informazioni sullo stato dell'assembly c:\TestCronService.exe.
Il file si trova in c:\TestCronService.InstallLog.
Si è verificata un'eccezione durante la fase di installazione.
System.Security.SecurityException: Origine non trovata, ma non è stato possibile eseguire la ricerca in uno o più log eventi. Log non accessibili: Security.
Sta iniziando la fase di ripristino dello stato precedente dell'installazione.
Vedere il contenuto del file di log per informazioni sullo stato dell'assembly c:\testCronService.exe.
Il file si trova in c:\testCronService.InstallLog.
Fase di ripristino dello stato precedente completata.
Installazione transazionale completata.
 
e questo invece il log del servizio:
	Codice:
	Installazione dell'assembly 'c:\TestCronService.exe' in corso...
I parametri interessati sono:
   logtoconsole = true
   assemblypath = c:\TestCronService.exe
   logfile = c:\TestCronService.InstallLog
Installazione del servizio TestBatchCopy in corso...
È in corso la creazione dell'origine di EventLog TestBatchCopy nel log Application...
Ripristino dello stato precedente dell'assembly 'c:\TestCronService.exe' in corso...
I parametri interessati sono:
   logtoconsole = true
   assemblypath = c:\TestCronService.exe
   logfile = c:\TestCronService.InstallLog
Ripristino del log eventi allo stato precedente per l'origine TestBatchCopy.
Si è verificata un'eccezione durante la fase di ripristino dello stato precedente del programma di installazione di System.Diagnostics.EventLogInstaller.
System.Security.SecurityException: Origine non trovata, ma non è stato possibile eseguire la ricerca in uno o più log eventi. Log non accessibili: Security.
Si è verificata un'eccezione durante la fase di ripristino dello stato precedente. L'eccezione verrà ignorata e il ripristino dello stato precedente continuerà, tuttavia è possibile che non venga completamente ripristinato lo stato precedente l'installazione al termine dell'operazione.
 
 
 
grazie mille.
RaouL.