UPDATE Statement für die Tabelle Upgrade eines MSI-Projektes

Ich habe gerade Stunden verbracht ein VBS-Skript zu schreiben, dass ein Microsoft Installer Projekt anpasst. Aufgabe war einige bestehende Einträge in der Tabelle Upgrade zu ändern. Es sollten nur die Wert in den Spalten VersionMin und VersionMax angepasst werden.

Ein schönes UPDATE-Statement war schnell erzeugt. Aber es schlug immer fehl mit:
PostBuild.vbs(28, 1) Msi API Error: OpenView,Sql  😕

Nach längerem Nachdenken, Suchen und Analyse mit Orca, stellte ich fest, dass die Spalten UpgradeCode, VersionMin, VersionMax, Language, Attributes alle den Primary-Key bilden.

Nun wird sich mancher Fragen: Na und?!?!

Nun die MSI Dokumentation sagt zu UPDATE-Statements in MSI Dateien:
❗ UPDATE queries only work on nonprimary key columns!

Also doch alle Records einlesen, löschen und neu schreiben…

SIGNCODE ausführen ohne Kennworteingabe

Da unsere Programm demnächst auch für Vista zertifiziert werden sollen, müssen alle unsere Executables nun digital signiert werden.

Soweit OK. Nur bei normaler Verwendung von SIGNCODE wird immer ein Kennwort für das Zertifikat abgefragt. Etwas lästig, wenn man automatische Build Prozesse hat, die hunderte von Dateien signieren müssen. Da es keinen Befehlszeilenschalter für das Kennwort gibt dachte ich schon ein spezielles Programm schreiben zu müssen, was den Dialog entsprechend ausfüllt. Aber Google sei Dank!

Eine erste mühsame Suche brachte mich auf diesen Beitrag von Rob MacFadyen. Zusammengefasst steht dort: Zertifikat importieren und aus dem eigenen Zertifikats Speicher signieren ohne lästige Kennwortabfrage.

Zum Importieren wird dort das Tool KEYIMPRT.EXE angegeben, und das ist nun beim Besten Willen auf den MS Seiten (auch unter dem entsprechenden Link) nicht mehr zu finden.

Nach einigen Suchen bin ich darauf gestoßen, dass dieses Tool durch PVKIMPRT.EXE ersetzt wurde, und dieses bei MS hier heruntergeladen werden kann.

Nun der Rest geht wie gehabt, einfach
signcode.exe -s my -cn „Dein_Zertifikat_CN“ -t http://timestamp.verisign.com/scripts/timstamp.dll „Deine_zu_signierende.EXE“
ausführen und das war es schon!

Keine lästige Kennwortabfrage mehr und schon steht dem automatischen signieren nichts mehr im Wege.

Achtung: Das Importieren in den internen Zertifikats-Speicher schützt nicht vor Zertifikats-Diebstahl! Der Zugang zu diesen Zertifikaten sollte also schon so geschützt und eingeschränkt wie möglich erfolgen. 

ATI Radeon 200M als Bremse in Vista

R40-T5500 CinosoJetzt bin ich doch etwas von meinem kleinen Laptop-Flitzer enttäuscht.
Samsung R40-Cinoso, mit Core 2 Duo T5500, 1GB Ram, 100GB Festplatte, ATI Radeon 200M

Ein Geschoss, so kam es mir jedenfalls vor. Jedenfalls etwas, was man sich auch leisten kann. Der Vista-Leistungsindex hat mich aber etwas ernüchtert. Gerade die oftmals gepriesene ATI Radeon 200M ist hier die Bremse, so der Vista Leistungsindex.

Vista Leistungsindex im Detail:
Prozessor: 4,7
Arbeitsspeicher: 3,5
Grafik (Desktop Aero): 2,3
Grafik (Spiele): 3,0
Festplatte: 4,6

Gesamtnote: 2,3 (als niedrigster Wert aus allen Bereichen)

Ich schiebe das mit der 2,3 mal auf den Beta-Treiber. Vielleicht liefert der neue finale Treiber dann doch etwas bessere Werte.

Allerdings ist diese 2,3 nur eine gefühlte Langsamkeit. Der Laptop ist flink leise, der Lüfter springt kaum an, und selbst im herunter getakteten Silentmode arbeitet er perfekt.

PS: Die 1GB waren mir unter XP schon etwas knapp. Ich habe deshalb vor, in absehbarer Zeit, einen der 512KB Riegel gegen einen 1GB Riegel auszutauschen. Dann wird aus dem 1GB 1,5GB Hauptspeicher. Ob das noch mal etwas Speed bringt ;-), zumindest wird es VS2005 beflügeln.

Vista ist ein nettes Spielzeug das ich nicht mehr weggeben will

Mein Vista Desktop

Die ersten Gehversuche in meiner Firma haben mich verleitet, meinen Laptop (Samsung R40-Cinoso, Core 2 Duo T5500 mit 1GB Hauptspeicher) platt zu machen. Nun läuft Vista Ultimate drauf. Zwar nur mit dem ATI Radeon 200M Beta Treiber, aber er läuft bisher stabil.

