AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Prism service unter .net von C# umgeschrieben klappt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

service unter .net von C# umgeschrieben klappt nicht

Ein Thema von Digielm · begonnen am 16. Dez 2008 · letzter Beitrag vom 17. Dez 2008
Antwort Antwort
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
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: service unter .net von C# umgeschrieben klappt nicht

  Alt 16. Dez 2008, 15:42
Deine Klassen sind alle strict private, Installutil sucht aber eine öffentliche (public) Klasse. Könnte dass der Knackpunkt sein?
  Mit Zitat antworten Zitat
Digielm

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

Re: service unter .net von C# umgeschrieben klappt nicht

  Alt 17. Dez 2008, 12:39
Wo meinst du mit strict private ??

da sind ja nur die procedure InitializeComponent drin.

oder meinst du das mit strict private ??
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#4

Re: service unter .net von C# umgeschrieben klappt nicht

  Alt 17. Dez 2008, 13:37
Schau Dir doch mal Dein Assembly mit dem Reflector an. Welche Visibility hat denn Deine Klasse mit dem Installer?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz