Komfortabler Dateimanager mit vielen Funktionen

Kleine Tools

TFS: Warehouse-Aktualisierung

By Sven on 25.08.2008 - 10:00 in Kleine Tools, TFS with Keine Kommentare

Die TfsWarehouse-Datenbank enthält alle wichtigen Daten, die für die Generierung und Anzeige von Berichten nötig sind. Die Informationen stammen aus den operationalen Datenbanken (z.B. Arbeitsaufgaben, Versionskontrolle), sie werden durch den Warehouse-Webservice in die TfsWarehouse-Datenbank übertragen. Der TFSServerScheduler-Dienst sorgt dafür, dass dies stündlich geschieht. Allerdings läuft der Dienst wie berichtet nur auf einem an eine Domäne angeschlossenen Server.

Als Abhilfe habe ich mir ein kleines Programm geschrieben, welches die Aktualisierung der TfsWarehouse-Datenbank durch den Webservice anstößt. In Verbindung mit der Windows-Aufgabenplanung kann dies je nach Bedarf stündlich, täglich oder in anderen gewünschten Abständen geschehen. Optimaler wäre natürlich ein eigener Dienst, aber so schwer wollte ich es mir dann auch nicht machen.

// ****************************************************************************
// ******                     Implementation zu wWinMain                 ******
// ****************************************************************************
int APIENTRY wWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpCmdLine*/, int /*nCmdShow*/)
{
    // Internet-Session oeffnen
    HINTERNET hSession = WinHttpOpen(NULL, WINHTTP_ACCESS_TYPE_NO_PROXY, NULL, NULL, 0);
    if (NULL != hSession)
    {
        // Verbindung herstellen
        HINTERNET hConnect = WinHttpConnect(hSession, L"localhost", 8080, 0);
        if (NULL != hConnect)
        {
            // Anforderung erstellen
            HINTERNET hRequest = WinHttpOpenRequest(hConnect, L"POST", L"/Warehouse/v1.0/warehousecontroller.asmx/Run", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
            if (NULL != hRequest)
            {
                // Anforderung senden
                BOOL fResult = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0);

                // Anforderung wurde gesendet
                if (fResult && WinHttpReceiveResponse(hRequest, NULL))
                {
                    // Antwort abfragen
                    char szResponse[2048] = { 0 }; DWORD dwBytesRead = 0;
                    WinHttpReadData(hRequest, szResponse, 2048, &dwBytesRead);
                }

                // Anforderung schliessen
                WinHttpCloseHandle(hRequest);
            }

            // Verbindung schliessen
            WinHttpCloseHandle(hConnect);
        }

        // Session freigeben
        WinHttpCloseHandle(hSession);
    }

    // Ans kloar
    return 0;
}

Es wird einfach nur eine Url aufgerufen und die Antwort abgefragt, auf eine Fehlerausgabe habe ich verzichtet. Das kompilierte Programm könnt ihr hier herunterladen.

TFS: Dateidatum beim Verzweigen erhalten

By Sven on 11.08.2008 - 10:00 in Kleine Tools, TFS with Keine Kommentare

Beim Verzweigen von Projekten im TFS und anschließenden Abruf des neuen Projekts bekommen die Dateien immer das aktuelle Systemdatum als Datum der letzten Änderung verpasst. In SourceSafe war es noch möglich, beim Abruf zwischen dem Systemdatum, dem Datum des Eincheckens und dem Datum der letzten Änderung zu wählen. Im TFS habe ich diese Einstellung leider noch nicht gefunden, ich würde aber das Datum der letzten Änderung bevorzugen.

Als Workaround habe ich mir ein kleines Programm geschrieben, welches das Änderungsdatum eines Verzeichnisbaums auf einen anderen überträgt. Der Aufruf erfolgt über die Kommandozeile mit dem Befehl

SyncModified.exe <SourceDir> <TargetDir>

Das Quellverzeichnis wird inklusive den Unterverzeichnissen durchlaufen und das Datum der letzten Änderung einer jeden Datei in das Zielverzeichnis übernommen (sofern die Datei dort existiert). Ein eventuell gesetztes Schreibschutzattribut bleibt erhalten.

