Magerquark.de

Aktuelle Beiträge

  • Error 5000 on event log when starting a .NET 2.0 Windows Forms application

    Recently we updated a .NET 2.0 Windows Forms application on a client’s site.

    The updated version starts well from a local drive but failed to start on a remote server via Citrix.

    Error

    Whenever we started the application it simply did not show up any window while displaying an error in the event log (in German):

    Ereignistyp: Fehler
    Ereignisquelle: .NET Runtime 2.0 Error Reporting
    Ereigniskategorie: Keine
    Ereigniskennung: 5000
    Datum: 24.11.2009
    Zeit: 17:20:28
    Benutzer: Nicht zutreffend
    Computer: MYSERVER
    Beschreibung: EventType clr20r3, P1 myapplication.exe, P2 1.0.3615.30626, P3 4b0c0335, P4 system.configuration, P5 2.0.0.0, P6 4889de74, P7 1a6, P8 15a, P9 ioibmurhynrxkw0zxkyrvfn0boyyufow, P10 NIL.

    The event log entry description points to the System.Configuration namespace, so it is likely that the issue was somehow related to the application configuration file „app.config“ (respectively „myapplication.exe.config“).

    Steps to locate the issue

    We isolated the issue by starting with a (nearly) empty „app.config“ file with which the application succeeded to start. We then added section by section back to the configuration file, until the error occurred again.

    Cause

    The bottom line was that a custom configuration section handler that worked well when being used in the locally started application did not work when being run from the Citrix server. A likely cause is that the Citrix server is a 64 bit machine whereas the other machine is a 32 bit machine.

    Resolution

    To resolve the issue we removed the custom configuration section handler and worked around it in code.

  • Abendessen-Sammelsurium

    Um Zeit zu sparen, nachfolgend mal zusammengefaast einige besonders leckere Abendessen die ich mir und/oder mit/fürdie Jana gekocht habe:

    ae-20091124-01
    ae-20091124-02
    ae-20091124-03
    ae-20091124-04
    ae-20091124-05
    ae-20091124-06
    ae-20091124-07
    ae-20091124-08

    Allesamt sehr sehr lecker, wie immer!

  • Resolving DevExpress ASPX HtmlEditor error

    Recently I got the following error when using the DevExpress.com HTML editor control for ASP.NET.

    Message: Invalid argument.
    Line: 1147
    Char: 3
    Code: 0
    URI:
    http://www.zeta-producer.com/modules1-admin/DXR.axd?r=1_103

    This error only occurred only in Internet Explorer and only in our production environment, not with Firefox or Google Chrome, not in the test environment.

    After some searching, I found out:

    • The issue occurs somewhat near the „_aspxCreateStyleSheet“ function.
    • A poster in the DevExpress forum experiences a similar issue when using too much style sheets.

    Since I am using the ASP.NET „App_Themes“ folder with a lot of style sheets, I thought that this may be my issue, too.

    Resolution

    By placing the following keys in the „appSettings“ section of the „web.config“ file on our production servers, I resolved the issue.

    <add key=“DXEnableCallbackCompression“ value=“true“/>
    <add key=“
    DXEnableResourceCompression“ value=“true“/>
    <add key=“DXEnableResourceMerging“ value=“true“/>
    <add key=“DXEnableHtmlCompression“ value=“true“/>

    I assume that the „DXEnableResourceCompression“ key probably merges multiple CSS files into one CSS, thus resolving the issue.

    Please note that these „appSettings“ keys requires you to have a newer version of the DevExpress.com libraries (9.2 if I recall correctly).

  • Hund entlaufen, was tun?

    Gestern hatten wir, meine Tierärztin Jana und ich, ein leider unschönes Erlebnis:

    Janas Hunde Jonas und Jasper (zwei sog. „Whippets„) sind beim Spazierengehen abgehauen.

    Um anderen, die irgendwann mal in einer ähnlichen Situation sind, ggf. einen Tipp zu geben, fasse ich nachfolgend die Erlebnisse zusammen.

    (Spoiler: Es gibt ein Happy-End!)

    Freitag, 20. November 2009, 16 Uhr

    Jana ist mit den Hunden spazieren bei Altbach/Deizisau.

    Kurz vor Ende waren die Hunde alleine auf dem Feld unterwegs, und hatten wohl plötzlich einen Hasen-Geruch in der Nase (obwohl kein Hase da war).

    Wie der Blitz waren sie auf und davon, zuerst über die Wiese und dann im Wald verschwunden.

    Jana hat zwei Stunden lang erfolglos gesucht und nichts gefunden. Wir haben die Suche dann zunächst abgebrochen, da es auch dunkel wurde und wir noch einen Termin hatten.

    Freitag, 20. November 2009, 22:30 Uhr

    Zurück vom Krimi-Dinner waren wir dann gemeinsam nochmals 2 Stunden im Wald und sind alles erfolglos abgelaufen.

    Hier wiederum ein Abbruch der Suche um ca. 00:00 Uhr.

    Samstag, 21. November 2009, 06:30 Uhr

    Ich bin alleine erneut in den Wald und 2 Stunden lang abseits der Wege durchs Gestrüpp gezogen, ständig die Hunde gerufen, leider ebenfalls erfolglos.

    Erneuter Abbruch der Suche.

    Samstag, 21 November 2009, 08:30 Uhr

    Zusammen mit Jana sind wir noch ein paar Wege abgelaufen, ebenfalls erfolglos.

    Unterwegs habe ich (mit dem iPhone, logisch) recherchiert was das Internet bei entlaufenem Hund so empfiehlt.

    Grob gesagt waren folgende Punkte für uns wichtig:

    • Polizei informieren (falls jemand Hunde findet/sieht).
    • Forstamt informieren (warum genau weiß ich ned).

    Das haben wir dann so gemacht.

    Beim Polizeirevier Esslingen habe ich eine nette Frau erreicht, die alles aufgenommen hat und weitergegeben hat (hoffentlich).

    Beim Forstamt ging keiner ran.

    Samstag, 21 November 2009, 09:00 Uhr

    Janas Kollegin, die Elke, kam nach einem Anruf bei ihr freundlicherweise auch vorbei zum Suchen helfen. Elke (bzw. ihre Hündin) ist bei der Rettungshundestaffel und hat auch ihre Hündin dabei gehabt.

    Wir haben nochmals die wahrscheinlichsten Stellen durchkämmt, in unmittelbarer Umgebung vom ursprünglichen Startplatz im Wald, abseits der Wege.

    Aufgeteilt in 3 Gruppen (à eine Person) sind wir losgezogen.

    Samstag, 21 November 2009, 09:30 Uhr

    Anruf von Jana bei mir, dass Elke den Hund Jonas gefunden hat. Er kam aus einem dichten Tannenwald-Abschnitt.

    Ich eile zurück zu den anderen. Auf dem Rückweg hat Jana dann noch den Jasper gefunden, er hatte sich mit dem Halsband/Flexi-Leine im Gestrüpp verfangen gehabt.

    Samstag, 21 November 2009, 10:00 Uhr

    Alle Hunde sind wieder vollzählig, beide quasi unverletzt.

    44248628

    Wir zogen dann vollständig, mit 3 Personen und 4 Hunden, zurück zum Parkplatz.

    Resümee

    • Ich bin bei meiner Suche ewig weit über Felder und durch den Wald gelaufen; was mich verwundert hat war, dass sich die Hunde dann doch relativ nahe, vielleicht 600 Meter vom Auto entfernt, aufgehalten haben.
    • Meiner Meinung nach hat es geholfen, dass wir mit zwei anderen Hunden zum Suchen waren; ggf. haben die entlaufenen Hunde auch durch die Anwesenheit von Artgenossen die Deckung aufgegeben.
    • Durchhalten und positiv denken hilft die Situation effektiv zu meistern. Heulen und jammern kann ich auch wenn wir die Hunde gefunden haben (tot oder lebendig), hilft aber beim Suchen selbst nicht weiter.

    Epilog

    Ein spannendes Erlebnis, mit nassen Socken und Schuhen, ging zum Glück positiv zu Ende.

    Welche Konsequenzen die Hundehalterin aus der Aktion zieht weiß ich noch nicht, ich hoffe gute!

  • Krimi-Dinner

    Gestern war ich mit meiner Freundin Jana beim Krimi-Dinner in Esslingen.

    Ein „Krimi-Dinner“ (auch Krimispiel genannt) ist eine Veranstaltung bei der ca 50-80 Leute in einem Speisesaal sitzen und nebenbei wird von ein paar Schauspielern ein Theaterstück aufgeführt, direkt um die Tische herum.

    44091989

    In unserem Fall war das Stück:

    Mord au Chocolat
    Ein Zartbitter DinnerKrimi mit edlem 3-Gang-Menü

    Schokoladenfabrikant Fritz von Reevenstein liegt im Sterben. Noch vor dem Ableben des Patriarchen entbrennt bei den übrigen Familienmitgliedern ein erbitterter Nachfolgestreit. Die Situation eskaliert, als ein hinterhältiger Mord geschieht. Und urplötzlich sind alle Anwesenden in eine Mordermittlung verwickelt…

    Es ging insgesamt mit Essen ca. 2-3 Stunden lang.

    Die Schauspieler spielten immer eine Weile, das Publikum wurde auch mit einbezogen (einige zuvor ausgewählte Personen spielten ab und an in ihrer zugeteilten Rolle mit). Zwischendurch wurde auch gesungen, das war witzig.

    Essen gab’s für mich als Vegetarier natürlich auch was Leckeres!

    Mein Fazit

    Positiv war:

    • Es war eine originelle Veranstaltung.
    • Das Essen war lecker.
    • Die Schauspieler warten teilweise originell.
    • Es hat Spaß gemacht.

    Negativ war:

    • (Zu) teuer: 79 Euro pro Person, Getränke extra (25 Euro bei uns für 2 Personen).
    • Mein Vegetarisches Essen wurde trotz Vorabsprache zunächst vergessen.
    • Die Kommunikation mit unseren anderen Tischnachbarn war sehr gering.

    Als Resümee ist meine Meinung, dass es schön war, aber für ein weitere solche Veranstaltung reicht meine Motivation nicht aus, dazu hätte es noch brillanter sein müssen.

  • Den service-bw-SOAP-Webdienst von PHP aus aufrufen

    Vor Kurzem waren wir in der glücklichen Lage, dass wir auf das Portal von service-bw.de programmatisch via SOAP/WSDL zugreifen durften.

    In .NET war das dank dem automatischen Proxy-Generierungs-Werkzeug von Visual Studio.NET 2008 sehr einfach.

    In PHP war es etwas trickreicher. Danke viel Ausprobieren und vor allem dank diesem Posting konnten wir es lösen.

    Um ein Bisschen was „ins Internet“ zurückzugeben, stelle ich nachfolgend zwei kurze Beispiele vor.

    Beispiel 1, Aufruf der SOAP-Funktion getLebenslageTree()

    Folgendes Beispiel ruft eine Funktion des Lebenslagen-Webdienst auf. Es wird gezeigt wie mehrere Parameter die auch komplexe Typen enthalten, korrekt übergeben werden.

    $client = new SoapClient(
        'https://www.service-bw.de/zfinder-core-ws/lebenslage?wsdl');
    
    $profilData = new stdClass();
    $profilData->ags = "0";
    $profilData->plz = "0";
    $profilData->sprache = "deu";
    $profilData->kategorienUndVerknuepfung = false;
    
    $pkey = new stdClass();
    $pkey->id = 93256;
    $pkey->mandantenId = 0;
    $pkey->sprachId = "deu";
    
    $param = new stdClass();
    $param->lebenslageKey = $pkey;
    $param->kategorieIds = array(783160, 783161);
    $param->mandantenIds = array(0);
    $param->operatorAnd = false;
    $param->profilData = $profilData;
    
    $result = $client->getLebenslageTree($param);

    Der folgende Download enthält den vollständigen Quelltext des Beispiels:

    Download Beispiel 1

    Beispiel 2, Aufruf der SOAP-Funktion getStichwoerterAndSynonymeByNamePrefix()

    In diesem Beispiel wird eine Funktion des Stichwort-Webdienst aufgerufen. Es werden erneut komplexe Parameter, inklusive Felder („Arrays“) an die Funktion übergeben.

    $client = new SoapClient(
        'https://www.service-bw.de/zfinder-core-ws/stichwort?wsdl');
    
    $searchParameters = new stdClass();
    $searchParameters->alphaBlockModus = false;
    $searchParameters->hitRestriction = false;
    $searchParameters->numberOfHits = 100;
    $searchParameters->regionIds = array(0);
    $searchParameters->mandantenIds = array(0);
    $searchParameters->sprachId = "deu";
    $searchParameters->value = "A";
    
    $profilData = new stdClass();
    $profilData->ags = "0";
    $profilData->plz = "0";
    $profilData->sprache = "deu";
    $profilData->kategorienUndVerknuepfung = false;
    
    $param = new stdClass();
    $param->searchParameters = $searchParameters;
    $param->profilData = $profilData;
    
    $result = $client->getStichwoerterAndSynonymeByNamePrefix($param);

    Der folgende Download enthält wiederum den vollständigen Quelltext des Beispiels:

    Download Beispiel 2

    Ich wünsche allen Entwicklern viel Erfolg und freue mich, falls ich ein Bisschen weiterhelfen kann! Rückmeldung wie immer willkommen 🙂

  • Vergangenheit, Gegenwart und Zukunft

    Heute habe ich festgestellt, dass ich alt, wahlweise „erwachsen“ bin:

    Der aktuelle FDP-Gesundheitsminister ist im selben Jahr wie ich geboren, 1973. Jetzt bin ich also schon im Alter für Ministerposten, WTF?!

    Außerdem bin ich jetzt älter, als mein Papa es jemals war:

    todesanzeige-guenther-keim-1978

    Das fühlt sich irgendwie seltsam an. Aber so ist’s halt.

    Ich habe einen schönen Beruf, eine tolle Freundin, eine klasse Mama, eine liebe Hündin. Das ist ja schon ne ganze Menge Tolles 🙂

    (Die Mama möge mir die Veröffentlichung der Anzeige verzeihen, aber war ja eh ein öffentliches Dokument)

    In diesem Sinne: Fröhlich weiter zu den (mindestens) nächsten 36 Jahren!

  • Ordner und Dateien mit abschließendem Leerzeichen löschen

    Via ROBOCOPY hatte ich versehentlich einen Ordner mit Leerzeichen am Ende erstellt („D:\MyFolder „). Über den Windows Explorer konnte ich diesen dann nicht mehr löschen, weil ein Leerzeichen am Ende des Namens eigentlich unzulässig ist.

    Im Microsoft-Knowledge-Base-Artikel „Entfernen von Dateien mit reservierten Namen in Windows“ steht beschrieben wie es doch geht.

    In meinem Fall war folgender Befehl hilfreich:

    rmdir „\\?\d:\MyFolder „

    Ggf. ist diese Information ja mal für Euch nützlich.

  • XCOPY/ROBOCOPY like class in C#

    During the process of moving some command scripts to a more robust solution that involved C# Script, I was in the need to replace an XCOPY call with an equivalent in C#.

    What I wanted to avoid is to simply start a CMD.EXE process and call the XCOPY command.

    Instead I looked for a class/function in .NET/C# that can serve as a replacement. Although I found some solutions, none of them worked the way I wanted them.

    Bring your own code

    So I decided to develop my own small solutions that is no rocket science code but fulfills my requirements.

    It has fewer features as XCOPY and is intended for copying folders (the original XCOPY works for both files and folders). In addition it is being designed to be used in a console environment (i.e. the operations are synchronously and blocking).

    An example call looks like:

    var options =
        new ZetaFolderXCopyOptions
            {
                FilesPattern = "*.*",
                RecurseFolders = true,
                CopyEmptyFolders = true,
                CopyHiddenAndSystemFiles = true,
                OverwriteExistingFiles = true,
                CopyOnlyIfSourceIsNewer = false,
                FoldersPattern = "*"
            }
            .AddExcludeSubStrings(
                "\\.svn\\",
                "\\_svn\\",
                "\\_Temporary\\" );
    
    var xc = new ZetaFolderXCopy();
    xc.Copy(
        sourceFolderPath,
        destinationFolderPath,
        options );

    The full code consists of a single .CS file and can be downloaded from here for free.

    Hopefully this code is of some basic usage to you, keep the feedback coming!

    Update 2015-11-25

    I’ve uploaded a greatly enhanced version which adds wildcard and Regex exclude support  as well as retry options.

    This is another step towards a native C#/.net version of robocopy.