„Wer nichts zu verbergen hat, hat auch nichts zu befürchten“

Lesen und verinnerlichen:

„Wer nichts zu verbergen hat, hat auch nichts zu befürchten“

XiongShui kommentiert diesen Telepolis-Artikel treffend wie folgt:

Wer auf diesen Satz hin nicht sofort demjenigen, der ihn ausspricht, eine schallende Ohrfeige verpasst, hat auch nichts besseres verdient.

Nur leider ist es so, daß 90% der Menschen der Meinung sind, dieser Satz habe eine Berechtigung im Zusammenhang mit der Aushöhlung ihrer Rechte. Man sollte diesen Menschen Max Frischs „Biedermann und die Brandstifter“ um die Ohren hauen, damit sie endlich aufwachen. Zu der Zeit als dieses Buch geschrieben wurde, stand auch schon mal so eine Aushöhlung der Grundrechte an. Damals ging unisono ein Schrei durch die ganze Presse. Heute? Hört man mal ein leises Murmeln.

Unsere Demokratie scheint schon reichlich in die Jahre gekommen, sonst würden wir sie mehr schätzen…

Seid sensibilisiert! Nicht dass ich sofort was dagegen machen könnte, aber ich bin wachsam und irgendwann wird sich mal die Gelegenheit bieten. Ganz sicher.

Windows-Tipp: Ersetzen von Dateien mit „Nein, alle“ bestÄtigen, beim Kopieren von Dateien im Windows-Explorer

Wenn Ihr mehrere Dateien/Ordner mit dem Windows-Explorer kopieren wolle und eine Datei/ein Ordner bereits vorhanden ist, kommt folgende Meldung:

Was mir da immer gefehlt hat war eine „Nein, alle„-Schaltfläche, die alle Dateien überspringt die schon vorhanden sind und nicht mehr nachfragt.

Und tatsächlich, es ist ein Mechanismus eingebaut der das ermöglicht:

Wenn Ihr die Umschalttaste gedrückt haltet während Ihr mit der Maus auf die „Nein“-Schaltfläche klickt, dann entspricht das einem „Nein, alle“.

Ein paar XSLT-Snippets

Hauptsächlich für mich selbst, nachfolgend eine wachsende Sammlung von XSLT-Code-Snippets:

1.) Ein XML-Dokument 1:1 an die Ausgabe weiterreichen:

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output
        method="xml"
        indent="yes" />
    
    <xsl:template match="*">
        <xsl:element name="{name()}">
    
            <!-- all attributes. -->
            <xsl:for-each select="@*">
                <xsl:attribute name="{name()}">
                    <xsl:value-of select="current()" />
                </xsl:attribute>
            </xsl:for-each>

            <!-- recurse. -->
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

2.) Eine verschachtelte Struktur in eine flache Struktur umwandeln

Antwort auf meine Frage in einer Newsgroup dazu.

Die Sammlung wird wachsen.

Chondromatose, anyone?

(Hinweis zu Beginn: diesen Artikel schreibe ich primär um „Gleichgesinnte“ zu finden, Erfahrungen auszutauschen und neue Erkenntnisse zu gewinnen. In Deutsch heißt die Erkrankung „Synoviale Chondromatose„, in Englisch „Synovial chondromatosis„)

(Translate this page to english)

Inhaltsverzeichnis

Nach oben

Meine „Geschichte“, 1999-2003

Es fing so 1999 an (ich war damals 26): Meine rechte Schulter tat weh, beim Bewegen oder drauflegen oder Ähnlichem. Ich bin daraufhin zum Arzt gegangen, er hat Röntgenbilder gemacht, was von „Entzündung“ gesprochen, mir ein Mittel gegen Entzündung gegeben, das war’s dann.

Weiterlesen

Kleines Caspol-Tool

Ggf. könnt Ihr dieses kleine Tool von uns mal gebrauchen:

zetacaspol.exe, 150 kB

zetacaspol.exe

Das Tool dient dem automatischen anpassen von .NET-Sicherheitsrichtlinen indem es das caspol.exe-Hilfsprogramm von Microsoft aufruft.

Szenario/Hintergrund:

.NET-Windows-Forms-Anwendungen die auf einem Netzlaufwerk liegen erhalten standardmäßig weniger Rechte zum Ausführen.

Mit Hilfe von zetacaspol.exe könnt Ihr auf einfache Weise dafür sorgen, dass eine Anwendung „FullTrust“-Rechte erhält:

  1. zetacaspol.exe in den Netzwerk-Ordner kopieren in dem die zu berechtigende Anwendung liegt (z.B. „\\myserver\someshare\myapplication\bin“)
  2. Diesen Ordner in „Lokales Intranet“-Zone oder „Vertrauenswürdige Sites“-Zone hinzufügen
  3. zetacaspol.exe einmal aufrufen

zetacaspol.exe hat selbst keine Benutzeroberfläche und schreibt schlicht eine „zetacaspol.log“-Datei mit den ausgeführten Befehlen.

Es arbeitet mit den 32-bit- und 64-bit-Versionen des .NET Framework von Version 1.1. bis zur bis dato neuesten Version 3.5 zusammen.

Vorsicht bei „Debug.Assert“-Aufrufen in ASP.NET (2.0)-Webanwendungen!

Über vier Manntage hat mich insgesamt das folgende (in meinen Augen falsche) Verhalten von ASP.NET gekostet.

Beschreibung

  • Eine ASP.NET 2.0-Webanwendung läuft in der Testumgebung ganz normal und auch im Echtbetrieb.
  • Zu nicht-vorhersehbaren Zeiten „hängt“ die Anwendung auf einmal. D.h. die Anwendung reagiert für den Benutzer einfach nicht und der Browser lädt ewig.
  • Wenn ich dann den entsprechenden „w3wp.exe“ kille (ich habe extra einen AppPool nur für die eine Webanwendung gemacht), dann wird sofort automatisch ein neuer w3wp.exe gestartet und die Anwendung läuft wieder normal.

