Benachrichtigungen erhalten wenn der Symantec Endpoint Protection Manager (SEPM) keine Virendefinitionen aktualisiert

Seit Jahren benutzen wir die Symantec Endpoint Protection in meiner Firma. Aktuell die Version 14.0.1.
Eigentlich macht das Ding was es soll. Aber… Es gibt einen Fall in dem im Werkzeug Koffer von Symantec kein Tool vorhanden ist das Problem zu lösen.

Was passiert?

Eigentlich möchte man ja von einem Antivirensystem nichts hören und sehen. Es soll funktionieren und das war es.
Ganz besonders in einer Firma in der 5, 10, 20 und mehr Clients vorhanden sind.
Der SEPM (Symantec Endpoint Protection Manager), benachrichtigt much brav wenn auf Stations nach mehreren Tagen noch alte Virendefinition sind, oder auch eine bestimme Anzahl von PCs erreicht wurden, die alte Virendefinitionen haben. Oft sind das bei uns Maschinen, die unterwegs sind, oder lange nicht eingeschaltet wurden.

Aber es gibt einen Fall in dem der SEPM vollkommen versagt: Wenn nämlich der SEPM selber keine neuen Virendefinitionen erhält. Warum auch immer!

Ich hatte in den letzten Jahren mehrfach den Fall, in denen der SEPM keine neuen Virendefinitionen von Symantec geladen hat. Die Gründe waren vielseitig. Mal hatte der SEPM kein Internet aufgrund eines Konfigurationsfehlers, mal startete der SEPM gar nicht nach einem Windows Update.
Aber in den meisten Fällen war der SEPM einfach nicht fähig, die neuen Signaturen zu laden obwohl er anzeigte, dass welche zum Download bereit stehen.

Der letzte Fall ist besonders nervig. Ich habe zwei Support-Cases zu dem Thema schon offen gehabt, aber die redlich bemühten Supporter haben dennoch nichts herausbekommen.
Nach jeweiligem Neustart des Dienstes oder des Servers, lief es fast immer wieder. Also hatte sich scheinbar nur irgendwas intern „verklemmt“!

Dieser Fall ist aber gefährlich. Man bekommt von der ganzen Sache nichts mit, bis eine bestimmte Anzahl von PCs nach ein paar Tagen eben alte Virendefinitionen haben. In der Einstellung bei uns sind das 10% der Maschinen nach 4 Tagen. Man kann das zwar herunter drücken, aber diese Warnungen nerven meistens nur ohne triftigen Grund.
Und man kann in diesem Fall nicht mal testweise einfach den SEPM neu starten.
Eigentlich will ich keine Meldung und das System soll erstmal selbst versuchen erkannte Problem zu lösen.
Vor allem habe ich keine Lust irgendjemanden zu beauftragen, der pro Tag einmal diese blöde Konsole startet und nachschaut was los ist. Über alles andere bekomme ich ja auch Emails.

Ich finde solch eine lange Latenz, in der es nicht bemerkt wird, dass die AV-Signaturen alt sind, einfach gefährlich.
Aber Bordmittel darüber zu warnen gibt es nicht!
Zudem trat dieser Fall ca alle 6-9 Wochen immer einmal wieder auf.
Und das nervt.

Also habe ich mich auf die Suche gemacht und habe für den SQL Server in dem unsere Daten gehalten werden zwei kleine Jobs geschrieben die nachfolgend beschreiben werden.
Diese Jobs laufen nun einige Monate und haben bereits mehrfach erfolgreich dieses Problem „selbsttätig“ behoben…

Job 1: Symantec Virus Signature Check

Dieser Job läuft jede Stunde einmal.
Der Code macht einfach folgendes.

  • Sollte es in den letzten 32 Stunden (siehe Wert für @delta) eine Änderungen in den Signaturen gegeben haben ist alles OK
  • Gab es kein Update der Signaturen dann werden zwei Schritte eingeleitet.
  • Es wird über den internen SQL Mail Dienst eine Warnung versendet an den Admin.
  • Danach wird ein weiterer Job gestartet mit dem Namen Symantec SEPM Restart.

Die 32 Stunden, sind ein Wert der sich aus Erfahrungswerten gebildet hat. In 98% aller Fälle werden Signaturen innerhalb von 24h aktualisiert. Aber es gibt eben ein paar Ausnahmen

