Hilfe und Support kann nicht geöffnet werden… Starten Sie „Hilfe und Support“, um dieses Problem zu beheben.

Auf einem meiner Windows 2003 R2 Server bekam ich permanent Abstürze sobald ich die Online-Hilfe im Exchange System-Manager aufrief.
Also dachte ich mir: „Schaust Du doch mal in die Online Hilfe“.

😯 Es springt mich die folgende Fehlermeldung an:

Hilfe und Support kann nicht geöffnet werden, da ein Systemdienst nicht ausgeführt wird.
Starten Sie „Hilfe und Support“, um dieses Problem zu beheben.

Eine dämlichere Fehlermeldung kann es wohl nicht geben! OK, Nach ein wenig googlen kam ich zu der Erkenntnis:
Der Dienst „Hilfe und Support“ fehlte bei mir in der Liste aller Dienste. Das mit dem Satz „Starten Sie „Hilfe und Support“, um dieses Problem zu beheben“ ein Dienst gemeint ist, kann hier wirklich nicht riechen.

Etwas mehr googeln ergab folgenden Fix:

  1. Wechseln in das Verzeichnis c:\windows\pchealth\helpctr
  2. Das gesamte Verzeichnis packagestore löschen
  3. Wechseln in das Verzeichnis c:\windows\pchealth\helpctr\binaries
    und dort den folgenden Befehl aus der Console starten:
    start /w helpsvc /svchost netsvcs /regserver /install

Sollte  helpsvc.exe nicht mehr vorhanden sein, oder der letzte Befehl fehlschlagen, muss man wohl diesen Teil neu installieren:

  1. Explorer starten und wechseln nach c:\windows\inf
  2. Rechtsklick auf die Datei pchealth.inf und Installieren auswählen
  3. Dienst wie oben unter 3. neu installieren.

Das Problem scheinen mehrere Leute sowohl mit XP, als auch Windows 2003 Server zu haben, nachdem Servicepacks installiert wurden. Wundert mich allerdings, weil in der letzten Zeit kein Servicepack installiert wurde.  Wahrscheinlich habe ich nur längere Zeit die Hilfe nicht verwendet 😉 und mirist es nicht aufgefallen.

Damit kann man zumindest mal wieder die Hilfe aufrufen. Warum aber mein Exchange System-Manager jegliche Online-Hilfe mit einem Absturz quittiert bleibt mir noch ein Rätsel…

Mein Favorit bei den Backup und Imaging Programmen

Es gibt ja Leute, die legen keinen Wert auf Backups Ihrer Rechner. Ich habe bereits zu viele negative Erfahrungen gemacht und NTBackup funktioniert zwar, ist aber für das komplette Wiederherstellen eines Rechners bestimmt nicht erste Wahl.

In den letzten zwei Jahren hat sich bei mir ein klarer Favorit heraus gebildet:
Acronis in Verbindung mit meiner externen 500GB Festplatte.
In der Firma setzt ich Acronis True Image Echo Workstation ein. Zu Hause auf meinem Desktop und Laptop Acronis True Image Home Version 11. Beide Versionen unterstützen natürlich Vista.

Speziell die Home Version bekommt von mir die Note 1+. Die knappen Euro 50,– die das Programm kostet sind wirklich gut angelegt.

Es ist extrem einfach komplette Backups zu ziehen sind und die auch wirklich einfach zu verwenden sind wenn mal was zu restaurieren ist, man öffnet sie einfach im Explorer als Pseudo-Laufwerk. Differenzielle Backups (die ich bevorzuge) und inkrementelle Backups sind auf DiskImage Ebene möglich. D.h. man kann jederzeit auch seinen ganzen Rechner sofort wieder auf einen zuvor gesicherten Stand bringen. Zum Glück habe ich das noch nicht benötigt.
Durch eine versteckte Partition (Secure Zone), kann man auch das entsprechende Recovery-Modul direkt installieren. Oder aber man erzeugt sich ein bootbares Medium (CD). USB Laufwerke werden in diesem Recovery Modus erkannt und bedient. Für mich sind das die elementar wichtigen Dinge die ich von einem Backup Programm erwarte.
Darüber hinaus bietet die Acronis Software noch einiges mehr. Besonders Try&Decide hat es mir hier angetan. Einfach erstmal Software im Probiermodus testen, bevor Änderungen tatsächlich am System durchgeführt werden.

Einziger Wermutstropfen ist mein Rechner in der Firma mit einem Intel SATA-Raid Controller. Bei diesem funktioniert das entsprechende Recovery Modul nicht.

Installation alter TSPs unter Vista