Alle anderen Treiber sind bereits final. Sogar für den eingebauten WLAN Adapter habe ich sofort einen neueren Treiber gefunden. Der alte hat die Empfangsstärke immer als ausgezeichnet angegeben was er definitiv nicht war. Der neue Synapsis Touchpad Treiber tut auch perfekt seinen Dienst.
Leider ist Samsung noch nicht so weit und kann Magic Keyboard für Vista liefern. Ich habe die XP Version mit einigen Tricks mal gerade so zum laufen gebracht.

Erstes Fazit. Man kann sich an Vista komplett gewöhnen.

  • Besonders der neue Explorer ist einfach um ein vielfaches besser als der XP-Explorer. Durch die neue Navigationsleiste wird Verzeichniswechsel zum Kinderspiel.
  • Die Suche im Startmenü erlaubt blitzschnelle Dokumenten und Programmauswahl.
  • Auch ansonsten macht Aero einen sehr angenehmen Eindruck. Keineswegs verspielt sonder eher natürlich erscheint einem dieser neue Look & Feel.
  • Malus: VS2005 muss letzten Endes im Admin-Modus gefahren werden. Das erzwingt aber immer auch Bestätigung das ich als Anwender das auch will. An dieser Stelle etwas lästig.
  • Vista läuft auf diesem Laptop viel runder und gleichmässiger als vorher auf XP. Gut er ist auch nicht schwach auf der Brust, aber der erste Eindruck ist einfach um Klassen besser.

Ansonsten laufen auf dem Laptop aktuell folgende Programme ohne Probleme:

  • VS 2005 SP1
  • Visual Assist X, Natürlich! Ohne dieses Ding kann ich VS schon nicht mehr bedienen 🙂
  • Office 2007 Ultimate 
  • Textpad 4.7.3
  • 4NT 8.0 Build 66
  • Trillian 3.1
  • iTunes 7.02 mit Quicktime entsprechend
  • Adobe Reader 8.0
  • Trillian 3.1
  • Thunderbird 1.5.0.9
  • Dazu einige uralte Spiele, die meine Tochter gerne spielt: HyperballoidCE, Pacboy, Zoo Tycoon2 etc. alle laufen ohne Probleme!

Es scheint sogar so zu sein, dass sogar Spiele, die unter Windows 2000 und XP ihren Dienst verweigert haben, wenn man diese nicht als Admin spielte nun ohne weiteres durch das neue UAC sofort spielen kann! Genial!

Ich möchte Vista nicht mehr hergeben!!!
Und werde wohl alsbald meinen Desktop wohl auch platt machen und Vista drauf packen.

Vista und die Notwendigkeit eines Manifestes für die UAC

Bei den vorbereiten von Software für Vista (Certified for Vista) ist mir die UAC (User Access Control) untergekommen. Unter Vista verschärft sich das ganze noch einmal gegenüber Windows 2000.

Einen der wichtigsten Punkte möchte einfach mal hier darlegen.
Unsere Software ist so geschrieben, dass ein Admin entsprechende Einstellungen in bestimmten Dateien im Programmverzeichnis ablegen kann und auch Einstellungen vornehmen kann die in HKLM abgelegt werden. Unter anderem dienen diese Dateien/Registry Einstellungen eben zur Kontrolle von Services und IPC. Sie müssen eben in einem allgemein zugänglichem Bereich liegen. Das ist ja nichts ungewöhnliches.

Brav wie wir sind haben wir entsprechende Prüfungen eingebaut und sagen dem Anwender, wenn er keine Rechte hat in HKLM zu schreiben, oder die entsprechenden Dateien im Programmverzeichnis zu ändern, z.B. INI Dateien die mit WritePrivateProfileString geschrieben werden.

Vista ist es nun egal, dass wir brave Entwickler sind. Vista behandelt uns per UAC Richtlinie wie einen Bösewicht und leitet alle Änderungen in den lokalen Bereich des Anwenders. Meine Software hat keine Chance zu erkennen, dass das schreiben in HKLM und den Programm-Datei Ordner eigentlich nicht erlaubt ist.

Man muss also zwingend ein Manifest für die UAC hinzufügen:

<?xml version=“1.0″ encoding=“utf-8″?>
<assembly xmlns=“urn:schemas-microsoft-com:asm.v1″ manifestVersion=“1.0″>
  <trustInfo xmlns=“urn:schemas-microsoft-com:asm.v3″>
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level=“asInvoker“ />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Erst mit diesem Manifest verhält sich meinem Programm wieder so, wie ich es auch erwarte!

Eine gute Anleitung hierfür:
– How To: Tell Vista’s UAC What Privelege Level Your App Requires
http://channel9.msdn.com/Showpost.aspx?postid=211271

Weitere Infos, Dokus und Hilfsprogramme:
– Understanding and Configuring User Account Control in Windows Vista
http://technet.microsoft.com/en-us/windowsvista/aa905117.aspx
– Windows Vista Application Development Requirements for User Account Control Compatibility
http://www.microsoft.com/downloads/details.aspx?FamilyID=BA73B169-A648-49AF-BC5E-A2EEBB74C16B&displaylang=en
– Microsoft Application Verifier
http://www.microsoft.com/downloads/details.aspx?familyid=BD02C19C-1250-433C-8C1B-2619BD93B3A2&displaylang=en
– Microsoft Standard User Analyze
http://www.microsoft.com/downloads/details.aspx?familyid=DF59B474-C0B7-4422-8C70-B0D9D3D2F575&displaylang=en