Taucht die Email mehr als zweimal auf, muss ich wohl irgendwie aktiv werden und mal manuell kontrollieren.

DECLARE @delta INT
-- number of hours
SET @delta = 32 
DECLARE @d DATETIME 
DECLARE @t VARCHAR(MAX)
IF NOT EXISTS(SELECT * FROM PATTERN WHERE INSERTDATETIME>DATEADD(hh,-@delta,GETDATE()) AND PATTERN_TYPE='VIRUS_DEFS')
BEGIN
      SET @d = (SELECT TOP 1 INSERTDATETIME FROM PATTERN WHERE PATTERN_TYPE='VIRUS_DEFS' ORDER BY INSERTDATETIME DESC)
      SET @t = 'Hallo Admin!

Die letzten Antivirus-Signaturen wurden am ' + CONVERT(VARCHAR, @d, 120)+' aktualisiert!
Es wird versucht den SEPM Dienst neu zu starten!

Liebe Grüße Ihr
SQLServerAgent'
      EXEC msdb.dbo.sp_send_dbmail @profile_name='Administrator',
				   @recipients='administrator@mydomain.de',
				   @subject='Symantec Virus Definitionen sind nicht aktuell',
				   @body=@t
      PRINT 'Virus Signaturen sind veraltet! Letztes Update: ' + CONVERT(VARCHAR, @d, 120)
      EXEC msdb.dbo.sp_start_job @job_name='Symantec Restart'
      PRINT 'Restart SEPM server!!!'
    END
  ELSE
    BEGIN 
      SET @d = (SELECT TOP 1 INSERTDATETIME FROM PATTERN WHERE PATTERN_TYPE='VIRUS_DEFS' ORDER BY INSERTDATETIME DESC)
      PRINT 'Virus Signaturen sind OK! Letztes Update: ' + CONVERT(VARCHAR, @d, 120)
    END

Job 2: Symnatec Restart

Dieser Job wird nur durch den Job 1 gestartet und er ist äußerst trivial.
Führt einfach nur 2 Befehle aus, die den SEPM stoppen und anschließend neu starten.

NET STOP SEMSRV
NET START SEMSRV

PS: Traurig war, dass man durch den Support auch keine Hilfe bekam, nachdem ich solch einen Lösungsansatz vorschlug. Man wollte mir keine Infos über die Strukturen der Tabellen geben. Letzten Endes waren die Suchmaschinen so nett alle nötigen Informationen zu liefern, denn ich war nicht der einzige mit diesem Problem.

Advanced Developers Conference C++ / ADC++ 2018 in Burghausen vom 15.-16.05.2018

Am 15. und 16. Mai 2018 wird die nächste Advanced Developers Conference C++ stattfinden.
Am 14. Mai finden ganztägige Workshops statt.!

Diesmal in der Heimatstadt des ppedv Teams in Burghausen unter der bewährten Leitung von Hannes Preishuber.
Mit dem Heimvorteil des ppdevs Team darf man gespannt sein was für eine Abendveranstaltung geplant sein wird. Diese haben zumindest für mich ja schon fast einen „legendären“ 😉 Ruf und haben immer viel Spaß und Abwechslung geboten.

Diesmal sind wieder interessante Gäste geladen. Insbesondere der Bekannte Buch Autor Nicolai Josuttis sticht für mich förmlich aus der Menge der Redner heraus. Manch altes und auch neues Gesicht findet sich in der Rednerliste.

Hauptthema wird C++17 sein und C++20 befindet sich ja auch schon wieder in der Standardisierung.
Neben dem (immer wieder guten) Social-Event bei dem man viele Kollegen treffen kann und darf, werden die Vorträge sicherlich die nächsten Evolutionsstufen von beleuchten.

Und bei der mittlerweile rasanten Updatefolge in Visual Studio werden wir vielleicht auch einiges interessantes neues vom Microsoft-Sprecher Steve Caroll erfahren.

Weitere Infos unter dem Link http://www.adcpp.de/2018 

Advanced Developers Conference C++ / ADC++ 2017 in München am 16.-17.05.2017

Am 16. und 17. Mai 2017 wird diesmal im Microsoft Hauptquartier in München die nächste Advanced Developers Conference C++ stattfinden.

