Freitag, September 29, 2006

peterkellner.net » Published in MSDN!

peterkellner.net » Published in MSDN!

Peter Kellner hat in MSDN vier Artikel rund um das Thema ASP.NET 2.0 Member/Role Management in IIS publiziert. Der zweite Artikel enthält einen Editor zum Verwalten der User und Rollen, wenn sich die Anwendung auf einem entfernten Server befindet.

Selber habe ich eine ähnliche Anwendung geschaffen, mit welcher das Remotemanagement über einen Web Service implementiert wurde. Lokal habe ich dann einen Windows Client zur Verfügung mit dem ich die User und Rollen all meiner Applikationen bequem zentral verwalten kann.

Bei genügend Interesse, kann ich mein Konzept gerne einmal detailliert vorstellen.

Erstellt von Peter Gloor am 19:50  

Mittwoch, September 20, 2006

VRML wegen Exploit deaktivieren

Microsoft hat wieder einmal ein Problem mit einem Exploit. Ein JavaScript basierender Virus versteckt sich hinter Grafiken auf Web Seiten. Der Schädling nützt eine bisher unbekannte Schwachstelle in der vom Internet Explorer verwendeten VML Rendering Maschine von Microsoft aus, so dass es zu einem Pufferüberlauf kommt, der zur Ausführung von privilegiertem Code verwendet werden kann. Das damit verbundene Risiko wird von den Experten allgemein als hoch eingestuft.

Es wird erwartet, dass das Problem im nächsten Windows Update, d.h. um den 10. Oktober 2006, behoben wird.

Da sich mein AntiVirus Software Hersteller bisher zu diesem neusten Problem noch nicht geäussert hat, habe ich als einfache und schnelle Massnahme beschlossen, die VML Rendering Maschine zu deaktivieren, indem ich diese aus der Registrierung entferne. Dies bietet zwar keine 100%-ige Sicherheit, aber nach allem was ich zum Problem gelesen habe, ist nicht damit zu rechnen, dass diese Massnehme nicht genügen sollte.

Diese Massnahme hat natürlich auch einen Nachteil. Nachdem die VML aus der Registrierung entfernt wurde, werden Anwendungen, die VML rendern nicht mehr richtig funktionieren. Dies betrifft auch Web Seiten, die auf VML basierende grafische Elemente verwenden.

Eine Alternative wäre auch im Internet Explorer JavaScripting zu Deaktivieren. VML zu deaktivieren scheint mir zumindest in meinem Fall das kleinere Übel zu sein, zumindest da das ganze ja nur vorübergehend für ca. 3 Wochen ist.


Zum Deaktivieren der VML Rendering Maschine unter Windows XP / SP2 ist wie folgt vorzugehen:
1. Als Benutzer mit Administrator Rechten einloggen.
2. Über Start -> Ausführen -> folgenden Befehl eingeben:
regsvr32 -u "c:\Programme\Gemeinsame Dateien\Microsoft Shared\VGX\vgx.dll"
3. Eine Dialogbox, welche die Ünderung bestätigt erscheint. OK Clicken.
4. Rechner neu starten (oder zumindest erneut einloggen)


Nachdem die Datei de-regegistriert wurde, werden wie bereits gesagt, Anwendungen, die VML rendern nicht mehr richtig funktionieren.

Das Deaktivieren von vgx.dll kann durch erneute Registrierung jederzeit rückgängig gemacht werden. Dazu müssen Sie den gleichen Befehl wie oben, aber ohne den -u Parameter eingeben:
regsvr32 "c:\Programme\Gemeinsame Dateien\Microsoft Shared\VGX\vgx.dll"

P.S. Je nach Installation kann der Anfang des Dateipfades auf Ihrem System evtl anders lauten.

Nachtrag 20.9.2006: Die vorliegende Massnahme wird übrigens unter anderm mittlerweile auch von Microsoft empfohlen.

Erstellt von Peter Gloor am 11:22 | 0 Kommentare verweisen auf diesen Beitrag  

Mittwoch, September 06, 2006

Datei kann nicht geloescht werden

Als ich auf einem Windows XP /SP2 System nach einem Festplattencrash versucht habe von der alten Festplatte noch möglichst viel Daten auf die neue Festplatte zu retten, hatte ich am Schluss ein paar Dateien mit Dateinamen in der Art Unbekannt0001714.doc übrig, die ich nirgends zuordnen konnte. Es waren trotz der Endung offensichtlich keine Word Dateien. Der Inhalt liess irgendwie auf Visio Dateien schliessen.

Das Problem mit diesen Dateien war, dass ich diese (auf der neuen Festplatte) nicht mehr löschen konnte. Es kam immer eine Meldung in der Art "Unbekannt0001714.doc' kann nicht gelöscht werden. Die Datei wird von einer anderen Person bzw. einem anderen Programm verwendet".

Alle Tips und Tricks, die ich im Web gefunden habe (z.B. im Abgesicherten Modus starten oder Command Fenster zum Löschen der Daten öffnen und vor dem Löschen Explorer beenden) haben nichts genützt.

Folgendes Vorgehen hat aber geholfen:

  1. Befehlsfenster öffnen.
  2. Mit cd c:\backup\unbekannt in das Verzechnis mit den Daten wechseln.
  3. dir /x eingeben. Dies listet die Datein mit den Namen in der Kurz- und Langform aus.

Es hat sich gezeigt, dass die Dateien in der Kuzform ganz anders benannt waren. Unter Verwendung des Namens in der Kurzform konnte ich die Dateien problemlos löschen.

Es war reiner Zufall, dass ich darauf gestossen bin, schliesslich lässt die Fehlermeldung ganz anderes vermuten.

Übrigens, nehme ich an, dass man die Dateien auch über die Wiederherstellungskonsole hätte löschen können. Das wäre dann das nächste gewesen, das ich versucht hätte.

Erstellt von Peter Gloor am 11:47 | 0 Kommentare verweisen auf diesen Beitrag  

Montag, September 04, 2006

Drucken einer Windows Form (WinForm) mit C#

Nachdem ich kürzlich in C# eine TextPrinter Klasse programmiert habe, wurde ich heute gefragt, wie man ein Windows Form, oder jede andere grafische Komponente, so wie sie auf dem Bildschirm dargestellt ist, ausdrucken kann.

Hmm..., das hab ich noch nie gemacht! Im Web findet man schnell einmal Beispiele zum Ausdrucken von Text-Dokumenten, aber in der Tat, die Beispiele für den Ausdruck von grafischen Elementen sind entweder schwer zu finden oder für den Anfänger viel zu kompliziert. Um den Einstieg in die Materie zu erleichtern habe ich deshalb das nachfolgende Beispiel mit C# unter .NET 2.0 kreiert.

Im Beispiel wird eine Windows Applikation mit einem Fenster (Form1) erstellt. Auf der Maske wird ein Button (button1) platziert, der mit Print beschriftet wird und nachstehend als "Print Button" bezeichnet wird.

Zum Druckvorgang muss man folgendes wissen. Es gibt unter .NET 2.0 eine PrintDocument Klasse. Mindestens eine Instanz dieser Klasse muss dem Projekt hinzugefügt werden. Unter Visual Studio 2005 zieht man dazu aus der Toolbox einfach die Komponente PrintDocument auf die Form im Design Mode. Dies erzeugt dann die Instanz printDocument1, die im unteren Teil des Dokumentenfensters mit der Maske angezeigt wird.

Die PrintDokument Klasse hat als wichtigste Methode die Methode Print(). Mit dem Aufruf dieser Methode wird der Druckvorgang eingeleitet. Zu diesem Zweck platzieren wir den Code für den Aufruf der Print() Methode im Click Event (button1_Click) des oben erwähnten Print Buttons. Der Code dazu lautet ganz einfach printDocument1.Print();

Wird die Print() Methode von printDocument1 aufgerufen, dann wird für jede zu druckende Seite der Event printDocument1_PrintPage so oft ausgelöst, bis es nichts mehr zu drucken gibt. Was und wie ausgedruckt wird, muss jedoch der Programmierer selbst bestimmen. Den Code dazu platziert man im entsprechenden PrintPage Event (printDocument1_PrintPage).

Jetzt ist noch wichtig zu wissen, dass der Ausdruck in jedem Fall über ein Graphics Object erfolgt das mit den Event Argumenten des Print Page Events mitgeliefert wird. Normalerweise sieht der Rumpf des PrintPage Events etwa so aus:

private
void printDocument1_PrintPage(
object sender, System.Drawing.Printing.PrintPageEventArgs e) {}

In diesem Fall haben wir mit e.Graphics Zugriff auf das Graphics Objekt mit dem die Seite gedruckt wird.

Um unsere Aufgabe zu lösen, geht es also darum, die grafische Darstellung unseres Fenster auf das e.Graphics Objekt zu übertragen. Eine Möglichkeit dies zu tun besteht darin, dass wir von unserem Fenster mit der Methode DrawToBitmap, die in allen Controls zur Verfügung steht, eine Bitmap erzeugen und diese dann mit der Methode DrawImage von e.Graphics zeichnen lassen, was hiermit bedeutet, dass unsere Bitmap dabei ausgedruckt wird. Diesen Vorgang können wir mit nur drei Befehlen durchführen. Die verfügbaren Parameter helfen uns dabei die richtige Grösse zu bestimmen und unsere Bitmap auf dem Ausdruck innerhalb der Seite und mit einem Abstand von den Rändern zu platzieren.

