Loewchen0507 Geschrieben 12. April 2007 Geschrieben 12. April 2007 Hi Leute, Ihr habt mir schon so oft geholfen, und darum nun meine bitte um ein bisschen brainstorming... Ich bin momentan dabei herauszufinden wie man einen Dienst, einen Prozes oder ähnliches schreiben kann... Ich möchte nämlich das während das Programm oder der Dienst gestartet ist, dass innerhalb eines bestimmten zeitintervalls Daten verglichen und gegebenenfalls geändert werden. So und nun seit Ihr dran... Was würdet Ihr mir empfehlen? Und könnt Ihr mir Informationsquellen nennen? LG Loewchen Zitieren
realgun Geschrieben 12. April 2007 Geschrieben 12. April 2007 Nun, da gibt es mehrere Möglichkeiten. Du kannst z.B. nen Timer einsetzen oder das Dateisystem auf Veränderungen überwachen. Dafür gibt es u.a. den FileSystemWatcher. Es kommt halt drauf an welche Daten bzw. welche Änderungen Du überwachen möchtest. Der SQL - Server 2005 bringt dafür auch eigene Funktionen mit. mfg realgun Zitieren
Loewchen0507 Geschrieben 12. April 2007 Autor Geschrieben 12. April 2007 Hm, das hört sich schon einmal gut an... ich möchte die Daten aus einer MDB mit den Daten vom SQL-Server vergleichen. Da ich ein Programm habe das die Daten in einer MDB verwaltet und ich einige Daten aktuell auch auf dem SQL Server haben möchte. Loewchen Zitieren
Byteloser Geschrieben 12. April 2007 Geschrieben 12. April 2007 Wieso erweiterst Du nicht einfach dieses Verwaltungsprogramm um Abgleichroutinen? Zitieren
Amstelchen Geschrieben 12. April 2007 Geschrieben 12. April 2007 prinzipiell möglich ist es, die JET-datenbank mit der MSSQL-datenbank auch via dienst anstelle eines standalone-programms anzugleichen. bedenke aber, dass nur eine eingeschränkte interaktion mit dem dienst möglich ist - so werden abfragen über ein GUI nicht direkt steuerbar sein. auch sollten z.b. JET-fehlermeldungen protokolliert werden, um ein debuggin des dienstes zu ermöglichen. ich persönlich rate aus performance- und diagnosegründen davon ab, es sei denn, es handelt sich wirklich um unveränderliche abgleiche, die zu fixen zeiten laufen, und die nicht über die dafür vorgesehenen tool des SQL server machbar sind, z.b. die data transformation services oder eine stored procedure in T-SQL. s'Amstel Zitieren
Guybrush Threepwood Geschrieben 12. April 2007 Geschrieben 12. April 2007 Warum sollte der Dienst keine GUI haben können? Aber du hast recht das es für das Problem sicherlich einfachere/bessere Ansätze gibt. Aber dazu sollte etwas genauer beschrieben werden wann genau was passieren soll. Prinzipell wäre aus möglich ein Programm per Taskplaner regelmäßig anzustoßen... Zitieren
Amstelchen Geschrieben 12. April 2007 Geschrieben 12. April 2007 Warum sollte der Dienst keine GUI haben können? es war so gemeint, als dass ein windows-systemdienst vorrangig dafür konzipiert ist, als hintergrundprozess und ohne die notwendigkeit eines angemeldeten benutzers zu arbeiten - die dienststeuerung selbst (start, stop, pause, continue, startart, impersonation, etc.) kann natürlich über eine GUI erfolgen. s'Amstel Zitieren
Loewchen0507 Geschrieben 13. April 2007 Autor Geschrieben 13. April 2007 Wow, ok ich bruachte ein Weile um mich erst mal in die gaze Thematik einzulesen. OK ich braucht mehr Informationen. Grundlegendes: Es geht um den Statischen abgelich zweier Tabellen. Die eine Tabelle ist eine SQL Tabelle die andere eine mdb. Es handelt sich dabei aber ausschließlich um die Backends zweier Programme. In dem einen Programm werden zu verschiedenen Kunden Produktionsdaten, Lohndaten etc... verwaltet. In dem anderen Programm werden ausschließlich Adressen und Ansprechpartner verwaltet. Beide Programme liegen auf einem Server. Es soll nun sichergestellt werden, dass wenn in dem Programm indem die Produktionsdaten etc. verwaltet werden, ein neuer Kunde bzw. eine neue Adresse angelegt wird, das diese dann automatisch in dem anderen Programm ebenfalls zu finden ist. Andersherum soll es auch möglich sein, dass wenn in dem Addressen und Ansprechpartnerverwaltungsprogramm eine neue Adresse eingetragen wird oder eine bestehende geändert wird, dass diese Änderungen auch in dem anderen Programm in den Stammdaten zur Verfügung gestellt werden. Ich habe mir das dann so gedacht. ein GUI benötige ich nicht wirklich. Ich benötige ausschließlich eine Konfigurationsdatei die eventuell geändert werden kann, damit ich die Verbindungsdaten zu den entsprechenden Datenbanken sichern kann und die Tabellennamen und Spaltennamen, damit eventuelle Änderungen durch eine Änderung in der Konfiguration möglich ist. Daher habe ich gedacht es wäre schön, wenn ich einen Dienst habe der einmal in der Stunde die Datenabgleicht und für den ein GUI bereitgestellt werden kann indem die Konfigurationen vorgenommen werden können. Wenns einfacher geht... ich bin für alles bereit... Es gibt noch keine Schnittstelle. Ich fange eh von vorne an, möchte aber die Sache gleich richtig angehen. Sie muss ausbaufähig bleiben, so dass jederzeit Änderungen gemacht werden können oder die Funktionalität erweitert werden kann. So ich hoffe das reicht Euch an Informationen. Zitieren
Guybrush Threepwood Geschrieben 13. April 2007 Geschrieben 13. April 2007 es war so gemeint, als dass ein windows-systemdienst vorrangig dafür konzipiert ist, als hintergrundprozess und ohne die notwendigkeit eines angemeldeten benutzers zu arbeiten - die dienststeuerung selbst (start, stop, pause, continue, startart, impersonation, etc.) kann natürlich über eine GUI erfolgen. s'Amstel der Dienst selber kann auch eine ganz normale GUI besitzen wie jedes andere Programm auch. Dazu muss man nur in den Dienstoptionen die Kommunikation mit dem Desktop aktivieren Zitieren
Loewchen0507 Geschrieben 13. April 2007 Autor Geschrieben 13. April 2007 Also ich habe jetzt erstmal gesehen, dass ich in Visual Studio 2005 wenn ich sage Projekt erstellen auch "Windows Dienst" zur Auswahl habe. er erstellt mir dann das Projekt indem eine Service1.cs vorhanden ist. Er schreibt auch: "Um Komponenten zu einer Klasse hinzuzufügen, ziehen Sie diese aus der Toolbox.... " etc... ziehe ich nun aber einfach nur mal einen button dort hinein, dann schreibt er mir gleich haufenweise Fehlermeldungen. Erstelle ich die GUI dann mit einer einfach Form? LG Loewchen Zitieren
Loewchen0507 Geschrieben 13. April 2007 Autor Geschrieben 13. April 2007 Hm, ich habe hier: Exemplarische Vorgehensweise: Erstellen einer Windows-Dienstanwendung im Komponenten-Designer eine Art Tutorial gefunden, wo man die ganze Sache einmal durcharbeiten kann... ich bin sogar richtig weit gekommen. Nur an der Stelle wo ich ein Setup Projekt für den Dienst erstellen soll... da komme ich nicht mehr weiter... Es steht geschrieben, dass ich mit einem Rechtsklick auf die Projektmappe (im Projektexplorer) auf Hinzufügen und dann Neues Projekt kllicken soll... Ich habe aber unter Hinzufügen kein "Neues Projekt"... arbeite aber auch mit Visual Studio 2005. Da habe ich mir gedacht, gut erstellst du das Projekt so und fügst es danach zur Projektmappe hinzu über hinzufügen - vorhandenes element... aber dort habe ich ebsowenig die möglichkeit ein projekt auszuwählen... wie kann ich denn nun ein SetupProjekt zu meinem WindowsDienstProjekt hinzufügen??? LG Loewchen LG Loewchen Zitieren
Guybrush Threepwood Geschrieben 13. April 2007 Geschrieben 13. April 2007 Klick mit der rechten Maustaste auf die Solution und nicht auf das Projekt. Zitieren
Loewchen0507 Geschrieben 13. April 2007 Autor Geschrieben 13. April 2007 Sorry, falls ich mich jetzt hier extrem blöd anstelle, aber was verstehst du unter Solution? Egal welches Element ich im Projektexplorer mit Rechtsklick anklicke. In dem erscheinenden Menü habe ich nur beim klick auf das Projekt die Auswahl Hinzufügen, aber dort gibts eben kein "neues Projekt"... Zitieren
Byteloser Geschrieben 13. April 2007 Geschrieben 13. April 2007 Versuch's mal mit Datei -> hinzufügen -> Neues Projekt Zitieren
Loewchen0507 Geschrieben 13. April 2007 Autor Geschrieben 13. April 2007 oh man, warum einfach wenns auch kompliziert geht... auf die einfachste Variante bin ich nicht gekommen... ich benimm mich shcon wie ein DAU... :upps Zitieren
Loewchen0507 Geschrieben 13. April 2007 Autor Geschrieben 13. April 2007 Also das ist ja eine richtig coole Sache... Ich habe jetzt einen Dienst, ich habe ein InstallShield für diesen Dienst, ich kann den Dienst starten und stoppen ich kann ihn auch wieder deinstallieren und ich bekomme einen eintrag in den Eventvwr wenn er gestartet und beendet wird... Echt Coole Sache... Nun habe ich gelesen, dass ich mit dem System.Timers.Timer einen einfachen Abrufmechanismus einrichten kann. Damit werde ich mich dann heute Abend wohl mal beschäftigen. Ich vermute, dass wenn ich eine Konfigurationsdatei haben möchte die über ein GUI gefüllt und verändert werdenkann, dass ich dass dann mit einer settings Datei machen kann und eine windows Form erstelle und diese Aufrufe wenn ich mich in OnStart befinde. Oder gibt es auch eine Möglichkeit dass ich einfach ein "Konfigurations-Programm" starten kann, also ein Programm das diese Konfigurationen für diesen Service macht per GUI? Ist schon ein echt spanendes Thema. Finde ich. Für Euch wahrscheinlich schon Routine... LG Loewchen Zitieren
Loewchen0507 Geschrieben 16. April 2007 Autor Geschrieben 16. April 2007 Hi Leute, nach dem ich ja solch ein großen erfolg hatte und die Spielereien alle geklappt haben wollte ich das bestehende Projekt umbenennen, aber irgendwie klappte das nicht. Na gut... dann habe ich mir gedacht, machst das ganze noch mal... habe mir wieder einen Dienst erstellt, einen Instaler dazu und ein Setup Projekt... alles wunderbar... nur als ich den Dienst installiert hatte und ihn starten wollte kam eine Fehlermeldung... Exception nicht abgefangen... und im Eventviewer war folgender Eintrag dazu zu sehen: EventType clr20r3, P1 cowi-dienst.exe, P2 1.0.0.0, P3 46234022, P4 system, P5 2.0.0.0, P6 4333ae87, P7 3719, P8 115, P9 system.security.security, P10 NIL. Weitere Informationen über die Hilfe- und Supportdienste erhalten Sie unter Events And Errors Message Center: Basic Search. hat jemand eine Idee warum das ganze nicht funktioniert? Ich habe noch keine Fehlerbehandlung mit eingebaut, aber es passiert ja auch noch nicht viel. Das einzige was ich mache ist, dass ich beim starten und stoppen einen Eintrag in den Eventviewer vornehme. Hier der Code: namespace CoWi_Dienst { public partial class CoWi : ServiceBase { public CoWi() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("CoWiSource")) { System.Diagnostics.EventLog.CreateEventSource("CoWiSource", "CoWiLog"); } EventLogCoWi.Source = "CoWiSource"; EventLogCoWi.Log ="CoWiLog"; } static void main() { System.ServiceProcess.ServiceBase[] ServicesToRun; ServicesToRun = new System.ServiceProcess.ServiceBase[] {new CoWi()}; System.ServiceProcess.ServiceBase.Run(ServicesToRun); } protected override void OnStart(string[] args) { EventLogCoWi.WriteEntry("CoWi gestartet"); } protected override void OnContinue() { EventLogCoWi.WriteEntry("CoWi läuft"); } protected override void OnStop() { EventLogCoWi.WriteEntry("CoWi gestoppt"); } } } meckern tut er hier: if (!System.Diagnostics.EventLog.SourceExists("CoWiSource")) ich hoffe Ihr könnt mir helfen. Zitieren
WiesneRobert Geschrieben 12. März 2008 Geschrieben 12. März 2008 wer meckert? Der Compiler oder gibt es ne Exception? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.