Viele Telefonanbieter haben keine Updates für Vista, oder für ältere Telefone gibt es keine neuen Treiber, weil die Modelle oft schon nicht mehr produziert werden. Weiterhin scheitert oft schon die Installation der alten TSPs, weil die Installationsprogramme Vista nicht berücksichtigen. In vielen Fällen lassen sich die TSPs, die unter Windows 2000 und Windows XP funktionieren auch unter Vista nutzen.

Im Allgemeinen ist es nur notwendig die entsprechende Datei mit der Endung .TSP im Windows\System32 Verzeichnis einer bestehenden Installation zu finden. Die meisten TSPs bestehen aus einer einzigen DLL, die meistens keine anderen DLLs mehr benötigt. Zur Not greift man zu DEPENDS.EXE und prüft die Abhängigkeiten.

Diese Datei wird auf den Vista Rechner wieder in das Verzeichnis Windows\System32 kopiert. Der Name der TSP Datei ähnelt in den meisten Fällen auch dem Produktnamen. Der Name des TSP für ein Elmeg C100 ist z.B. eltelsp32.tsp, der des C300 lautet c3x0tsp.tsp.

In der Systemsteuerung öffnet man die Telefon- und Modemeinstellungen. Dort wählt man den Karteireiter Erweitert. Über den Schalter Hinzufügen kann man nun den alten Treiber in die Liste der aktiven TSPs aufnehmen.
Evtl. ist es nur noch notwendig den TSP über den Schalter Konfigurieren korrekt einzurichten.

CreateThread und die CRT

Immer wieder sehe ich Code Snippets die CreateThread verwenden.
Immer wieder antworte ich gleichlautend:

Vermeide CreateThread, wenn Du CRT Funktionen verwendest, das erzeugt Leaks in der CRT.
Verwende deshalb immer nur _beginthread(ex). ❗

Irgendwie glauben viele Programmierer, dass es besser ist eine möglichst OS-nahe Funktion zu verwenden. In diesem Fall ist es es definitiv nicht ratsam, denn droht in diesem Fall ein Speicherleck von um die 530Bytes (in VC-2005) pro beendetem Thread.

In Kürze: Das ganze Problem liegt darin, dass bestimmte CRT Funktionen thread lokalen Speicher benötigen. Dieser wird im TLS (Thread Local Storage) bei Bedarf angelegt und entsorgt wenn die Threadfunktion returniert oder mit _endthread beendet wird.
Gleiches gilt, wenn der Thread mit ExitThread oder TerminateThread beendet wird! (Das TerminateThread sowieso nicht in Frage kommen darf weil es noch übleres tut weiß ja hoffentlich sowieso jeder 😉 )

Hier eine entsprechende Sammlung der entsprechenden Dokumentationen mit den Begründungen: 

Jeffrey Richter „Advanced Windows“ 3rd Edition
Kapitel 4, „Processes, Threads and the C Run-Time Library“ Seite 108 folgende.

CreateThread Doku: http://msdn2.microsoft.com/En-US/library/ms682453.aspx

A thread in an executable that calls the C run-time library (CRT) should use the _beginthreadex and _endthreadex functions for thread management rather than CreateThread and ExitThread; this requires the use of the multi-threaded version of the CRT. If a thread created using CreateThread calls the CRT, the CRT may terminate the process in low-memory conditions.

ExitThread Doku: http://msdn2.microsoft.com/en-us/library/ms682659.aspx

A thread in an executable that is linked to the static C run-time library (CRT) should use _beginthread and _endthread for thread management rather than CreateThread and ExitThread. Failure to do so results in small memory leaks when the thread calls ExitThread. Another work around is to link the executable to the CRT in a DLL instead of the static CRT. Note that this memory leak only occurs from a DLL if the DLL is linked to the static CRT and a thread calls the DisableThreadLibraryCalls function. Otherwise, it is safe to call CreateThread and ExitThread from a thread in a DLL that links to the static CRT.

KB-Artikel 104641: http://support.microsoft.com/kb/104641/en-us

Threads that are created and terminated with the CreateThread() and ExitThread() Win32 API functions do not have memory that is allocated by the CRT for static data and static buffers cleaned up when the thread terminates. Some examples of this type of memory are static data for errno and _doserrno and the static buffers used by functions such as asctime(), ctime(), localtime(), gmtime(), and mktime(). Using CreateThread() in a program that uses the CRT (for example, links with LIBCMT.LIB) may cause a memory leak of about 70-80 bytes each time a thread is terminated.

To guarantee that all static data and static buffers allocated by the CRT are cleaned up when the thread terminates, _beginthreadex() and _endthreadex() should be used when creating a thread. The _beginthreadex() function includes the same parameters and functionality as CreateThread().

Note It is not possible to terminate a thread with _endthreadex() when it was created with CreateThread(). ❗