Ursache

Ein Aufruf von Debug.Assert in einer von der Webanwendung verwendeten DLL hat den Prozess zum Hängen gebracht.

  • Debug.Assert direkt in einer
    Webanwendung ausgeführt hält den „w3wp.exe“ nicht an, sondern wird
    schlicht ignoriert.
  • Debug.Assert indirekt
    in einer DLL, die von der Webanwendung verwendet wird, hält den
    w3wp.exe an und kann nur durch killen des „w3wp.exe“ beendet werden.

Lösung

Als schnellen Workaround habe ich jetzt alle Debug.Assert-Aufrufe in der DLL auskommentiert. Natürlich könnt Ihr auch schlicht alles im Release-Modus kompilieren, das ist aber in meinem Fall nicht nötig gewesen (keine Performance-Verbesserungen).

Klettern im Frankenjura

Am Wochenende waren Chris, Gerd und Uwe auf den Spuren Wolfgang Güllichs klettern im Frankenjura.


Klettern im Frankenjura (Uwe in einer VII-) – Klick für Bildergalerie

In der Bildergalerie könnt Ihr einige Bilder davon anschauen.

Hat uns glaube ich allen sehr gut gefallen! Guter Fels, so wie auf der Schwäbischen Alb und relativ schnell per Auto erreichbar.

Hier gibt’s ein Video des Gasthof-Zimmers in dem ich übernachtet habe. 27 Euro die Nacht inklusive Frühstück :-).

Den Microsoft Scripting Host in C# verwenden

Nachfolgend ein paar Anmerkungen zum den Erlebnissen und Erkenntnissen die ich beim Einbinden des Microsoft Scripting Host in eine C#-Windows Forms-Anwendung hatte.

Ressourcen

Zunächst sind folgende Ressourcen hilfreich:

  • Das Dr. Dobb’s Journal hat einige Artikel dazu veröffentlicht. Fragmente dazu stehen noch im Netz und sind bei Google zu finden.
  • Das Weblog von Eric Lippert enthält gute Infos zum Scripting Host im Allgemeinen.
  • Die Usenet-/Google-Group „microsoft.public.scripting.hosting“ enthält ebenfalls gute Infos.
  • Die eigentliche Schnittstellen-Definition ist z.B. im Platform-SDK-Ordner „c:\Programme\Microsoft SDK\Include\ActivSP.idl“ (so heißt er bei mir) zu finden.

Fehlermeldung „Klasse unterstützt keine Automatisierung“

Diese Fehlermeldung habe ich erhalten, als ich eigene C#-Klassen via IActiveScript.AddNamedItem hinzufügen wollte und diese Klassen nicht public waren oder nicht das ComVisible( true )-Attribut gesetzt hatten.

Als einfache Lösung also einfach schauen, dass die Klassen (inklusive aller Basisklassen) ComVisible( true ) und public sind.

Fehlermeldung „FatalExecutionEngineError“

FatalExecutionEngineError was detected
Message: Die Laufzeit hat einen schwerwiegenden Fehler entdeckt. Fehleradresse: „0x7a0b2d09“ in Thread „0x29c“. Fehlercode: 0xc0000005. Bei diesem Fehler könnte es sich um ein Problem in der CLR oder in den unsicheren oder nicht verifizierbaren Teilen des Benutzercodes handeln. Übliche Ursachen dieses Bugs sind Marshallerfehler für COM-Interop oder PInvoke, die den Stapel beschädigen können.

Diese Fehlermeldung habe ich erhalten, weil ich einen falschen Parameter für die Funktion IActiveScript.AddNamedItem übergeben hatte.

Und zwar habe ich das Flag „SCRIPTITEM_ISSOURCE“ angegeben. Als ich das Flag weggelassen habe, lief alles korrekt.

Dieses Flag gibt laut MSDN-Dokumentation an, dass das hinzugefügte Objekt als Senke für Skript-Ereignisse agieren soll. Scheinbar geht das nicht oder zumindest nicht so wie ich es gedacht habe.

Macht aber nix, brauche ich in meinem Fall nicht. Deshalb habe ich einfach das Flag weggelassen und gut war’s.

Generische Typen in COM verwenden

Klassen die direkt von generischen Basisklassen ableiten sind nicht in COM (also in Skripten im Windows Scripting Host) sichtbar. Es kommen dann seltsame Fehler wie „Method not found“ beim Aufruf von Methoden solcher Klassen.

Deshalb Klassen die von COM aus ansprechbar sein sollen immer von nicht-generischen Basisklassen ableiten.

Was bei mir funktioniert hat ist, wenn solche Klassen generische Schnittstellen implementieren (z.B. IComparable<T>). Die Klasse selbst ist also nicht generisch, nur eine implementierte Schnittstelle. Solch eine Klasse konnte ich erfolgreich von COM aus ansprechen.

Hier einige weiterführende Hinweise zu dem Thema:

  • Meine ursprüngliche Anfrage in den MSDN-Foren
  • „Interoperating Using Generic Types“ in der MSDN Library
  • „COM Interop with Whidbey Generics?“, Artikel von 2004 von Sam Gentile in seinem Weblog

Schnittstellendefinition

Weil ich lange gesucht habe, hier der Download der Schnittstellendefinitionen für folgende Schnittstellen und Enumerationen:

  • IActiveScript
  • IActiveScriptParse
  • IActiveScriptSite
  • IActiveScriptError
  • SCRIPTSTATE
  • SCRIPTTHREADSTATE
  • SCRIPTITEMFLAGS
  • SCRIPTINFOFLAGS