Komfortabler Dateimanager mit vielen Funktionen

Visual Studio

TFS: Arbeitsaufgaben löschen

By Sven on 06.08.2008 - 10:00 in TFS with 3 Kommentare

Beim Erstellen eines neuen Teamprojekts in TFS unter Verwendung von ‘MSF for Agile Software Development’ werden automatisch 15 Arbeitsaufgaben (Work Items) erstellt, welche die grundlegenden Schritte auflisten (Zuordnung der Benutzer, Erstellung von Bereichen und Iterationen, …). Leider besteht im Team Explorer keine Möglichkeit, diese Aufgaben nach dem Schließen auch zu löschen. Löschen deshalb, weil sie für das eigentliche Projekt keine Relevanz mehr haben. Bei drei Teamprojekten sind es schon 45 überflüssige Aufgaben.

Abhilfe schaffen hier die Team Foundation Server Power Tools. Nach der Installation startet man die Eingabeaufforderung und wechselt in das Verzeichnis, in welches man die Power Tools installiert hat. Das Löschen von Arbeitsaufgaben geschieht mit dem Befehl

tfpt destroywi /server:SERVERNAME /workitemid:id1[,id2,...]

Beim ersten Projekt erhalten die automatisch erstellten Arbeitsaufgaben die IDs 1 bis 15, so dass der Löschbefehl

tfpt destroywi /server:SERVERNAME /workitemid:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

lautet. Aber Vorsicht, dass man nicht die falschen Aufgaben erwischt. Das Löschen ist nämlich nicht wieder rückgängig zu machen!

WebWasher stört TFS

By Sven on 28.07.2008 - 10:00 in TFS with 11 Kommentare

Nach der Installation von Team Explorer auf meinem Entwicklungsrechner tauchten plötzlich Anmeldeprobleme mit dem TFS auf. Die ersten Tests hatte ich aus einer VM heraus gemacht, diese liefen fehlerfrei ab. Obwohl das Benutzerkonto auf dem Server vorhanden und auch im TFS eingetragen war, bekam ich beim Anmelden den Fehler TF31003. Dieser besagt, dass mein Benutzerkonto nicht über die Berechtigung zum Verbindungsaufbau mit dem TFS verfügt. Zudem hatte ich Probleme, auf die SharePoint-Seite zuzugreifen. Der Internet Explorer zeigte folgende Fehlermeldung:

Sie haben nicht die erforderliche Berechtigung, um die Seite anzuzeigen
Sie verfügen nicht über die Berechtigung, dieses Verzeichnis oder diese Seite unter Verwendung der von Ihnen bereitgestellten Anmeldeinformationen anzuzeigen, weil Ihr Webbrowser ein WWW-Authenticate-Headerfeld sendet, das die Konfiguration des Webservers nicht akzeptieren kann.
——————————————————————————–

Versuchen Sie Folgendes:

Wenn Sie Ihrer Meinung nach in der Lage sein sollten, dieses Verzeichnis bzw. diese Seite anzuzeigen, wenden Sie sich an den Websiteadministrator.
Klicken Sie auf die Schaltfläche Aktualisieren, um es mit anderen Anmeldeinformationen erneut zu versuchen.
HTTP Error 401.2 – Unauthorized: Access is denied due to server configuration favoring an alternate authentication method. (HTTP-Fehler 401.2 – Nicht autorisiert: Der Zugriff wurde verweigert, weil die Serverkonfiguration eine andere Authentifizierungsmethode verlangt.)
Internetinformationsdienste (Internet Information Services oder IIS)

——————————————————————————–

Die Google-Empfehlungen bestanden darin, im IIS die anonyme Anmeldung zu deaktivieren. Aber das half leider auch nicht. Nach langem Hin- und Herprobieren fand ich dann heraus, dass der auf “Konfigurationsfrei” eingestellte WebWasher die authorisierte Anmeldung stört bzw. nicht unterstützt. Nach der Umschaltung auf eine manuelle Konfiguration klappte dann sowohl die Anmeldung beim TFS als auch die Anzeige der SharePoint-Seiten.

Die Umstellung im WebWasher behob zudem noch ein anderes Problem. Seit dem Umstieg auf Vista hatte ich beim Download von Dateien per FTP immer beschädigte Dateien, was ich mir nie erklären konnte. Plötzlich klappt der Download wieder fehlerfrei. Irgendetwas scheint bei der konfigurationsfreien Einbindung von WebWasher unter Vista zu klemmen.

Nicht ohne TFS

By Sven on 09.07.2008 - 10:00 in TFS with 5 Kommentare

In den Kommentaren zu meinem Umstiegsbericht von SourceSafe zu Subversion hat mir Martin den Team Foundation Server (TFS) ans Herz gelegt. Die Workgroup Edition ist aber leider nicht Bestandteil meines MSDN Professional-Abos, sie gibt es erst ab der nächsten Stufe. Bisher sah ich auch nicht die Notwendigkeit, dafür das Dreifache zu bezahlen.

Ich staunte daher nicht schlecht, als vor zwei Wochen plötzlich ein Gutschein über eine einjährige MSDN Premium Subscription inkl. Team Suite in meinem Briefkasten steckte, den mir Martin in seiner Funktion als MVP zukommen ließ. Die Freude war natürlich riesengroß! JJ

Mittlerweile habe ich mir die Team Suite und den Team Foundation Server (Workgroup Edition) heruntergeladen. In den nächsten Tagen und Wochen werde ich mich nun eingehend mit den Möglichkeiten von Visual Studio Team System beschäftigen, der Schwerpunkt wird sicher erst einmal auf der Quellcodeverwaltung liegen. Ich bin gespannt und werde natürlich berichten.

VS 2008: Projektspezifische Umgebungsvariablen

By Sven on 30.05.2008 - 10:00 in Visual Studio 2008 with 4 Kommentare

Letzte Woche habe ich eher zufällig entdeckt, dass man in den Projekteigenschaften auf der Debugging-Seite auch zusätzliche Umgebungsvariablen definieren kann:

Projektspezifische Umgebungsvariablen

Die Option Zusammenführungsumgebung legt fest, ob die neuen Umgebungsvariablen mit den bestehenden zusammengeführt oder ob die aktuellen Umgebungsvariablen ersetzt werden sollen.

Das macht es bedeutend einfacher, entsprechend der gewählten Konfiguration (Win32 oder x64) mit dem jeweils passenden Bibliotheksverzeichnis zu arbeiten. Bisher hatte ich mir immer mit einem kleinen Programm geholfen, das die Umgebungsvariablen vor dem Start der IDE anpasste. Damit war allerdings kein spontanes Umschalten zwischen der Win32-Version und der x64-Version möglich.

Fehler in CListCtrl::SortGroups

By Sven on 28.04.2008 - 10:00 in MFC, Visual Studio 2008 with 5 Kommentare

Die MFC-Unterstützung für die ComCtl32.dll von Windows XP war ja lange ziemlich mager, und so habe ich mir damals meine eigenen Wrapper-Funktionen geschrieben. Die MFC9 von Visual Studio 2008 ist mittlerweile auf dem aktuellen Stand, und so habe ich meine Wrapper-Funktionen zugunsten der MFC-Funktionen entfernt.

Dabei ist mir aufgefallen, dass in der CListCtrl-Methode SortGroups die Parameter vertauscht sind. Die Implementation schaut so aus:

AFX_INLINE BOOL CListCtrl::SortGroups(PFNLVGROUPCOMPARE _pfnGroupCompare, LPVOID _plv)
{
    ASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, LVM_SORTGROUPS, (WPARAM)(LPARAM)_plv, (LPARAM)_pfnGroupCompare );
}

während das API-Makro ListView_SortGroups aus der commctrl.h so lautet:

#define ListView_SortGroups(hwnd, _pfnGroupCompate, _plv) \
    SNDMSG((hwnd), LVM_SORTGROUPS, (WPARAM)(_pfnGroupCompate), (LPARAM)(_plv))

Beim Aufruf von SortGroups bekommt die Listenansicht also vertauschte WPARAM und LPARAM-Parameter und macht entweder gar nichts oder stürzt ab.

Damit SortGroups richtig funktioniert, muss es in afxcmn3.inl wie folgt geändert werden:

AFX_INLINE BOOL CListCtrl::SortGroups(PFNLVGROUPCOMPARE _pfnGroupCompare, LPVOID _plv)
{
    ASSERT(::IsWindow(m_hWnd));
    return (BOOL)::SendMessage(m_hWnd, LVM_SORTGROUPS, (WPARAM)_pfnGroupCompare, (LPARAM)_plv );
}

Zu diesem Problem gibt es übrigens auch einen Connect-Eintrag. In diesem wird das Problem der vertauschten Parameter klar erläutert, aber Microsoft kann es ohne Demoprojekt oder Minidump nicht nachvollziehen…

Vom Pech verfolgt

By Sven on 14.04.2008 - 10:00 in Visual Studio 2008 with 3 Kommentare

Das Anfang der letzten Woche zum Download freigegebene Feature Pack für Visual Studio 2008 steht unter keinem guten Stern. Nachdem sich schon die Betaversion vom Ende des letzten Jahres unter bestimmten Konfigurationen nicht installieren ließ, bringt die finale Version nun neue Installationsprobleme mit sich. Auf nicht-englischen Systemen bzw. auf englischen Systemen mit deutscher Regions- und Spracheinstellung lässt sich das Feature Pack nur installieren, wenn man die Regions- und Spracheinstellung vorher auf Englisch (USA) stellt.