Hannes Preishuber und sein bewährtes ppedv Team richten wieder eine Konferenz zu C++ aus.
Ich bin gespannt was wohl diesmal an der Abendveranstaltung  am Dienstag geplant sein wird. Diese haben zumindest für mich ja schon fast einen „legendären“ 😉 Ruf und haben immer viel Spaß und Abwechslung geboten.

Neben dem (immer wieder guten) Social-Event bei dem man viele Kollegen treffen kann und darf, werden sicherlich wieder einige gute Vorträge über die nächsten Evolutionsstufen C++17 und C++20 zu erwarten sein. Und ich tippe mal das auch einige Microsoft Sprecher zu hören sein werden (wenn denn es schon bei Microsoft stattfindet). Ich bin gespannt was es vielleicht auch neues mit Microsoft in Verbindung mit C++ zu hören geben wird.

Mehr dazu unter dem Link http://adcpp.de/2017

 

Die Sache mit dem toten Pferd :-)

Angeblich gibt es eine Weisheit der Dakota Indianer die besagt: „Wenn Du entdeckst, dass Du ein totes Pferd reitest, steig ab.“

Ich bezweifle schwer, dass die Indianer solch eine Dämlichkeit tatsächlich als Weisheit in Ihren Überlieferungen haben. Wie auch von anderen Quellen im Netz wird dieser Satz eher Börsenspekulanten zugeschrieben, die in etwa so geartet ist wie: Versuche nie, ein fallendes Messer aufzufangen!

Aber ganz egal. Um diese „Weisheit“, die jedem Menschen sofort logisch, emotional und auch inhaltlich einleuchtet ranken sich je nach Betriebsfeld und Umgebung weitere nette hilfreiche Anmerkungen. Ich war im Netz ein wenig Suchen und habe von allen möglichen Seiten (Unternehmensberatungen, Seminaren, Politik) einmal Varianten gesammelt, denn die Sätze gefallen mir einfach und leider gehört es zu unser aller Alltag, dass jeder von uns schon mal ein totes Pferd geritten hat, oder evtl. sogar aktuell eines im Stall stehen hat.

