Internet Explorer 8

Eine Kleinigkeit vereinfacht das Leben mit dem aktuellen Internet-Explorer enorm:
Wenn man mit dem Mausrad auf einen Link klickt, geht dieser garantiert in einem neuen Tab im gleichen Fenster auf. Klickt man mit dem Mausrad auf einen Tab, es muss nicht mal der aktive Tab sein, so geht der Tab ohne Nachfrage zu.

Gefunden habe ich den Tipp im Blog von Tom Wendel.

KategorienAllgemein Tags:

ReSharper und Probleme mit Codevervollständigung

Seit geraumer Zeit zeigte die Code-Vervollständigung unter C# folgendes Bild:
Codevervollständigung für IF

Dabei sind viele unnütze if-Kombination zu sehen, welche sich auf vorhandene Namespace-Definitionen beziehen. Nach längerer Suche konnte ich den Verursacher ausmachen. Ich verwende in den betroffenen Projekten VistaDB. In der Version 3.5 build 84 wurde die Library mittels Obfuscation unleserlich gemacht. Leider hat genau diese Verschlüsselung der Bibliothek den Effekt, dass jedes nicht öffentliche Objekt in einen eigenen neuen Namespace gelegt wird, hier also beispielsweise:

if
If
IF
@if

Diese Namespace-Definitionen bietet der Resharper per Code-Vervollständigung. Leider steht sowohl seitens VistaDB als auch seitens JetBrains eine Lösung noch aus.

Foxit-Reader benötigt nach Update Administrator Rechte (UAC)

2. Juli 2009 3 Kommentare

Nach dem letzten Update vom PDF-Betrachter Foxit-Reader kam bei mir beim Öffnen von Foxit-Reader oder eines PDF’s immer der UAC von Windows Vista. Diese forderte mich auch, dem Programm Administrator-Rechte einzuräumen. Das war nicht nur nervig, aus Sicherheitsgründen kann das ja nicht Sinn der Sache sein.

Ein Forumseintrag beim Hersteller brachte mich dann auf die richtige Spur. Man öffnet die Eigenschaften der Verknüpfung und wählt auf dem Karteireiter Kompatibilität den Punkt Einstellungen für alle Benutzer anzeigen. Im folgenden Dialog:

Foxit-Reader Eigenschaften
sieht man den Hacken, welcher vermutlich durch das Update gesetzt wurde. Entfernt man diesen, läuft wieder alles wie gewünscht.

KategorienPDF Tags: ,

Installation .NET 3.5 auf Virtuellem Server

1. Juli 2009 1 Kommentar

Bei der Installation vom SQL-Server 2008 und dem dafür notwendigen .NET Framework 3.5 hatte ich auf einem virtuellen Windows 2003 Webserver unerwartete Problem. Keine der Installation funktionierte, obwohl der Server zuvor frisch initialisiert wurde.
Nach einiger Suche bin ich dann doch noch in einem anderen Blog fündig geworden.

Die Probleme treten in der Kombination Windows Server 2003 x64 SP2 und Virtuozzo scheinbar reproduzierbar auf. Der Installer des .NET Frameworks schließt mit Fehlern der Art

XPSEPSC x64 Installer: [2] Error code 1603
 for this component means "Fatal error during installation."

ab. Die Aktualisierung vom Windows-Installer oder das Setup der Powershell melden Probleme beim Cryptographic-Dienst.

Geholfen hat letztendlich:

  • das Starten des Printer Spooler-Dienstes
  • das Umbennen des System32\Catroot2-Verzeichnises nach dem Neustart des Viruozzo-Panels

Danach liefen alle Installation ohne Probleme.

Aber: So ganz sicher, damit eine langfristig sinnvolle Lösung gefunden zu haben, bin ich mir nicht. 1&1 schreibt dazu in der Hilfe sinngemäß, dass von der Installation von Hotfixes und Windows Updates abzusehen sei. Grund können Versionsprobleme im Zusammenspiel mit Aktualisierungen von Virtuozzo sein.

Evtl. habe ich so nur einen Weg gefunden, die Absicherung von Virtuozzo zur Verhinderung von Windows-Updates zu umgehen. Mir war das auf lange Sicht für ein Produktivsystem zu riskant.

KategorienAllgemein, Microsoft .NET Tags:

Meine Top-3-Entwickler-Tools

Zur Zeit findet auf der MSDN ein Gewinnspiel statt. Darin wird man aufgefordert, einen Beitrag über seine 3 besten Entwicklungstools zu erstellen. Hier kommt meine Liste:

