service unter .net von C# umgeschrieben klappt nicht
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:
Source für den Installer
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.
Delphi-Quellcode:
und hier noch die DPR
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.
Delphi-Quellcode:
Was mache ich denn falsch ???
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. 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. |
Re: service unter .net von C# umgeschrieben klappt nicht
Deine Klassen sind alle strict private, Installutil sucht aber eine öffentliche (public) Klasse. Könnte dass der Knackpunkt sein?
|
Re: service unter .net von C# umgeschrieben klappt nicht
Wo meinst du mit strict private ??
da sind ja nur die procedure InitializeComponent drin. oder meinst du das mit strict private ?? |
Re: service unter .net von C# umgeschrieben klappt nicht
Schau Dir doch mal Dein Assembly mit dem Reflector an. Welche Visibility hat denn Deine Klasse mit dem Installer?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 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