Hier also meine kleine Sammlung, die ich gekürzt und zusammengefasst habe in alphabetischer Ordnung. Dabei darf sich jeder selbst seine Gedanken dazu machen aus welchem Anwendungsbereich der Rat wohl kam. Übrigens finde ich persönlich den Abschnitt mit den Strategien am Besten.
Also viel Spaß beim Schmunzeln! 🙂

  • Das Pensions Eintrittsalter für tote Pferde wird drastisch verringert.
  • Das tote Pferd wird „reengineert“.
  • Es werden Berater engagiert um das Reiten toter Pferde zu optimieren.
  • Es werden Mittel eingekauft, die tote Pferde schneller laufen lassen.
  • Es wird angeordnet, daß Pferde nicht mehr mitten im Fluß gewechselt werden dürfen, weil dies die Ursache des Todes gewesen sein könnte.
  • Es wird restrukturiert, damit das tote Pferd in einem anderen Bereich tätig ist.
  • Im Rahmen eines internationalen Artenschutzabkommens verpflichten sich alle Partner, das Aussterben toter Pferde zu verhindern.
  • Wir beantragen Fördermittel der EU aus dem Landwirtschaftsfond für Pferdehaltung.
  • Wir beauftragen eine renommierte Beratungsfirma mit einem Gutachten, ob es billigere und leistungsfähigere tote Pferde gibt.
  • Wir berufen einen ämterübergreifenden Arbeitskreis, um das tote Pferd zu analysieren.
  • Wir beschäftigen externe Berater, die erklären, wir müssten Personal entlassen, um das tote Pferd preiswerter zum traben zu bringen.
  • Wie beschließen Feinstaubplaketten und Abwrackprämien für Pferde.
  • Wir besorgen eine größere Peitsche.
  • Wir besorgen eine Peitsche die größere Schmerzen verursacht.
  • Wir besorgen eine stärkere Peitsche.
  • Wir besuchen andere Orte, um zu sehen, wie man dort tote Pferde reitet.
  • Wir besuchen andere Verwaltungen, um zu sehen, wie man dort tote Pferde reitet.
  • Wir besuchen teure Seminare um mehr über die Lebensgewohnheiten toter Pferde zu lernen.
  • Wir bezahlen eine Tierarzt, der das Innere des Pferdes umorganisiert.
  • Wir bilden eine neue Abteilung und integrieren alle toten Pferde um Synergien zu nutzen.
  • Wir bilden eine Task-Force, um das Pferd wiederzubeleben.
  • Wir bilden einen Gebetskreis, der das Pferd gesund betet.
  • Wir bilden einen Qualitätszirkel, um eine Verwendung für tote Pferde zu finden.
  • Wir bilden innerhalb der Verwaltung ein neues Sachgebiet mit Integration aller toten Pferde, um Synergieeffekte zu nutzen.
  • Wir bringen die toten Pferde unter einem phantasievollen Namen an die Börse.
  • Wir bringen im Rahmen des Budgets die Produkt- und die Finanzverantwortung des toten Pferdes zur Deckung.
  • Wir definieren ein eigenes Produkt „Reiten toter Pferde“.
  • Wir entwickeln ein Motivationsprogramm für tote Pferde.
  • Wir erhöhen die Qualitätsstandards für den Beritt toter Pferde.
  • Wir erklären, dass ein totes Pferd von Anfang an unser Ziel war.
  • Wir erklären, dass das Reiten toter Pferde alternativlos ist.
  • Wir erklären, dass unser Pferd besser, schneller und billiger tot ist als andere Pferde.
  • Wir erklären: Die Eltern des Pferdes und das Privatfernsehen seien Schuld.
  • Wir erklären: Die toten Pferde anderer Organisationen seien noch toter als unseres.
  • Wir erklären: Durch eine gesamteuropäische Lösung würde das Pferd wieder laufen.
  • Wir erklären: Kein Pferd kann so tot sein, das wir es nicht mehr reiten können.
  • Wir erklären: Kein Pferd kann so tot sein, dass man es nicht doch motivieren könnte.
  • Wir erklären: Kein Pferd kann so tot sein, dass man es nicht noch schlagen könnte.
  • Wir erklären: So haben wir das Pferd doch immer geritten.
  • Wir erklären: Wenn man das tote Pferd schon nicht reiten kann, dann kann es doch wenigstens eine Kutsche ziehen.
  • Wir erläutern dem Pferd, dass sein Verhalten zur Privatisierung öffentlicher Dienstleistungen führen könnte.
  • Wir ernennen einen Verwaltungsmitarbeiter zum Beauftragten für das Totepferdewesen.
  • Wir erschießen alle lebendigen Pferde, um die Chancen unseres toten Pferdes zu erhöhen.
  • Wir erstellen eine Präsentation in der wir aufzeigen, was das Pferd könnte, wenn es noch leben würde.
  • Wir frieren die Pferde ein und warten auf eine neue Technik, die es ihnen ermöglicht, tote Pferde zu reiten.
  • Wir gewähren dem Reiter eine Leistungspämie, um seine Motivation zu erhöhen.
  • Wir gründen einen Arbeitskreis, um das Pferd zu analysieren.
  • Wir gründen eine Kommission, um den Sattel zu analysieren.
  • Wir kaufen etwas zu, das tote Pferde schneller laufen lässt.
  • Wir kaufen Leute von außerhalb ein, die angeblich tote Pferde reiten können.
  • Wir laden zu einem Dead-Horse-20-Gipfel ein, mit vielen Fotos für die Pferdenachrichten.
  • Wir lassen das tote Pferd 48 Stunden ausruhen und probieren aus, ob es danach wieder läuft.
  • Wir lassen das tote Pferd nach DIN EN ISO 9001 zertifizieren.
  • Wir lassen den Stall renovieren.
  • Wir legen das tote Pferd bei jemand anderem in den Stall und behaupten, es sei seines.
  • Wir leugnen, jemals ein Pferd besessen zu haben.
  • Wir machen auf Kosten der Pferdebesitzer Urlaub in anderen Ländern, um zu sehen, wie man dort tote Pferde reitet.
  • Wir machen eine Studie, um zu sehen, ob es bessere oder billigere Pferde gibt.
  • Wir machen eine Studie, um zu sehen, ob es billigere Berater gibt.
  • Wir melden das Pferd bei einem Weiterbildungskursus zur Selbstmotivation an.
  • Wir nennen das tote Pferd „Dead Horse Power“ und bieten es als neuestes Produkt auf dem zentralafrikanischen Markt an.
  • Wir ordnen Überstunden für Reiter und Pferd an.
  • Wir organisieren regelmäßige Teamgespräche mit einem externen Supervisor, um die Kommunikation zwischen Reiter und totem Pferd zu verbesseren.
  • Wir outsourcen das tote Pferd. Der Subunternehmer kann es wahrscheinlich besser reiten.
  • Wir praktizieren „Lean-Horse-Management“, d.h. wir führen Schulungen mit dem Reiter durch, um das tote Pferd mit Hilfe einer optimierten Ernährung von überflüssigen Pfunden zu befreien.
  • Wir richten eine unabhängige Kostenstelle für tote Pferde ein.
  • Wir schicken den Reiter auf ein Weiterbildungsseminar, damit er besser reiten lernt.
  • Wir schieben eine Trainingseinheit ein, um besser reiten zu lernen.
  • Wir schirren mehrere tote Pferde zusammen an, damit sie gemeinsam schneller werden.
  • Wir schlagen dem Personalrat vor, Leistungsanreize für tote Pferde einzuführen.
  • Wir schließen mit dem Personalrat eine Dienstvereinbarung über den Einsatz toter Pferde in der Verwaltung.
  • Wir schließen mit dem Reiter eine Zielvereinbarung über das Reiten toter Pferde.
  • Wir schließen uns einem interkommunalen Vergleichsring an, um entsprechend dem best-practice-Gedanken das tote Pferd zu optimieren.
  • Wir schreiben die Stelle des Reiters des toten Pferdes bundesweit aus, nachdem sich aus dem eigenen Haus kein qualifizierter Bewerber gefunden hat.
  • Wir senden jemandem das tote Pferd als Geschenk. Geschenke darf man nicht zurücksenden.
  • Wir setzen den Reiter um und schreiben die Stelle verwaltungsintern aus.
  • Wir sourcen das Pferd aus.
  • Wir sourcen den Stall für tote Pferde aus, um Futterkosten zu sparen.
  • Wir starten einen internen Ideenwettbewerb zum Reiten toter Pferde.
  • Wir stellen dem Reiter eine Beförderung in Aussicht.
  • Wir stellen fest, dass die anderen auch tote Pferde reiten und erklären dies zum Normalzustand.
  • Wir stellen Vergleiche unterschiedlicher toter Pferde an.
  • Wir strukturieren um damit ein anderer Bereich das tote Pferd bekommt.
  • Wir suchen einen finanzstarken Partner aus der Privatindustrie und gründen zusammen mit dessen toten Pferden ein Public-Private-Partnership-Projekt.
  • Wir suchen einen finanzstarken Partner und gründen zusammen mit dessen toten Pferden ein Joint Venture.
  • Wir tauschen das tote Pferd gegen ein anderes totes Pferd aus, das laut Produktbeschreibung schneller läuft.
  • Wir tauschen das tote Pferd gegen eine tote Kuh aus.
  • Wir verdoppeln die Futterration für das Pferd.
  • Wir vergrößern den Verantwortungsbereich für tote Pferde.
  • Wir verklagen das Pferd zivilrechtlich auf Schadensersatz wegen Nichterbringung einer zugesicherten Leistung.
  • Wir wechseln den Pferdelieferanten.
  • Wir wechseln die Reiter.
  • Wir wechselnd das Stroh im Stall aus.
  • Wir wechselnd den Futterlieferanten.
  • Wir weisen darauf hin, dass im Rahmen des Neuen Kommunalen Finanzmanagements das tote Pferd als bewegliches Anlagevermögen zu bewerten ist.
  • Wir weisen den Reiter an, sitzen zu bleiben, bis das Pferd wieder aufsteht.
  • Wir wenden die Angela-Merkel-Strategie an: Alle dürfen munter sich widersprechende Vorschläge machen und am Schluss ist der Koalitionspartner schuld, wenn das Pferd sich nicht bewegt.
  • Wir wenden die Arbeitsrechtliche-Stragie an: Man kündigt nach Anhörung des Personalrates dem Pferd fristlos, da es sich um einen klaren Fall von Arbeitsverweigerung handelt.
  • Wir wenden die Controlling-Strategie an: Man stellt fest, daß ein totes Pferd kein Futter benötigt und empfiehlt, nur noch tote Pferde zu verwenden.
  • Wir wenden die Freud’sche-Strategie an: Es wird erklärt, daß das Pferd eine schwere Kindheit hatte, und deswegen ausnahmsweise nichts „leisten“ müsse.
  • Wir wenden die Gerhard-Schröder-Strategie an: Wir schnallen dem toten Pferd einen leichteren Sattel um, damit es die Chance hat, sich wieder von selbst zu erholen.
  • Wir wenden die Globalisierungs Strategie an: Man prügelt auf das Pferd ein und ruft dabei: Wenn Du nicht mitspielst, bist Du aus dem Rennen!
  • Wir wenden die Gutachten Strategie an: Das Gutachten stellt fest, dass das tote Pferd kein Futter benötigt und empfiehlt, nur noch tote Pferde zu verwenden.
  • Wir wenden die Helmut-Kohl-Strategie an: Wir setzen uns hin und warten sechzehn Jahre, ob das Pferd sich nicht einfach nur tot stellt.
  • Wir wenden die Juristische-Strategie an: Wir verklagen das Pferd wegen Nichterbringung einer zugesicherten Leistung.
  • Wir wenden die Kommunistische-Strategie an: Die Leistung des toten Pferdes wird als Vorgabe für die Zielvereinbarung für alle anderen Pferde festgeschrieben.
  • Wir verwenden die Reaktionäre-Strategie: Totes Pferd? Wovon reden Sie, Sie linker Spinner?
  • Wir wenden die Managementlösung: Da das tote Pferd nicht 90% seiner Zeit damit beschäftigt ist, sich wichtig zu tun oder selbst darzustellen, wird es auch nicht befördert.
  • Wir wenden die Militärische-Strategie 1 an: Man postuliert, daß nur ein toter Reiter ein totes Pferd reiten kann und erschießt den Reiter.
  • Wir wenden die Militärische-Strategie 2 an: Wir stellen das tote Pferd vor ein Kriegsgericht und lassen es standrechtlich erschiessen.
  • Wir wenden die Motivations Strategie an: Wir versprechen dem Reiter, der die höchste Leistung aus dem toten Pferd heraus holt, eine Prämie; verbunden mit einem beruflichen Aufstieg und dem Titel „General Director of Dead Horses“
  • Wir wenden die PEGIDA-Strategie an: Wir stellen fest, dass das Vieh nur simuliert.
  • Wir wenden die Politische-Strategie an: Das Pferd wird EU–Kommissar und nach Brüssel geschickt.
  • Wir wenden die REFA-Strategie an: Wir messen die Zeit und stellen fest, daß das tote Pferd noch immer die doppelte Leistung eines bundesdeutschen Beamten erbringt. Deshalb wird es verbeamtet.
  • Wir zählen nur solche Pferde in der tote-Pferde-Statistik, die im Stall liegen.
  • Wir ändern die Anforderungen an Reiten und Bewegung und erteilen einen neuen Entwicklungsauftrag.
  • Wir ändern die Kriterien, die besagen, dass ein Pferd tot ist.
  • Wir überarbeiten die Dienstanweisung für das Reiten von Pferden.
  • Wir überarbeiten die Leistungsbedingungen für tote Pferde.
  • Wir überarbeiten die Leistungsbeschreibung für tote Pferde.
  • Wir überlegen die Gründung einer kommunalen GmbH für tote Pferde, nachdem die Einrichtung eines optimierten Regiebetriebes bzw. eines Eigenbetriebes keinen Erfolg brachte.