❗ Anmerkung: Dieser KB artikel ist leider unvollständig. Hier werden nur ein paar time Funktionen aufgelistet, es trifft aber weitaus mehr Funktionen wie errno, strtok, strerror, tmpname, tmpfile, _ecvt, _fcvt, alle Funktionen die _errno oder _doserrno nutzen etc.

ATE beim „Ready for take off“ in Frankfurt vom 19.-21.02.2008

Wer mich mal persönlich kennen lernen will, der kann mich in Frankfurt beim großen Launch “Ready for take off” von Windows Server 2008, SQL Server 2008 und Visual-Studio 2008 vom 19.-21. Februar 2008 treffen.

Ich werde einer der vielen MVPs sein, die als ATEs (Ask the Experts) die Veranstaltung begleiten.

VC-2008: Neues, Breaking changes…

Hier ein kleiner Auszug aus der Liste der Änderungen und Neuigkeiten.
Die Links verweisen in die MSDN wo man alles nachlesen kann.

What’s New in Visual C++ 2008
Da ist nicht sooo viel:

  • Eingeschränkte (read only) Unterstützung des Class Designers.
  • Vista style Guidlines für Dialoge
  • Vista Common Controls in der MFC
  • Die interessanten Sachen wie MFCNext und TR1 kommen noch

Breaking Changes

  • Nachdem in Visual Studio 2005 der Support von Windows  95 entfiel, hat Microsoft nun einen Schlussstrich unter gezogen.
    Im Klartext: Windows 95, Windows 98, Windows ME, und Windows NT werden als Zielplattformen nicht mehr unterstützt.
  • Hier fällt auf, dass die ATL nun zwingend Abhängig von der CRT wird. Wer früher gerne ATL_MIN_CRT verwendet hat um „gar keine“ CRT zu verwenden, der wird feststellen, dass seine Module etwas wachsen.
  • /Wp64 ist deprecated (na endlich)…

Anmerkung:
Wie so oft werden hier die Sachen veröffentlicht, wo man bei Microsoft weiß, dass man Breaking Changes durchgeführt hat. Es gibt oft genug weitere Breaking Changes die man oft erst am eigenen Leib erfahren muss, siehe Attributed ATL.

Weitere Infos zur MFC in VS-2008 und der BCG Pro-Library

Hier noch ein paar Infos zu dem Thema:

Eine Microsoft Bekanntmachung auf den US VC++ Seiten: MFC Update Powered By BCGSoft
http://msdn2.microsoft.com/de-de/visualc/bb892882.aspx

Eine Pressemitteilung von BCG-Soft vom 09.11.2007:
http://www.bcgsoft.com/pressreleases/PR071110.pdf

Fragen und Antworten im BCG-Forum:
http://www.bcgsoft.com/cgi-bin/forum/topic.asp?TOPIC_ID=4476

VS-Tipps & Tricks: Einstellungen für Visual Studio mehreren Arbeitsplätzen gleich halten

Das man Einstellungen von Visual Studio mittlerweile einfach und intelligent ex- und importieren lassen ist ja mittlerweile bekannt. Man findet diese Funktion direkt im Tools Menü. In meinem Blog fand dies auch schon Erwähnung.

Weitaus versteckter in den Einstellungen von Visual Studio findet man unter
Tools -> Environment -> Import and Export Settings
einen Schalter der das heißt: Use team settings file

Hier ist ein Feature verborgen, dass es wirklich einfach macht auch in einem Team identische Projekt und Visual Studio Einstellungen auf jedem Arbeitsplatz einzustellen. Und das mit wirklich geringem administrativen Aufwand.
Gerade die Include und Library Pfade für gemeinsame Bibliotheken und deren Reihenfolge lassen sich direkt vorbelegen. Und sie werden bei jedem Neustart von Visual Studio auf den vorbestimmten Wert zurückgestellt.
Vorbei die Suche warum in aller Welt irgendwelche falschen SDK Header und Libraries verwendet werden. Warum ein Entwickler immer noch eine uralte Libary eines Drittanbieters verwendet und in seinen Modulen ein Bug auftaucht, den alle schon überwunden glaubten.
Voraussetzungen dafür ist natürlich, dass die einzelnen Rechner der Entwickler natürlich ein ähnliches Verzeichnis Layout verwenden, bzw. die gemeinsamen Bibliotheken im Netz liegen.

Im Prinzip lässt sich jede Einstellung von VS auf diesem Wege beeinflussen.

VS-2008 steht für den Download auf MSDN bereit

Es ist wirklich „very soon“ geworden!

MSDN Subscriber Downloads 
Visual Studio Team System 2008 Team Suite (x86 and x64 WoW) – DVD (English)  
        
Date/Time Posted 
2007-11-19 06:46:35 (UTC) 

 Na dann mal los mit dem ausprobieren…