1. JetBrains ReSharper
Der ungeschlagene Favorit ist der ReSharper. Das Tool bietet einmal die Hervorhebung der aktuellen Zeile im Source (klingt trivial, ist mir aber wichtig). Weiterhin prüft und korrigiert es die Groß/Kleinschreibung, was den Source lesbarer macht. Es hat zudem unheimlich mächtige Navigationsfeatures (in Ableitungen springen…) und bietet eine Funktion, um alle Aufrufe einer Funktion/Property/Klasse einfach zu finden.

2. SQL Server Management Studio
Das Management-Studio ist die Software, wenn eine Datenbank für den SQL-Server administriert wird. Was das Tool so wertvoll macht, ist die unheimliche Geschwindkeit, mit der Datenbanken auch übers Web administriert werden können.

3. .NET Reflector
Wenn man unerklärlichen Problemen auf die Spur kommen möchte, oder Warnung nicht versteht, hilft manchmal der Blick in den Reflektor. Damit kann man die wirkliche Umsetzung des Kompilats nachvollziehen und auch ohne Source gelieferte Anwendungen teilweise einfach nachvollziehen.

KategorienMicrosoft .NET, Toolbox Tags:

Ghostscript Druckertreiber installieren

16. April 2009 Keine Kommentare

Hier zeige ich die Installation des Druckertreibers, welcher mit Ghostscript ausgeliefert wird. Dieser Druckertreiber ist beispielsweise für den Einsatz mit WordToPDF Pro hervorragend geeignet. Er bietet unter anderem randlosen Druck und viele Papierformate. Die Installation wird unter Windows Vista gezeigt, funktioniert aber auch unter Windows XP vergleichbar.

Drucker hinzufügen
Zum Starten des Vorgangs muss ein neuer Drucker hinzugefügt werden.

lokalen Drucker hinzufügen
In diesem Falle ist lokaler Drucker eine sinnvolle Auswahl.

Drucker Anschluss wählen
Als Anschluss sollte FILE eingestellt werden. Wird dieser Drucker dann verwendet, fragt Windows nach einem Dateinamen.

Datenträger für Treiber wählen
Der Druckertreiber muss über die Option Datenträger bezogen werden.

Pfad für Druckertreiber einstellen
Der Treiber selbst ist im lib-Verzeichnis von Ghostscript zu finden.

Abschluss Druckerinstallation

Druckerinstallation fertigstellen
Und damit ist die Installation auch schon abgeschlossen und ein leistungsfähiger Postscript-Treiber wurde installiert.

Registry-Zugriffe bei Windows 64Bit für 32Bit Anwendungen

29. März 2009 Keine Kommentare

Windows 64 Bit setzt sich in Zeiten fallender RAM-Preise immer mehr durch, als Vista64. Bei dem Zugriff auf die Registry stolpert man dabei aber über ungeahnte Probleme.

32Bit Programme legen Ihre Einträge nämlich nicht in der normalen Registry ab, sondern im Unterschlüssel Wow6432Node (wird von Windows umgeleitet):

Auszug aus der Registry unter Vista64

Was bedeutet das für eigene Programme:
Möchte man von einem 64-Bit Programm aus auf Einstellungen eines 32-Bit Programms zugreifen, ist der Unterschlüssel Wow6432Node zu öffnen. Will man von einem 32-Bit Programm Einstellungen eines 64-Bit Programms auslesen, so steht man vor einem Problem. Will man auf die 64-Bit Schlüssel zugreifen, so muss man die Registry mit speziellen Parametern öffnen. Für Delphi findet man eine Lösung in Delphi-PRAXIS. Für .NET ist die Sache erstaunlicherweise komplizierter.
kick it on dotnet-kicks.de

Zwischenablage zwischen PCs synchronisieren

13. März 2009 Keine Kommentare

Wer immer wieder auf 2 Computern gleichzeitig arbeitet, vermisst evtl. auch die einfache Übertragung der Zwischenablage zwischen diesen PCs. Ich habe dafür das Tool Ditto clipboard manager entdeckt, was meiner Meinung nach eine ideale Möglichkeit bietet, die Zwischenablage aufzubohren.

Ditto kann unter SourceForge direkt herunter geladen werden. Es handelt sich dabei um ein Archiv, welches ich direkt in meine Eigenen Dateien entpackt habe, da eine Datenbank im Programmverzeichnis von Ditto schreibbar sein muss. Nach dem Start erscheint das Tool im Tray und kann in den Eigenschaften auch auf Deutsch umgestellt werden.