Und zu guter Letzt:

  • Wenn Du merkst, dass Du ein totes Pferd reitest, sorge für einen bequemen Sattel – es könnte ein langer Ritt werden!
    (Frank Menzel 2008)

Quellen: Ich habe einige Seiten im Internet und in Foren gefunden (siehe Google-Suche). Es war mir unmöglich einzelne Sätze gezielt Quellen zuzuordnen. Die meisten der Sätze kamen mehrfach vor. Insofern konnte ich bis auf den letzten Satz keine „Urheber“ ausfindig machen.

ADC++ in München Garching vom 29.-30.04.2014

Ein Fazit und eine kurze Zusammenfassung zu Anfang.

Um die 100 C++ Entwickler kamen dieses Jahr nach Garching zur ADC++, die von ppdev AG (Johannes Preishuber) mit einigen Sponsoren veranstaltet wurden.

Nach Johannnes Preishuber hat der Fußball (Champions League Halbfinale Bayern München – Real Madrid) einen kleinen Strich durch die Veranstaltung gemacht. Es war für viele Interessierte kein Hotelzimmer mehr in der Nähe verfügbar. Dadurch war die Teilnehmerzahl leider nur um die 100.

Lohnend war der Ausflug auf die Konferenz in jedem Fall. Zum einen um etwas über den Tellerrand zu schauen. Zum anderen um zwischen den Sessions auch Kontakte zu pflegen und auch fachlich mal zu erkunden was andere machen und wie andere etwas machen. Für mich sind das immer wieder kleine Aha-Erlebnisse.
Ich bin vielleicht etwas verwöhnt von den beiden ADC’s (2011 Prien am Chiemsee, 2012 Ohlstadt im Zugspitzland). In Bad Aibling 2013 war ich leider nicht dabei.

