Einzelnen Beitrag anzeigen

Digielm

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

service unter .net von C# umgeschrieben klappt nicht

  Alt 16. Dez 2008, 14:57
Hallo Leute

habe mal einen .Net Service versucht von C# zu konvertieren.

Klappt aber leider nicht.

Ich bekomme immer die Meldung wenn ich mit Installutil den Dienst installieren will eine Meldung das kein Installer vorhanden ist.

Source für den Service
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
  strict protected
    procedure OnStop; override;
    procedure OnStart(args: array of string); override;
    { Private-Deklarationen }
  public
    constructor Create;
  end;

  [assembly: RuntimeRequiredAttribute(TypeOf(ServiceBase))]

implementation

uses Main;

{$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 := 'SAP-ERPConnect';

// Self.Size := System.Drawing.Size.Create(300, 300);
// Self.Text := 'WinForm';
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
  MessageBox.show('gestartet');

end;

end.
Source für den Installer
Delphi-Quellcode:
unit Serviceinstaller;

interface

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

type
  [RunInstaller(true)]
  TInstaller = class(System.configuration.Install.installer)
  {$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>
    serviceProcessInstaller1 : System.ServiceProcess.ServiceProcessInstaller;
    serviceInstaller1 : System.ServiceProcess.ServiceInstaller;
    procedure Dispose(Disposing: Boolean); override;
  private
  public
    { Private-Deklarationen }
// procedure Install(stateSaver: IDictionary); override;
  public
    constructor Create;
  end;

  [assembly: RuntimeRequiredAttribute(TypeOf(System.configuration.Install.installer))]

implementation

{$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 TInstaller.InitializeComponent;
begin
  Self.Components := System.ComponentModel.Container.Create;
  //
  // serviceProcessInstaller1
  //
  self.serviceProcessInstaller1.Account := System.ServiceProcess.ServiceAccount.LocalSystem;
  self.serviceProcessInstaller1.Password := nil;
  self.serviceProcessInstaller1.Username := nil;
  //
  // serviceInstaller1
  //
  self.serviceInstaller1.ServiceName := 'SAP-ERPConnect';
  self.serviceInstaller1.StartType := System.ServiceProcess.ServiceStartMode.Automatic;
  //
  // ProjectInstaller
  //
  self.Installers.AddRange([self.serviceProcessInstaller1]);

end;
{$ENDREGION}

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

constructor TInstaller.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 Install(stateSaver: IDictionary);
begin
  MessageBox.Show('Install');
end;

end.
und hier noch die DPR
Delphi-Quellcode:
program GWERPCONNECT;

{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Data.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Drawing.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Windows.Forms.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.XML.dll'}
{$R 'Main.resources' 'Main.resx'}
{%DelphiDotNetAssemblyCompiler 'c:\programme\gemeinsame dateien\borland shared\bds\shared assemblies\4.0\Borland.Data.Mssql.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 '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Configuration.Install.dll'}
{%DelphiDotNetAssemblyCompiler '$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.ServiceProcess.dll'}

uses
  System.Reflection,
  System.Runtime.CompilerServices,
  System.Runtime.InteropServices,
  system.Collections,
  system.ComponentModel,
  system.serviceprocess,
  System.Configuration.Install,
  Service in 'Service.pas{Service.TService1: system.serviceprocess.servicebase},
  Serviceinstaller in 'Serviceinstaller.pas{Serviceinstaller.TInstaller: System.Windows.Forms.Form};

{$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
// angegeben werden. Wenn sich Ihr KeyFile im Projektverzeichnis befindet,
// würden Sie das Attribut AssemblyKeyFile folgendermaßen festlegen:
// [assembly: AssemblyKeyFile('mykey.snk')], vorausgesetzt, Ihr
// Ausgabeverzeichnis ist das Projektverzeichnis (Vorgabe).
// (*) Verzögerte Signatur ist eine erweiterte Option; nähere Informationen
// dazu finden Sie in der Microsoft .NET Framework-Dokumentation.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile('')]
[assembly: AssemblyKeyName('')]


//
// Verwenden Sie die folgenden Attribute zur Steuerung der COM-Sichtbarkeit Ihrer Assemblierung.
// Standardmäßig ist die gesamte Assemblierung für COM sichtbar. Die Einstellung false für ComVisible
// ist die für Ihre Assemblierung empfohlene Vorgabe. Um dann eine Klasse und ein Interface für COM
// bereitzustellen, setzen Sie jeweils ComVisible auf true. Es wird auch empfohlen das Attribut
// Guid hinzuzufügen.
//
[assembly: ComVisible(False)]
//[assembly: Guid('')]
//[assembly: TypeLibVersion(1, 0)]
{$ENDREGION}

[STAThread]
begin
// Application.Run(Main.TERPConnect.Create);
  System.ServiceProcess.ServiceBase.Run(Service.TService1.Create);
end.
Was mache ich denn falsch ???

Hier noch der Auszug vom installutil
Delphi-Quellcode:
Microsoft (R) .NET Framework Installationsprogramm Version 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.


Eine transaktive Installation wird ausgeführt.

Die Installationsphase wird gestartet.
Die Protokolldatei enthält den Status der Assembly d:\sap-erpconnector sapalot\g
werpconnect.exe.
Die Datei befindet sich in d:\sap-erpconnector sapalot\gwerpconnect.InstallLog.
Assembly 'd:\sap-erpconnector sapalot\gwerpconnect.exe' wird installiert.
Betroffene Parameter:
   assemblypath = d:\sap-erpconnector sapalot\gwerpconnect.exe
   logfile = d:\sap-erpconnector sapalot\gwerpconnect.InstallLog
Es wurden keine öffentlichen Installer mit dem RunInstallerAttribute gefunden. A
ttribute sind in der Assembly d:\sap-erpconnector sapalot\gwerpconnect.exe entha
lten.

Die Installationsphase ist abgeschlossen und die Commit-Phase beginnt.
Die Protokolldatei enthält den Status der Assembly d:\sap-erpconnector sapalot\g
werpconnect.exe.
Die Datei befindet sich in d:\sap-erpconnector sapalot\gwerpconnect.InstallLog.
Assembly 'd:\sap-erpconnector sapalot\gwerpconnect.exe' wird ausgeführt.
Betroffene Parameter:
   assemblypath = d:\sap-erpconnector sapalot\gwerpconnect.exe
   logfile = d:\sap-erpconnector sapalot\gwerpconnect.InstallLog
Es wurden keine öffentlichen Installer mit dem RunInstallerAttribute gefunden. A
ttribute sind in der Assembly d:\sap-erpconnector sapalot\gwerpconnect.exe entha
lten.
Die InstallState-Datei wird entfernt, da keine Installer vorhanden sind.

Die Commit-Phase wurde abgeschlossen.

Die transaktive Installation ist abgeschlossen.
  Mit Zitat antworten Zitat