Zur Grundfunktion: Ditto überwacht nach dem Start automatisch die Zwischenablage und sichert diese auch automatisch in einer Datenbank (letzte 500 Einträge, letzte 5 Tage). Systemweit wird der Hotkey Strg + ö registriert. Man kann also etwas in die Zwischenablage nehmen, irgendwo hin wechseln, Strg + ö drücken und beispielsweise den vorletzten Eintrag einfügen.

Standardmäßig werden nur einige Text-Typen überwacht, dieses kann man aber in den Einstellungen von Ditto unter Unterstützte Typen einstellen. Sinnvoll ist dazu, wenn ein zu überwachender Inhalt bereits in der Zwischenablage ist, dann ist der Typ direkt wählbar:

Formate der Zwischenablage

Interessant wird es auf der Konfigurationsseite Freunde:

Konfiguration Freunde

Soll der betreffende PC Zwischenablage-Inhalte empfangen können, so muss die Option Empfang von Ausschnitten deaktivieren entfernt werden! Dann muss im unteren Abschnitt der PC, an den Zwischenablagen-Inhalt einzeln oder permanent übertragen werden, konfiguriert werden:

Hinzufügen eines Freund-PCs

Fertig: Ist alles korrekt eingestellt, überträgt ein PC seine aufgefangenen Inhalt der Zwischenablage automatisch an eine weitere Instanz von Ditto im Netzwerk. Das ganze macht das Übertragen von Komponenten im Designer fast zum Kinderspiel…

KategorienToolbox Tags: ,

Datumsfelder in Word

Auf ein interessantes Problem machte mich ein Kunde aufmerksam. Wenn man in ein Word-Dokument ein Datums-Feld einfügt, so wird normalerweise der Feldtyp DATE verwendet. Das ist kein Problem, wenn das Dokument quasi sofort verwendet bzw. gedruckt oder in ein PDF umgewandelt wird.

Möchte man aber im Nachhinein alte Worddokumente archivieren und darum in PDF umwandeln, steht man vor dem Problem, dass Word beim Öffnen des Dokuments das Datum auf den aktuellen Tag hin aktualisiert. Eine Abhilfe lässt sich schaffen, wenn man alle DATE-Felder durch SAVEDATE oder CREATEDATE-Felder austauscht.

In WordToPDF Pro habe ich darum Parameter eingeführt, womit WordToPDF Pro diese Ersetzungen durchführt:

-datereplace:create
-datereplace:save
-datereplace:print

Da das gleich Problem auch bei TIME-Felder auftritt (diese können ebenfalls auf Datumausgabe hin formatiert werden), wurde das selbe Konzept auch noch mit timereplace eingeführt.

KategorienWordToPDF Tags: , ,

Master Detail mit List<>

Möchte man Listen (System.Collection.Generic.List<>) an Comboboxen mittels einer Master-Detail-Beziehung anbinden, so bietet sich die hier dargestellte Vorgehensweise an.

Code der Listen:

    public class Detail
    {
        public String Caption { get; set; }
        public int Id { get; set; }
 
        public Detail(string caption)
        {
            Caption = caption;
        }
    }
 
    public class DetailList: List<Detail>
    {
        public String DetailListCaption { get; set; }
 
        public DetailList(string masterCaption)
        {
            DetailListCaption = masterCaption;
        }
    }
 
    public class Master: List<DetailList>
    { }

Zur Anwendung wird die Liste bespielhaft befüllt:

    private Master master = new Master();
...
    master.Add(new DetailList("Cap Master 1"));
    master.Add(new DetailList("Cap Master 2"));
 
    master[0].Add(new Detail("Cap Detail 1.1"));
    master[0].Add(new Detail("Cap Detail 1.2"));
    master[1].Add(new Detail("Cap Detail 2.1"));
    master[1].Add(new Detail("Cap Detail 2.2"));

Nun werden noch zwei BindingSource-Komponenten erzeugt und initialisiert:

    masterBindingSource = new BindingSource {DataSource = typeof (Master)};
    comboBox1.DataSource = masterBindingSource;
    comboBox1.DisplayMember = "DetailListCaption";
 
    detailBindingSource = new BindingSource {DataSource = typeof (DetailList)};
    comboBox2.DataSource = detailBindingSource;
    comboBox2.DisplayMember = "Caption";
 
    masterBindingSource.CurrentChanged += masterBindingSource_CurrentChanged;
...
    private void masterBindingSource_CurrentChanged(object sender, EventArgs e)
    {
        detailBindingSource.DataSource = masterBindingSource.Current;
    }

Wichtig ist dann nur noch die Initialisierung der Datasource mit einem konkreten Wert:

    masterBindingSource.DataSource = master;
KategorienMicrosoft .NET Tags: ,