Die Location war nicht so malerisch. Der Konferenzort funktional, aber nicht ganz so gemütlich und schön.
Toll war in jedem Fall wieder die Abendveranstaltung, die in der Flugzeugwerft Schleißheim in toller Atmosphäre stattfand. Hier  lässt sich ppdev AG immer etwas Tolles einfallen. Mein Lob dafür!

Hier ein kleiner Bericht über die Sessions an denen ich teilgenommen habe.Je nach Struktur und Inhalt kann ich mehr oderweniger wiedergeben. Sollte ich Dinge falsch verstanden haben oder falsch wiedergeben, bitte ich das zu entschuldigen. Ich hoffe jedenfalls hier keine gravierenden Fehler in diesem Bericht gemacht zu haben.

„ADC++ in München Garching vom 29.-30.04.2014“ weiterlesen

Minidumps ganz einfach

Manchmal, wenn man ein kleines Programm entwickelt mag es als Overkill erscheinen extra Code für Minidumps einzubauen.
Was aber, wenn man doch einen Fehler aufspüren möchte und ein Minidump ad hoc ganz praktisch wäre?

Unter Vista und Windows 7 ist es ganz einfach in den WER Einstellungen Einträge vorzunehmen, mit denen man mit nur ein paar Registry Einträgen sofort zu Minidumps kommt.