Das kleine Tool (76 KiB) könnt ihr hier herunterladen.

Programme mit bestimmten Umgebungsvariablen starten

By Sven on 08.12.2006 - 12:41 in Kleine Tools with 1 Kommentar

Die von SpeedCommander und Squeez gemeinsam genutzten Dlls werden im Entwicklungsprozess in einem lib-Ordner abgelegt. Damit die Dlls beim Testen und Debuggen im VC6 auch gefunden werden, muss der lib-Ordner in die PATH-Umgebungsvariable aufgenommen werden.

Schwierig wird es aber, wenn unter x64 auch noch mit VS 2005 die 64-bit Versionen getestet werden müssen. Für eine friedliche Koexistenz von VC6 und VS 2005 werden die mit VS 2005 erzeugten Dlls in den Verzeichnissen ‘lib\x32’ (für 32-bit) und ‘lib\x64’ (für 64-bit) abgelegt. Die Dateinamen der Dlls sind jeweils gleich, so dass ich bisher die PATH-Umgebungsvariable vor dem Start von VS 2005 immer anpassen musste, damit VS 2005 auch die richtigen Dlls laden konnte.

Weit effektiver wäre es natürlich, wenn dies automatisch geschehen würde. Die einfachste Lösung ist sicher eine kleine Batchdatei, welche die Umgebungsvariable setzt und dann die entsprechende IDE startet. Bei jedem Start wäre aber ein aufpoppendes DOS-Fenster zu sehen, was große Abzüge in der B-Note bedeuten würde.

Ich habe mir deshalb ein kleines Windows-Programm geschrieben, was das Anpassen der Umgebungsvariablen und das Starten der IDE übernimmt. Die geänderten Umgebungsvariablen gelten dabei nur für die jeweilige IDE. Damit ist es auch möglich, VC6 und VS 2005 gleichzeitig zu benutzen. Die Steuerung erfolgt über eine kleine INI-Datei. Jedes Programm bekommt seine eigene Sektion, der Sektionsname gilt gleichzeitig als Kommandozeilenparameter. Das aufzurufende Programm wird über den App-Parameter festgelegt. Alle weiteren Parameter in der Sektion entsprechen den gewünschten Umgebungsvariablen. Eine Konfiguration, welche die PATH-Umgebungsvariable ergänzt, sieht z.B. so aus:

[vc6]
App=E:\Visual Studio\Common\MSDev98\Bin\MSDev.exe
Path=%Path%;D:\Visual C++\Libraries\Version 6.10\lib;D:\Visual C++\Libraries\Version 6.00\lib

Anstatt PATH können natürlich auch alle anderen Umgebungsvariablen geändert und neue Umgebungsvariablen erstellt werden. Die einzige Beschränkung liegt in einer möglichen APP-Umgebungsvariablen, dieser Wert ist für den Programmnamen reserviert und kann daher als Umgebungsvariable nicht geändert werden.

Nach der Erstellung der gewünschten Konfiguration muss nur noch die zu startende Verknüpfung angepasst werden. Das auszuführende Programm wird durch EnvRun.exe /Konfiguration ersetzt, wobei /Konfiguration für die gewünschte Sektion in der INI-Datei steht. Anschließend muss noch das Symbol aktualisiert werden, da EnvRun.exe keine eigenen Symbole enthält. Für das obige Beispiel würde der Aufruf also über EnvRun.exe /vc6 erfolgen.

Wer ebenfalls Bedarf an dieser Lösung hat, der kann sich EnvRun hier herunterladen.

Windows-Version ermitteln

By Sven on 19.06.2006 - 15:11 in Kleine Tools with 3 Kommentare

Es war mal wieder an der Zeit, die Funktion zur Ermittlung der Windows-Version auf den aktuellen Stand zu bringen. Um dies auf den verschiedenen Systemen zu testen, habe ich mir ein kleines Programm geschrieben, welches die über GetVersionEx ermittelten Daten in einem Fenster anzeigt:

GetWindowsVersion

Wer mag, kann sich GetWindowsVersion.exe auch herunterladen. Vielleicht ist es ja dem einen oder anderen ebenfalls nützlich.

Top