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 |
|---|---|---|
| TwinCAT XAE Shell (VS 2022-basiert) | VS 2022 |
| TwinCAT XAE Shell (VS 2017-basiert) | VS 2017 |
| Visual Studio 2026 mit TwinCAT-Plugin | VS 2026 |
| Visual Studio 2022 mit TwinCAT-Plugin | VS 2022 |
| Visual Studio 2019 mit TwinCAT-Plugin | VS 2019 |
| 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