Wäre unsere Bitmap grösser als eine Seite, dann müssten wir noch die Logik programmieren, die erforderlich ist um die Bitmap aufzuteilen und über mehrere Seiten verteilt auszudrucken. Solche Programme können dann schon recht komplex werden. An diese Stelle geht es aber nur darum an einem einfachen Beispiel aufzuzeigen, wie das Prinzip funktioniert.



Vorgehen in 7 Schritten:

1. Neue Applikation PrintDemo mit Maske Form1 erstellen

2. Aus Toolbox PrintDocument hinzufügen
-> printDocument1

3. Doppelcklick auf printDocument1
-> printDocument1_PrintPage Event Handler

4. Print Button hinzufügen und Doppelcklick
-> button1_Click

5. In button1_Click Event Code zum Aufruf von printDocument1.Print() hinzufügen.


6. printDocument1_PrintPage Event Code zum Drucken der Bitmap der aktuellen Komponente hinzufügen.

// a. Neue Bitmap mit den Abmessungen der aktuellen Komponente erstellen
Bitmap b = new Bitmap(this.Width, this.Height);

// b. Aktuelle Komponente unter Einhaltung der Seitenbegrenzungen
// des Ausdrucks in die neu erstellte Bitmap zeichnen
this.DrawToBitmap(b, e.PageBounds);

// c. Bitmap mit Abstand 15 von links und 50 von oben zeichnen (= drucken)
e.Graphics.DrawImage(b, new Point(15, 50));

7. Testen



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace PrintDemo {

public partial class Form1 : Form {

public Form1() {
InitializeComponent();
}

///
/// PrintPage Event von printDocument1.
/// Leere Vorlage wird durch Doppelclick auf Komponente
/// printDocument1 (Schritt3) automatisch erzeugt.
/// </summary>
/// <param name="sender">
/// <param name="e">
/// <remarks>
/// Wird von der Print() Methode mit jeder zu druckenden
/// Seite als Callback Methode aufgerufen.
/// </remarks>
private void printDocument1_PrintPage(
object sender, System.Drawing.Printing.PrintPageEventArgs e) {
// Schritt 6:

// Neue Bitmap mit den Abmessungen der zu druckenden
// Komponente erstellen
Bitmap b = new Bitmap(this.Width, this.Height);

// Zu druckende Komponente unter Einhaltng der
// Seitenbegrenzungen des Ausdrucks in die neu
// erstellte Bitmap zeichnen.
this.DrawToBitmap(b, e.PageBounds);

// Bitmap mit Abstand 15 von links und 50 von oben
// zeichnen, bzw. drucken (e.Graphics ist dabei das
// eigentliche Graphics Objekt, das gedruckt wird).
e.Graphics.DrawImage(b, new Point(15, 50));

}

/// <summary>
/// Click Event von Print Button (button1).
/// Schritt 4: Leere Vorlage wird durch Doppelclick
/// auf Komponente button1 automatisch erzeugt.
/// </summary>
/// <param name="sender">
/// <param name="e">
private void button1_Click(object sender, EventArgs e) {
// Schritt 5: Aufruf der Print() Methode von printDocument1.
printDocument1.Print();
}
}
}


4.9.2006 /pg


Erstellt von Peter Gloor am 20:29 | 0 Kommentare verweisen auf diesen Beitrag  

Freitag, September 01, 2006

Canon ZoomBrowser Ex nach Festplatten-Crash neu installieren

Eine Anleitung zur Neu-Installation von ZoomBrowser Ex 5.6.0c ohne Installation einer älteren Version folgt am Ende dieses Artikels.

Riesenfrust! Festplatten-Crash, und als ob das noch nicht reicht, massig Ärger bei der Wiederherstellung, bzw. der Neu-Installation fon Canon ZoomBrowser Ex.

Nun, es ist schon ein paar Jahre her, als ich stolzer Besitzer einer Canon Digital Ixus 300 Kamera wurde. Im Lieferumfang enthalten, waren nebst den erforderlichen Treibern und weiterer Software, die Software ZoomBrowser Ex 2.6 und PhotoStitch 3.1.

Inzwischen habe ich meinen Rechner von Windows ME auf Windows XP migriert und die Canon Software auf den neusten Stand gebracht. Unter anderem waren dafür auch ein paar Aktionen, wie das Konvertieren der Datenbank und das Enfernen von Daten aus den Bildern notwendig.

Nach dem Festplatten-Crash ist es mir gelungen die Daten (Bilder) aus Sicherungen und alten CD's einigermassen wiederherzustellen. Es war aber unmöglich, die Programme ohne neu Installation wieder herzustellen.

