Thema: Delphi Service und TTimer

Einzelnen Beitrag anzeigen

Digielm

Registriert seit: 2. Aug 2006
246 Beiträge
 
Delphi 5 Enterprise
 
#26

Re: Service und TTimer

  Alt 6. Jan 2009, 10:39
Hier der Project Source

Delphi-Quellcode:
program Testservice;

{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v2.0.50727\System.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v2.0.50727\System.Data.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v2.0.50727\System.Drawing.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v2.0.50727\System.XML.dll'}
{%DelphiDotNetAssemblyCompiler 'c:\programme\gemeinsame dateien\borland shared\bds\shared assemblies\4.0\Borland.Vcl.dll'}
{%DelphiDotNetAssemblyCompiler 'c:\programme\gemeinsame dateien\borland shared\bds\shared assemblies\4.0\Borland.Delphi.dll'}
{%DelphiDotNetAssemblyCompiler 'c:\programme\gemeinsame dateien\borland shared\bds\shared assemblies\4.0\Borland.VclRtl.dll'}
{%DelphiDotNetAssemblyCompiler '..\Borland.Data.Mssql.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v2.0.50727\System.Configuration.Install.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v2.0.50727\System.ServiceProcess.dll'}

uses
  windows,
  forms,
  System.Reflection,
  system.serviceprocess,
  System.Runtime.CompilerServices,
  Main in 'Main.pas',
  ccLog in '..\ccLog.pas',
  Service in 'Service.pas{Service.TService1: system.serviceprocess.servicebase};

{$R *.res}

{$REGION 'Programm/Assemblierungs-Informationen'}
//
// Die allgemeinen Assemblierungsinformationen werden durch die folgenden
// Attribute gesteuert. Ändern Sie die Attributwerte, um die zu einer
// Assemblierung gehörenden Informationen zu modifizieren.
//

[assembly: AssemblyDescription('')]
[assembly: AssemblyConfiguration('')]
[assembly: AssemblyCompany('')]
[assembly: AssemblyProduct('')]
[assembly: AssemblyCopyright('')]
[assembly: AssemblyTrademark('')]
[assembly: AssemblyCulture('')]

// Der Delphi-Compiler steuert AssemblyTitleAttribute via ExeDescription.
// Sie können dies in der IDE über Projekt/Optionen festlegen.
// Wenn Sie das Attribut AssemblyTitle wie unten gezeigt manuell festlegen,
// wird die IDE-Einstellung überschrieben.
// [assembly: AssemblyTitle('')]


//
// Die Versionsinformation einer Assemblierung enthält die folgenden vier Werte:
//
// Hauptversion
// Nebenversion
// Build-Nummer
// Revision
//
// Sie können alle vier Werte festlegen oder für Revision und Build-Nummer die
// Standardwerte mit '*' - wie nachfolgend gezeigt - verwenden:

[assembly: AssemblyVersion('1.0.*')]

//
// Zum Signieren einer Assemblierung müssen Sie einen Schlüssel angeben. Weitere Informationen
// über das Signieren von Assemblierungen finden Sie in der Microsoft .NET Framework-Dokumentation.
//
// Mit den folgenden Attributen steuern Sie, welcher Schlüssel für die Signatur verwendet wird.
//
// Hinweise:
// (*) Wenn kein Schlüssel angegeben wird, ist die Assemblierung nicht signiert.
// (*) KeyName verweist auf einen Schlüssel, der im Crypto Service Provider
// (CSP) auf Ihrem Rechner installiert wurde. KeyFile verweist auf eine
// Datei, die einen Schlüssel enthält.
// (*) Wenn sowohl der KeyFile- als auch der KeyName-Wert angegeben ist, wird
// die folgende Verarbeitung durchgeführt:
// (1) Wenn KeyName in dem CSP gefunden wird, wird dieser Schlüssel verwendet.
// (2) Wenn KeyName nicht, aber KeyFile vorhanden ist, wird der Schlüssel
// in KeyFile im CSP installiert und verwendet.
// (*) Ein KeyFile können Sie mit dem Utility sn.exe (Starker Name) erzeugen.
// Der Speicherort von KeyFile sollte relativ zum Projektausgabeverzeichnis
// %Projektverzeichnis%\bin\<Konfiguration> angegeben werden. Wenn sich Ihr
// KeyFile z.B. im Projektverzeichnis befindet, würden Sie das Attribut
// würden Sie das Attribut AssemblyKeyFile folgendermaßen festlegen:
// [assembly: AssemblyKeyFile('..\\..\\mykey.snk')]
// (*) Verzögerte Signatur ist eine erweiterte Option; nähere Informationen
// dazu finden Sie in der Microsoft .NET Framework-Dokumentation.
//
[assembly: AssemblyDelaySign(true)]
[assembly: AssemblyKeyFile('')]
[assembly: AssemblyKeyName('')]


//
// Verwenden Sie untenstehende Attribute, um die COM-Sichtbarkeit Ihrer Assembilierung zu steuern.
// Als Vorgabe ist die ganze Assemblierung für COM sichtbar. Das Setzen von ComVisible auf false
// ist die empfohlene Vorgabe für Ihre Assemblierung. Um eine Klasse und Interface für COM sichtbar
// zu machen, setzen Sie ComVisible für jeden Einzelnen auf true. Es wird auch empfohlen ein
// Guid-Attribut hinzuzufügen.
//

[assembly: ComVisible(False)]
//[assembly: Guid('')]
//[assembly: TypeLibVersion(1, 0)]
{$ENDREGION}

[STAThread]
begin
  Application.Initialize;
  System.ServiceProcess.ServiceBase.Run(Service.TService1.Create);
end.
service Source


Delphi-Quellcode:

unit Service;

interface

uses
  System.Drawing, System.Collections, System.ComponentModel,
  System.Windows.Forms, System.Data, system.serviceprocess, System.Configuration.Install;

type
// [RunInstaller(true)]
  TService1 = class(System.ServiceProcess.ServiceBase)
  {$REGION 'Vom Designer verwalteter Code'}
  strict private
    /// <summary>
    /// Erforderliche Designervariable.
    /// </summary>
    Components: System.ComponentModel.Container;
    /// <summary>
    /// Erforderliche Methode zur Unterstützung des Designers -
    /// ändern Sie die Methode nicht mit dem Quelltext-Editor
    /// </summary>
    procedure InitializeComponent;
  {$ENDREGION}
  strict protected
    /// <summary>
    /// Ressourcen nach der Verwendung bereinigen
    /// </summary>
    procedure Dispose(Disposing: Boolean); override;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  strict protected
    procedure OnStop; override;
    procedure OnStart(args: array of string); override;
  public
    constructor Create;
  end;
//
var
  Service1: TService1;

// [assembly: RuntimeRequiredAttribute(TypeOf(ServiceBase))]

implementation

uses Main, toolsdotnet;

//{$R *.nfm}
{$AUTOBOX ON} 

{$REGION 'Vom Windows Form-Designer erzeugter Code'}
/// <summary>
/// Erforderliche Methode zur Unterstützung des Designers --
/// ändern Sie die Methode nicht mit dem Quelltext-Editor
/// </summary>
procedure TService1.InitializeComponent;
begin
  Self.Components := System.ComponentModel.Container.Create;
  Self.ServiceName := 'Testdienst';
end;
{$ENDREGION}

procedure TService1.Dispose(Disposing: Boolean);
begin
  if Disposing then
  begin
    if Components <> nil then
      Components.Dispose();
  end;
  inherited Dispose(Disposing);
end;

constructor TService1.Create;
begin
  inherited Create;
  //
  // Erforderlich für die Unterstützung des Windows Forms-Designers
  //
  InitializeComponent;
  //
  // TODO: Fügen Sie nach dem Aufruf von InitializeComponent Konstruktorcode hinzu.
  //
end;

procedure TService1.onstop;
begin
//
end;

procedure TService1.OnStart(args: array of string);
begin
  Mainform := TMainform.Create(self);
end;

end.
Mainform
Delphi-Quellcode:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel, Borland.Vcl.ComCtrls, System.Collections,
  Borland.Vcl.ExtCtrls, Microsoft.Win32, System.IO, System.Data.OleDb,
  System.Collections.Specialized, System.Text.RegularExpressions, System.Threading, System.Diagnostics,
  System.Data.SqlClient, System.Data, comobj;

type
  TMainform = class(TForm)
    ProgressBar1: TProgressBar;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    adresstimer: TTimer;
  protected
    procedure WndProc(var msg : TMessage); override;
  end;

var
  Mainform: TMainform;

implementation

procedure TMainform.FormCreate(Sender: TObject);
begin
  adresstimer := TTimer.Create(application.MainForm);
  adresstimer.OnTimer := Button1Click;
  adresstimer.Interval := 60000;
  adresstimer.Enabled := true;
end;

procedure TMainform.Button1Click(Sender: TObject);
begin
  addlogtext('Starte abgleich');
end;
end.
  Mit Zitat antworten Zitat