Das 32-bittige Laufzeit-Installationspaket lässt sich auf Windows Vista und Windows Server 2008 erst gar nicht installieren, während der Installation wird folgende Fehlermeldung angezeigt:

Fehler bei der Installation unter Vista

Auf Systemen, auf denen die Installation funktioniert, werden die Assemblies für ATL und OpenMP für eine falsche Prozessorarchitektur installiert, so dass Anwendungen, welche diese Module verwenden, nicht funktionieren.

Es ist schon verwunderlich, dass diese Probleme beim internen Test nicht aufgefallen sind. Man kann nur hoffen, dass der eigentliche Quellcode besser getestet wurde. Auf meine Arbeit hat das aber alles keine Auswirkungen, weil ich das Feature Pack auf meinem Entwicklungssystem nicht installieren werde.

Unwohl

By Sven on 11.02.2008 - 15:17 in Visual Studio 6 with 1 Kommentar

Ich hätte ja nie geglaubt, dass es einmal so weit kommen würde. Gerade musste ich für ein paar Minuten wieder mit dem VC 6 arbeiten, weil ich einem Problem in SpeedCommander 11 auf den Grund gehen wollte. Die letzte Begegnung mit dem VC 6 liegt schon mehr als zwei paar Monate zurück.

Während der ganzen Zeit habe ich mich dabei ziemlich unwohl gefühlt und kam mir richtiggehend verloren vor. Also den VC 6 ganz schnell wieder schließen und zurück zum geliebten VS 2008.

Statische Codeanalyse zum Nulltarif

By Sven on 11.02.2008 - 11:06 in Visual Studio 2008 with 7 Kommentare

Die Windows-Programmierer unter euch werden sicher auch festgestellt haben, dass sich Funktionsdefinitionen in den Header-Dateien vom Platform Windows SDK in den letzten Versionen etwas verändert haben. Hieß es bei Windows XP noch

WINBASEAPI
UINT
WINAPI
GetTempFileNameW(
    IN LPCWSTR lpPathName,
    IN LPCWSTR lpPrefixString,
    IN UINT uUnique,
    OUT LPWSTR lpTempFileName
    );

so schaut die Definition im Windows SDK für Server 2008 so aus:

WINBASEAPI
UINT
WINAPI
GetTempFileNameW(
    __in LPCWSTR lpPathName,
    __in LPCWSTR lpPrefixString,
    __in UINT uUnique,
    __out_ecount(MAX_PATH) LPWSTR lpTempFileName
    );

An den Funktionsparametern selbst hat sich natürlich nichts verändert, aber die neuen Präfixe fallen doch ins Auge. Anfangs habe ich mir dabei nicht viel gedacht, aber mittlerweile hat sich mir der tiefere Sinn der Änderungen erschlossen.

Alles hängt mit der Standard Annotation Language (SAL) zusammen. In Verbindung mit einem statischen Codeanalyse-Tool lassen sich so mögliche Programmierfehler schon beim Kompilieren ermitteln. Auch wenn sich ein Projekt unter höchster Warnstufe ohne Warnungen kompilieren lässt, so heißt dies noch lange nicht, dass alles sauber ablaufen muss.

Leider ist das statischen Codeanalyse-Tool den höherpreisigen Visual Studio-Versionen Team System und Team Edition for Developers vorbehalten. Die Team Edition for Developers kostet aber locker 5000 Euro mehr als die Professional Edition, was für den normalen Entwickler ziemlich unerschwinglich sein dürfte.

Abhilfe schafft hier das Windows SDK für Vista sowie das für Server 2008. Beide enthalten die vollständige Compilersammlung von Visual Studio 2005 bzw. Visual Studio 2008 samt Codeanalyse-Tool. Für die Codeanalyse sind die Dateien c1ast.dll, c1xxast.dll, mspft80.dll und mspft80ui.dll zuständig. Die ersten drei Dateien befinden sich unter VC\bin, die letzte enthält die englischsprachigen Ressourcen und ist unter VC\bin\1033 zu Hause.

Nachdem man die vier Dateien an den entsprechenden Ort kopiert hat, muss die Codeanalyse nur noch aktiviert werden. In der Team Edition for Developers gibt es dafür eine Seite in den Projekteigenschaften, in der Professional Edition muss man den Kommandoschalter /analyze unter Configuration Properties – C/C++ – Command Line manuell eintragen.

Was macht die Codeanalyse nun so interessant? Nehmen wir einfach mal die oben angesprochene Funktion GetTempFileNameW. Die Verwendung könnte so aussehen:

29: WCHAR szTempFileName[240];
30: GetTempFileNameW(L"C:\\", NULL, 1, szTempFileName);

Der Compiler hat hier nichts auszusetzen, selbst bei /W4 gibt es keine Warnungen. Aktiviert man aber die Codeanalyse, dann sieht man plötzlich folgende Warnhinweise:

: warning C6202: Buffer overrun for ‘szTempFileName’, which is possibly stack allocated, in call to ‘GetTempFileNameW’: length ‘520’ exceeds buffer size ‘480’
:warning C6309: Argument ‘2’ is null: this does not adhere to function specification of ‘GetTempFileNameW’
: warning C6386: Buffer overrun: accessing ‘argument 4’, the writable size is ‘480’ bytes, but ‘520’ bytes might be written: Lines: 29, 30
: warning C6387: ‘argument 2’ might be ‘0’: this does not adhere to the specification for the function ‘GetTempFileNameW’: Lines: 29, 30

Anhand der Definition von GetTempFileNameW erkennt der Compiler, dass die Funktion als vierten Parameter einen Puffer von mindestens 260 Zeichen erwartet, der Programmierer aber aus unerklärlichen Gründen nur einen Puffer von 240 Zeichen bereitgestellt hat. Ist der gewünschte temporäre Dateiname nun länger als die zur Verfügung stehenden 240 Zeichen, dann führt dies zu einem sicheren Pufferüberlauf.

Der Grund für die zweite Warnung ist der zweite Funktionsparameter. __in legt fest, dass lpPrefixString ein gültiger und initialisierter Zeiger sein muss. Der Compiler erkennt, dass NULL nicht in diese Kategorie passt und weist uns darauf hin. NULL wäre nur gültig, wenn lpPrefixString stattdessen mit __in_opt gekennzeichnet sein würde.

Insgesamt hat die statische Codeanalyse über 130 verschiedene Warnhinweise in petto. Sie erkennt z.B., wenn HRESULT-Werte in booleschen Vergleichen verwendet werden:

CAtlFile file;
if (!file.Create(L"C:\\test.txt", GENERIC_READ, FILE_SHARE_READ, CREATE_ALWAYS))
{
//
}

oder wenn eine Funktion Variablen enthält, die unverhältnismäßig viel Platz auf dem Stack belegen:

WCHAR szTempFileName[32768];
GetTempFileNameW(L"C:\\", L"123", 1, szTempFileName);

Mich selbst haben die Möglichkeiten der statischen Codeanalyse mehr als begeistert. Wenn man sich die möglichen 138 Warnungen so anschaut, dann entdeckt man viele Sachen, die man gerne mal falsch macht und über die man auch schon das eine oder andere Mal gestolpert ist. In der nächsten Zeit werde ich daher meine Projekte Stück für Stück mit /analyze kompilieren und die angezeigten Warnungen abarbeiten. Im zweiten Schritt werden dann die eigenen Funktionen mit den SAL-Parametern versehen.

Vorsicht beim Windows SDK für Windows Server 2008

By Sven on 07.02.2008 - 21:56 in Visual Studio 2008 with Keine Kommentare

Ich musste gerade feststellen, dass sich das Windows SDK für Windows Server 2008 bei der Installation anders verhält als frühere Versionen und damit auch anders als erwartet. Bisher wurden die Compiler-Dateien immer in ein Verzeichnis unterhalb des SDK-Installationsordners installiert und das Visual Studio-Verzeichnis blieb unverändert.

Doch die Suche nach dem Compiler-Verzeichnis blieb diesmal erfolglos, obwohl ich die entsprechende Option beim Installationsdialog angekreuzt hatte. Auch eine Reparaturinstallation brachte das Verzeichnis nicht zum Erscheinen.

Aufklärung brachte ein Blick in das Visual Studio 2008-Verzeichnis. In diesem befanden sich plötzlich auch die IA64-Compiler, welche eigentlich kein Bestandteil von VS 2008 Professional sind. Ärgerlicherweise wurden aber auch alle von mir angepassten include- und lib-Dateien überschrieben, die für die angepasste Laufzeit benötigt werden. Zum Glück hatte ich noch eine Spiegelinstallation auf dem Laptop.

Also: Vorsicht bei der Installation des Windows SDK für Windows Server 2008, sofern man angepasste Dateien verwendet!

VS 2008: Deutsche Versionen verfügbar

By Sven on 29.01.2008 - 10:29 in Visual Studio 2008 with 2 Kommentare

Am Wochenende hat Microsoft die deutschen Testversionen von Visual Studio 2008 veröffentlicht. Der Download der Professional-Version ist 3674 MiB groß, bei der Team Suite fließen 4158 MiB durch die Leitung. Beide Testversionen funktionieren 90 Tage.

Seit heute früh können sich MSDN-Abonnenten auch die deutsche Vollversion herunterladen. Angeboten werden die Professional mit 3674 MiB sowie die gesammelten Express-Versionen mit 3061 MiB. Vermutlich ist auch die Team Suite-Version verfügbar, das kann ich mangels Abo aber nicht überprüfen.

Top