Steve McConnell: Code Complete – Deutsche AusgabeDer Second Edition

Dieses Buch ist das Beste was ich jemals zum Thema Softwarentwicklung gelesen habe. Zumindest für mich als aktiven Entwickler und Leiter einer Entwicklungsabteilung. Als Entwickler will man am liebsten programmieren, aber das Buch zeigt anschaulich und in einem netten Stil, dass man ohne ein gewisses Mass an Planung, Architektur und Regeln schnell ein Projekt gegen die Wand fährt. Eindringlich wird der gesamt wirtschaftliche Zusammenhang in einem Projekt beleuchtet und ich konnte bei vielen negativen Beispielen nur nicken, weil ich genau in solche Projekt-Fettnäpfchen mit „Erfolg“ rein getreten bin. Es zeigt wie man ein Projekt gut angeht, ohne Software-Entwurf-Overkill zu betreiben. Es gibt gute Tipps wie man sich selbst Coding-Richtlinien geben kann, die einen vor manchem Bug bewahren. Typische Fallen werden angesprochen und die Möglichkeiten sie zu umschiffen werden gezeigt. Es geht darum, bessere, fehlerfreiere, wartungsärmere, billigere Programme zu schreiben. Das Buch gibt viele Anregungen und Ideen, die auch selbst einem alten Hasen das Leben leichter machen können. Und das ganze ist so praxisnah, dass man viele Dinge sofort übernehmen kann. Die meisten Code Beispiele sind in C++ Code geschrieben, aber im Endeffekt ist es komplett programmiersprachenunabhängig. Das Buch ist einem guten humorvollem Stil geschrieben, der nicht langweilig wird. Wenn ich es nicht besser wüsste, würde ich fast sagen, das Buch wurde ursprünglich auf Deutsch geschrieben. Der Text liest sich flüssig ohne Haken. Auch der gut platzierte Humor ist erhalten geblieben. Ein absolutes Muss und den Preis ist es allemal wert.

5 Sterne

http://www.amazon.de/Code-Complete-Deutsche-AusgabeDer-Second/dp/386063593X

Mark Russinovich, David A. Solomon: Microsoft Windows Internals. Windows 2000, Windows XP und Windows Server 2003

„Windows Internals“ von Mark. E. Russinovich, und A. Solomon ist ein Muss für jeden Windows Entwickler, der ein Stück weiter hinter die Kulissen von Windows sehen will oder auch muss. Es ist nicht nur ein fundiertes und gut gegliedertes Werk mit viel Tiefgang in die Hintergrundtechnologie die Windows ausmacht. Manches, was man als Programmierer bisher einfach nur so hin programmierte, wird erst verstanden wenn man dieses Buch gelesen hat. Das Buch eignet sich als Nachschlagewerk wie als „Lesebuch“ um seinen Horizont zu erweitern. Mithilfe der Tools, Werkzeuge und Erklärungen für den Debugger wird man auch in die Lage versetzt schwierigere Probleme und Fehler in eigenen Programmen auf die Spur zu kommen. Aber Achtung: Leichte Kost ist dieses Buch nicht! Es wendet sich an den erfahrenen Programmierer und möchte diesem weitere Einblicke und Kenntnisse vermitteln. Und dieser Aufgabe wird das Buch zu 100% gerecht. Das Buch lohnt sich auch unbedingt für jeden der die dritte Ausgabe von „Inside Microsoft Windows 2000“ im Schrank stehen hat, denn hier werden auch 64bit Technologie, Terminalserver, Hyperthreading angesprochen und die Unterschiede in den Prozessor spezifischen Implementierungen gegeben. Behandelt werden die Technologien der Plattformen Windows 2000, Windows XP und Windows 2003. NT4 findet nur noch in der Einleitung eine Erwähnung. Gegenüber der dritten Ausgabe sind mehr und bessere Beispiele vorhanden und auch die Tools selber, mit denen man das Windows System erkunden kann sind besser erklärt. Die Übersetzung ist erfreulich gut, und englische Fachbegriffe wurden an den Stellen belassen, an denen sie auch Sinn machen. Es wurde weder übermäßig verdeutscht noch zu viel im englischen belassen. Man stellt sich hinterher also nicht die Frage, ob ein rein englisches Buch besser gewesen wäre. Da ich normalerweise fast immer nur „Originale“ kaufe und lese, und mehr durch Zufall auf diese deutsche Ausgabe gestoßen bin, musste ich einiges an meinen Vorurteilen von Übersetzungen korrigieren. Es ist wirklich eine komplett neue Überarbeitung, die noch gelungener erscheint, als der Vorgänger.

5 Sterne

http://www.amazon.de/Microsoft-Windows-Internals-2000-Server/dp/3860639773