Da möglichst aktuelle Verionen der Programme installieren wollte, habe ich auf der Canon Software Download Site nach den aktuellsten Programm-Versionen für die Digital IXUS 300 unter Windows XP gesucht. Das Durchhangeln zwischen den Seiten habe ich als eher mühsam empfunden und es hat längere Zeit gedauert, bis ich die für meine Zwecke geeignete Software zusammengstellt und heruntergeladen hatte. Im Nachhinein, habe ich dann noch festgestellt, dass ich nur vier der insgesamt 7 heruntergeladenen Dateien brauchte.

Leider waren unter der angebotenen Software keine Voll-Versionen von ZoomBrowser Ex 5.6 und PhotoStitch 3.1 zu finden. Oder etwa doch?

Es hat sich herausgestellt, dass es sich anscheinend um Installationsdateien handelt, die alle erforderlichen Dateien enthalten und problemlos für eine komplette Neu-Installation verwendet werden können, wenn ein kleiner Trick angewendet wird.

Der Trick heisst, vor der Installation in der Windows Registry folgende Einträge mit leerenSchlüsseln erstellen:
HKEY_LOCAL_MACHINE\SOFTWARE\Canon\ZoomBrowser Ex
HKEY_LOCAL_MACHINE\SOFTWARE\Canon\PhotoStitch

Hier die genaue Anleitung (gemäss Stand der Dateien am 1.9.2006).
Neu-Installation von Canon ZoomBrowser Ex 5.6 und PhotoStitch 3.1
=================================================================

Folgende Dateien werden benötigt (Download von Canon Web Site):
--------------------------------------------------------------

1. Canon Digitalkamera USB WIA Treiber (3.9.0)
Deutsch, selbstextrahierendes ZIP Archiv, k1a8_gex.exe

2. RemoteCapture (2.7.5)
Deutsch, selbstextrahierende Installationsdatei, k5c02dex.exe

Bitte beachten: PowerShot A80 und IXUS i werden in dieser Version von RemoteCapture nicht unterstützt.

3. ZoomBrowser EX Updater (DE) (5.6.0c)
Deutsch, selbstextrahierendes ZIP Archiv, K6805DEx.exe

4. PhotoStitch Updater (DE) (3.1.17a)
Deutsch, selbstextrahierendes ZIP Archiv, K6401dex.exe

So wird die Installation gemacht:
--------------------------------
1. Installation USB WIA Treiber

1.1 k1a8_gex.exe starten und Dateien in einen temporären Ordner extrahieren.
1.2 Im extrahierten Ordner ins Unterverzeichnis GERMAN wechseln.
1.3 Setup.exe starten.
1.4 Nach erfolgreicher Installation System neu starten.

2. Installation RemoteCapture (2.7.5)

2.1 k5c02dex.exe starten und Instruktionen in den Dialogen befolgen.
2.2 Nach erfolgreicher Installation System neu starten.


3. Neuinstallation ZoomBrowser EX 5.6.0c (kein Update)

3.1 In Registry Schlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Canon\ZoomBrowser Ex" hinzufügen.
3.2 K6805DEx.exe starten und Dateien in einen temporären Ordner extrahieren.
3.3 Im extrahierten Ordner ins Unterverzeichnis K6805DEx wechseln.
3.4 ZB560UPD_G.exe starten und Instruktionen in den Dialogen befolgen.
3.5 Nach erfolgreicher Installation System neu starten.


4. Neuinstallation PhotoStitch 3.1.17a (kein Update)

4.1 In Registry Schlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Canon\PhotoStitch" hinzufügen.
4.2 K6401dex.exe starten und Dateien in einen temporären Ordner extrahieren.
4.3 Im extrahierten Ordner ins Unterverzeichnis K6401dex wechseln.
4.4 PST3117UPD_G.exe starten und Instruktionen in den Dialogen befolgen.
4.5 Nach erfolgreicher Installation System neu starten.

Wichtige Hinweise:
-----------------
1. Andere Dateien als oben aufgeführt werden bei einer Neuinstallation nicht benötigt.
2. USB WIA Treiber und Remote Capture sind Basis Installationen (keine Updaters)
3. ZoomBrowser und PhotoStitch sind Updater, die nach einer bereits installierten Version verlangen.
4. Es handelt sich aber bei ZoomBrowser und PhotoStitch um volle Installationspakete, die korrekt und vollständig installiert werden, wenn entsprechende Registry Einträge gefunden werden.
5. Das beschriebene Verfahren gilt nur für Windows/XP SP2. Vermutlich läuft es auch unter SP1 oder Windows 2000.
6. Mit diesem Verfahren werden keine Datenbanken etc. aktualisiert. Bei älteren Versionen muss zuerst eine alte Version von ZoomBrowser Ex installiert werden, damit eine ggf. vorhandene Datenbank konvertiert werden kann.

Wie immer, ohne Gewähr!

Erstellt von Peter Gloor am 16:07 | 0 Kommentare verweisen auf diesen Beitrag