RaouL_BennetH
28-10-2008, 13:13
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:
//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:
InstallUtil /LogToConsole=true TestBatchCopy.exe
//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:
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.
:help:
grazie mille.
RaouL.
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:
//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:
InstallUtil /LogToConsole=true TestBatchCopy.exe
//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:
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.
:help:
grazie mille.
RaouL.