Nachfolgend die Registry Einträge, die einen Fulldump im Verzeichnis %LOCALAPPDATA%\CrashDumps erzeugen.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
"DumpType"=dword:00000001
"DumpCount"=dword:00000010
"DumpFolder"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,\
00,41,00,54,00,41,00,25,00,5c,00,43,00,72,00,61,00,73,00,68,00,44,00,75,00,\
6d,00,70,00,73,00,00,00

Eine vollständige Liste der Einstellungen findet sich in der MSDN Doku:
http://msdn.microsoft.com/en-us/library/bb787181(VS.85).aspx

PS:
Ich benutze diese Einstellungen aktuell auch einem Bug in VisualStudio 2010 auf die Spur zu kommen, damit ich Crashdumps regelmässig an http://connect.microsoft.com übertragen kann.

PPS: (14.01.2011 nach Hinweis von André)
Wie man auch der Doku ennehmen kann ist fpr dieses Funktion Vista SP1, Windows 2008 Server oder Windows 7 notwendig. Vista RTM hat diese Funktion nicht.

TFS Fehler TF248015…

Ein nettes Hilfsmittel ist die Work-Item Suche mit dem Addin http://visualstudiogallery.msdn.microsoft.com/de-de/3f31bfff-5ecb-4e05-8356-04815851b8e7

Leider funktionierte dies bei mir nicht sofort. Ich bekam die folgende Fehlermeldung:

TF248015: Your work item query could not be completed due to an unexpected error returned by the Microsoft SQL Server Full-text engine. Contact your system administrator to check the Application event log for Team Foundation Server.

Na fein ❗ Also muss ich mich selbst kontaktieren weil irgendwas mit der Volltext Suche nicht klappt.

Nach einigem hin und her irren durch alle möglichen Einstellungen entdeckte ich den Missetäter: Der „SQL Full-text Filter Daemon Launcher“ war nicht gestartet. Dies ist ein Dienst, den man in der Computer-Verwaltung oder dem SQL-Server-Konfigurations-Manager findet.
Aus irgend einem mysteriösen Grund war hier ein falsches Dienstkonto angegeben und der Dienst konnte nicht starten.

