Welche DTE-ProgID ist für die jeweilige TwinCAT/VS-Version zu verwenden?

Die ProgID für New-Object -ComObject bzw. für GetActiveObject hängt davon ab, ob TcXaeShell oder Visual Studio als Host verwendet wird und welche Version installiert ist. Eine ProgID ist ein Programmatic Identifier und der menschenlesbare Name, unter dem ein COM-Server in der Registry und in der Running Object Table, kurz ROT, registriert ist. Intern wird sie auf eine eindeutige CLSID abgebildet. Wird die falsche ProgID verwendet, schlägt die Verbindung fehl, weil entweder kein passender COM-Server registriert ist oder eine andere als die erwartete IDE angesprochen wird. Daher sollten die installierte Host-Variante und deren Version vor dem Verbindungsaufbau eindeutig bekannt sein.

Übersicht der ProgIDs

ProgID

Host

Basis-VS-Version

TcXaeShell.DTE.17.0

TwinCAT XAE Shell (VS 2022-basiert)

VS 2022

TcXaeShell.DTE.15.0

TwinCAT XAE Shell (VS 2017-basiert)

VS 2017

VisualStudio.DTE.18.0

Visual Studio 2026 mit TwinCAT-Plugin

VS 2026

VisualStudio.DTE.17.0

Visual Studio 2022 mit TwinCAT-Plugin

VS 2022

VisualStudio.DTE.16.0

Visual Studio 2019 mit TwinCAT-Plugin

VS 2019

VisualStudio.DTE.15.0

Visual Studio 2017 mit TwinCAT-Plugin

VS 2017

Warum verschiedene ProgIDs?

Die Versionsnummer entspricht der Visual-Studio-Haupt-Versionsnummer. VS 2017 verwendet 15, VS 2019 verwendet 16, VS 2022 verwendet 17 und VS 2026 verwendet 18. TcXaeShell ist ein VS-Shell-Host und verwendet dieselbe Nummerierung wie das VS-Release, auf dem er basiert. Dadurch lässt sich von der ProgID direkt auf die zugrunde liegende IDE-Generation schließen, was besonders beim Schreiben portabler Skripte hilfreich ist.

Welche ProgID registriert ist, hängt von der installierten Software ab. Sind sowohl Visual Studio als auch TcXaeShell installiert, sind beide ProgIDs verfügbar, zum Beispiel VisualStudio.DTE.17.0 und TcXaeShell.DTE.17.0. Sie zeigen auf unterschiedliche Hosts. Ein typischer Fallstrick ist, eine ProgID mit der falschen Versionsnummer zu verwenden, etwa TcXaeShell.DTE.15.0 auf einem System, auf dem nur die VS-2022-basierte Shell installiert ist. In solchen Fällen findet GetActiveObject keinen passenden Eintrag und der Verbindungsaufbau scheitert, obwohl eine IDE läuft. Ein Blick in die Registry unter HKEY_CLASSES_ROOT zeigt, welche ProgIDs auf dem Rechner registriert sind.

Auslesen der Verfügbaren Versionen:

# read available Visual Studio versions
Get-ChildItem "Registry::HKEY_CLASSES_ROOT\VisualStudio.DTE*"

# read available TwinCAT Shell versions 
Get-ChildItem "Registry::HKEY_CLASSES_ROOT\TcXaeShell.DTE*"

Output

    Hive: HKEY_CLASSES_ROOT

Name                           Property
----                           --------
VisualStudio.DTE               (default) : Microsoft Visual Studio DTE Object
VisualStudio.DTE.16.0          (default) : Microsoft Visual Studio DTE Object
VisualStudio.DTE.17.0          (default) : Microsoft Visual Studio DTE Object
VisualStudio.DTE.18.0          (default) : Microsoft Visual Studio DTE Object

    Hive: HKEY_CLASSES_ROOT

Name                           Property
----                           --------
TcXaeShell.DTE.15.0            (default) : TcXaeShell DTE Object
TcXaeShell.DTE.17.0            (default) : TcXaeShell DTE Object