Nachdem das korrigiert war habe ich danach noch ein Rebuild des Warehouse veranlasst damit die Indizes sofort zur Verfügung aktuell sind. Das erfolgt über die folgende Web Adresse: http://servername:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx 
in dem man ProcessWarehouse auswählt. Unter collectionName gibt man seine Team Project Collection an um die es geht. Wer die Namen der Collections vergessen hat, findet sie in der Team Foundation Server Administration Console aufgelistet.

Manifeste sind nicht alles, DLLs und COM Objekte benötigen ISOLATION_AWARE_ENABLED oder ein eigenes Activation Context Handling

Ich habe eine DLL die einiges an Datenbank I/O für ein Produkt übernimmt. Diese DLL sollte in einem Service eingesetzt werden.
Eigentlich ist diese DLL immer nur Teil eines vollen UI Projektes und hat auch einige kleine visuelle Komponenten. Entsprechend prüft eine Init Funktion bestimmte Voraussetzungen, die für das korrekte Arbeiten notwendig sind wie: mindestens MS-XML 3.0, IE ab Version 5.1, Common Control 6.0 (also mit Manifest).
Soweit so gut. Die DLL selbst wurde mit einem Manifest (Typ 2) versehen und in den Service mit eingebaut.

Eigentümlicherweise startete der Service nicht. Die Init Funktion meldete immer, dass die Requirements nicht gegeben wären. Was eigentlich nicht sein kann, weil der selbe Code in einem anderen Kontext eines GUI Programms perfekt funktioniert.

Ein wenig debuggen zeigte, dass die Common Control 6.0 nicht gefunden wurden.
Eigentlich kein Wunder. Der Service hat keine UI, es gibt keinen Code der die Common Control 6.0 verwendet, allerdings hatte meine DLL ja ein entsprechendes Manifest für die Common Control 6.0 DLL.
Aber der Versionstest in der DLL lädt immer die 5er Version, also die Version ohne Manifest.

Es dauerte eine Weile bis es bei mir klingelte und ich verstand worin das Problem lag:

  • Wenn man ein Manifest in einer DLL mit dem Code 2 einträgt (ISOLATIONAWARE_MANIFEST_RESOURCE_ID), dann funktioniert dieses Manifest wenn in diesem Moment die ComCtl32.dll implizit geladen werden sollte.
  • In meinem Fall aber klappte das nicht. Die DLL wurde nicht implizit geladen. Die Versionkontrolle später führte LoadLibrary direkt durch und führte dann DllGetVersion aus (mit GetProcAddress ermittelt).
  • In meinem Fall bedeutet das aber, das LoadLibrary im Aktivierungskontext (Activation Context) der EXE ausgeführt wird, und die hat kein ComCtl32 Manifest für die Version 6.0. Es ist ja auch nur ein Service.
  • Damit es funktioniert muss man in jedem Fall auch den folgenden Define setzen.
#define ISOLATION_AWARE_ENABLED 1
  • oder man muss dafür sorgen, dass man seinen eigenen Aktivierungskontext nutzt. Sprich seine Manifeste, die man selber möchte.
  • Durch diesen define, werden bestimmte Funktionen wie CreateWindow, LoadLibrary, CoCreateInstance, SendMessage und andere durch einen inline-Code ersetzt der einen Aktivierungkontext benutzt und die aktuellen Manifeste der DLL bestimmt und benutzt.

In meinem Fall hieß die Lösung nicht LoadLibrary zu benutzen sondern GetModuleHandle und wenn eben ComCtl32 gar nicht im Speicher ist, also auch nicht benutzt wird auch keinen weiteren Test durchzuführen, aber zur Sicherheit habe ich auch ISOLATION_AWARE_ENABLED gesetzt.

Siehe auch:
http://msdn.microsoft.com/en-us/library/aa376607(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa375197(VS.85).aspx

Wir müssen schneller handeln…

Ansehen und mitmachen:

http://one.org/de/schneller/index.html

Kann man mit einem Euro am Tag die Welt verändern?

Ja ❗

Zumindest für ein Kind in der Welt kann man mit einem Euro am Tag für eine gesicherte Schulausbildung, Ernährung und Gesundheitsfürsorge sorgen. Was sich mit diesem Euro für Kinder verändern kann ist unfassbar für uns Mitteleuropäer.

Wen das mehr interssiert, der sollte sich mal http://www.compassion-de.org ansehen ❗