- Native x64 MSTSC-DVC-Erweiterung für lokalen Programmstart - Automatischer Script-/Programmstart bei RDP-Verbindungsaufbau - Separater Programmstart über Trigger innerhalb der RDP-Sitzung - Bidirektionaler DVC zur Ermittlung des lokalen Client-Hostnamens - SIOMIN-Trigger zur Anbindung lokaler Sidexis-Installationen - SIOMIN-Datensatzlängen und Hostname-Felder bytegenau angepasst - Temporäre SIOMIN-Einträge nach erfolgreicher Übernahme bereinigt - Native Win32-Konfigurationsoberfläche ohne .NET-Abhängigkeit - Mehrfachstartschutz und optionaler unsichtbarer Programmstart - Debug- und Plugin-Logging ergänzt - RemoteVDDS-Anwendungsfall integriert - Installer/Registrierung des MSTSC-Plugins über Client-Konfigurator - Techniker-, Entwickler- und Projektdokumentation ergänzt - Proprietäre Lizenz für Copyright Patrick Gniza hinzugefügt
235 lines
7.5 KiB
Markdown
235 lines
7.5 KiB
Markdown
# Plandent MSTSC Script Hook
|
||
|
||
Native Windows-x64-Lösung zur Verbindung von lokal auf einem RDP-Client installierten Programmen mit Anwendungen und Abläufen innerhalb einer Terminalserver-Sitzung.
|
||
|
||
Das Projekt ist insbesondere für drei praktische Einsatzfälle vorgesehen:
|
||
|
||
1. **RemoteVDDS-Receiver beim Aufbau einer RDP-Verbindung automatisch lokal starten.**
|
||
2. **Ein fest vorkonfiguriertes lokales Programm bei Bedarf aus der RDP-Sitzung starten.**
|
||
3. **Eine Anwendung innerhalb der RDP-Sitzung über SIOMIN/SLIDA mit einem lokal installierten Sidexis verbinden.**
|
||
|
||
Die Lösung ist für den klassischen Microsoft Remote Desktop Connection Client `mstsc.exe` ausgelegt.
|
||
|
||
## Typischer Einsatzzweck
|
||
|
||
In einer Terminalserver-Umgebung befinden sich Praxissoftware oder andere Fachanwendungen innerhalb der RDP-Sitzung, während bestimmte Programme auf dem lokalen Arbeitsplatzrechner ausgeführt werden müssen.
|
||
|
||
Der Plandent MSTSC Script Hook stellt dafür eine kontrollierte Verbindung zwischen Terminalserver-Sitzung und lokalem Client bereit. Programme und Parameter werden ausschließlich auf dem Client vorkonfiguriert. Eine Anwendung auf dem Terminalserver kann keinen beliebigen lokalen Programmpfad übergeben.
|
||
|
||
## Komponenten
|
||
|
||
### Lokaler RDP-Client
|
||
|
||
**`PlandentMstscScriptHook.exe`**
|
||
|
||
Konfiguration und Installation des Client-Plugins. Hier werden zwei voneinander unabhängige Starts eingerichtet:
|
||
|
||
- automatischer Programm-/Scriptstart nach erfolgreichem RDP-Verbindungsaufbau,
|
||
- Programm-/Scriptstart auf Anforderung aus der Terminalserver-Sitzung.
|
||
|
||
Die benötigte Plugin-DLL ist in der EXE eingebettet und wird bei der Installation automatisch eingerichtet.
|
||
|
||
### Terminalserver
|
||
|
||
**`PlandentRdpClientTrigger.exe`**
|
||
|
||
Löst innerhalb der aktuellen RDP-Sitzung den auf dem Client vorkonfigurierten Programmstart aus.
|
||
|
||
Die EXE benötigt keine Parameter. Welches Programm gestartet wird, ist ausschließlich auf dem lokalen Client hinterlegt.
|
||
|
||
**`PlandentSiominClientTrigger.exe`**
|
||
|
||
Spezialisierter Trigger zur Anbindung einer Anwendung innerhalb der RDP-Sitzung an ein lokal installiertes Sidexis.
|
||
|
||
Der Trigger:
|
||
|
||
- ermittelt den tatsächlichen Hostnamen des lokalen RDP-Clients,
|
||
- übernimmt einen temporär erzeugten SIOMIN-/SLIDA-Eintrag,
|
||
- ersetzt darin den Terminalservernamen durch den Hostnamen des lokalen Clients,
|
||
- schreibt den angepassten Eintrag in die finale `siomin.sdx`,
|
||
- leert anschließend die temporäre Datei,
|
||
- startet danach das auf dem Client konfigurierte Programm.
|
||
|
||
## RemoteVDDS
|
||
|
||
Ein vorgesehener Anwendungsfall ist die Verwendung mit den **RemoteVDDS-Scripten von Tobias Bauer**.
|
||
|
||
Der RemoteVDDS-Receiver kann über den Bereich **Automatischer Start bei RDP-Verbindung** auf dem Client eingetragen werden. Dadurch wird der Receiver beim Aufbau der Terminalserver-Verbindung automatisch und auf Wunsch unsichtbar im Hintergrund gestartet.
|
||
|
||
Beispiel:
|
||
|
||
```text
|
||
Programm/Script:
|
||
C:\RemoteVDDS\RemoteVDDS_Receiver_TS.bat
|
||
|
||
Argumente:
|
||
MIN
|
||
|
||
Unsichtbar starten:
|
||
Ja
|
||
|
||
Mehrfachstart verhindern:
|
||
Ja
|
||
```
|
||
|
||
Bei Auswahl einer Datei mit `RemoteVDDS_Receiver_TS` im Namen schlägt der Konfigurator bei leeren Argumenten automatisch `MIN` vor.
|
||
|
||
Die RemoteVDDS-Scripte selbst sind **nicht Bestandteil dieses Projekts** und unterliegen den Rechten ihres jeweiligen Autors.
|
||
|
||
## Programmstart aus der RDP-Sitzung
|
||
|
||
Soll ein lokales Programm nicht bei jeder RDP-Verbindung, sondern nur bei Bedarf gestartet werden, wird es auf dem Client im Bereich **Programmstart durch Terminalserver** konfiguriert.
|
||
|
||
Innerhalb der RDP-Sitzung wird anschließend lediglich ausgeführt:
|
||
|
||
```text
|
||
PlandentRdpClientTrigger.exe
|
||
```
|
||
|
||
Der Trigger startet das auf dem Client hinterlegte Programm. Programmpfad und Parameter werden nicht vom Terminalserver übertragen.
|
||
|
||
## Sidexis über SIOMIN aus einer RDP-Sitzung ansprechen
|
||
|
||
Für Programme, die innerhalb der Terminalserver-Sitzung laufen, aber ein **lokal installiertes Sidexis** ansprechen sollen, steht `PlandentSiominClientTrigger.exe` zur Verfügung.
|
||
|
||
Im betreffenden Terminalprogramm wird als Sidexis-Programm bzw. Sidexis-EXE nicht direkt Sidexis, sondern beispielsweise folgende Datei hinterlegt:
|
||
|
||
```text
|
||
C:\PDATA\exe\PlandentSiominClientTrigger.exe
|
||
```
|
||
|
||
Das Terminalprogramm sollte seinen SLIDA-/SIOMIN-Eintrag zunächst in eine **lokale temporäre Datei auf dem Terminalserver** schreiben, beispielsweise:
|
||
|
||
```text
|
||
C:\PDATA\temp_siomin.sdx
|
||
```
|
||
|
||
Der SIOMIN-Trigger übernimmt diesen Eintrag anschließend in die finale `siomin.sdx`, die typischerweise im gemeinsamen PDATA-Verzeichnis liegt:
|
||
|
||
```text
|
||
\\SERVER\PDATA\siomin.sdx
|
||
```
|
||
|
||
Die Konfiguration erfolgt über eine INI-Datei mit demselben Basisnamen wie die EXE:
|
||
|
||
```text
|
||
PlandentSiominClientTrigger.exe
|
||
PlandentSiominClientTrigger.ini
|
||
```
|
||
|
||
Beispiel:
|
||
|
||
```ini
|
||
[SIOMIN]
|
||
SIOMIN_TEMP_PATH=C:\PDATA\temp_siomin.sdx
|
||
SIOMIN_PATH=\\SERVER\PDATA\siomin.sdx
|
||
DEBUG=0
|
||
```
|
||
|
||
Existiert die INI beim ersten Start nicht, wird sie mit lokalen Standardpfaden automatisch erzeugt:
|
||
|
||
```ini
|
||
[SIOMIN]
|
||
SIOMIN_TEMP_PATH=C:\PDATA\temp_siomin.sdx
|
||
SIOMIN_PATH=C:\PDATA\siomin.sdx
|
||
DEBUG=0
|
||
```
|
||
|
||
Für die Fehlersuche kann `DEBUG=1` gesetzt werden. Dann wird neben der EXE eine gleichnamige `.log`-Datei erzeugt.
|
||
|
||
## Installation auf dem Client
|
||
|
||
1. `PlandentMstscScriptHook.exe` starten.
|
||
2. Gewünschten automatischen Start konfigurieren oder deaktivieren.
|
||
3. Optional ein separates Programm für den Terminalserver-Trigger konfigurieren.
|
||
4. Bei Bedarf **Start durch Terminalserver-Trigger erlauben** aktivieren.
|
||
5. Einstellungen speichern bzw. **Plugin installieren** wählen.
|
||
6. Bereits laufende `mstsc.exe`-Instanzen vollständig schließen.
|
||
7. RDP-Verbindung neu aufbauen.
|
||
|
||
Die Installation erfolgt benutzerbezogen und benötigt im Normalfall keine Administratorrechte.
|
||
|
||
## Bereitstellung auf dem Terminalserver
|
||
|
||
Je nach Anwendungsfall werden nur die benötigten EXE-Dateien auf den Terminalserver kopiert:
|
||
|
||
```text
|
||
PlandentRdpClientTrigger.exe
|
||
PlandentSiominClientTrigger.exe
|
||
```
|
||
|
||
Es ist dort keine Installation oder Registrierung erforderlich.
|
||
|
||
## Unterstützte lokale Programme
|
||
|
||
Der Client kann folgende Typen starten:
|
||
|
||
- `.exe`
|
||
- `.bat`
|
||
- `.cmd`
|
||
- `.ps1`
|
||
|
||
Programme können sichtbar oder unsichtbar gestartet werden. Optional kann ein Mehrfachstart verhindert werden.
|
||
|
||
## Logging
|
||
|
||
Das Client-Plugin kann ein Log unter folgendem Pfad führen:
|
||
|
||
```text
|
||
%LOCALAPPDATA%\Plandent\MstscScriptHook\plugin.log
|
||
```
|
||
|
||
Für den SIOMIN-Trigger kann separat über
|
||
|
||
```ini
|
||
DEBUG=1
|
||
```
|
||
|
||
eine Logdatei neben `PlandentSiominClientTrigger.exe` aktiviert werden.
|
||
|
||
## Build
|
||
|
||
Voraussetzungen:
|
||
|
||
- Windows 10/11 x64
|
||
- Visual Studio 2022 oder Build Tools
|
||
- Workload **Desktopentwicklung mit C++**
|
||
- Windows 10/11 SDK
|
||
|
||
Release erstellen:
|
||
|
||
```powershell
|
||
.\build-release.ps1 -Clean
|
||
```
|
||
|
||
Ausgabe:
|
||
|
||
```text
|
||
dist\
|
||
├── PlandentMstscScriptHook.exe
|
||
├── PlandentRdpClientTrigger.exe
|
||
└── PlandentSiominClientTrigger.exe
|
||
```
|
||
|
||
Alle Komponenten sind native x64-Binaries. Eine .NET-Runtime wird nicht benötigt.
|
||
|
||
## Dokumentation
|
||
|
||
- `Home.md` – Anwender-/Technikerdokumentation
|
||
- `DEVELOPMENT.md` – technische Entwicklerdokumentation
|
||
|
||
## Hinweise
|
||
|
||
Das Projekt ist für den klassischen Microsoft-RDP-Client `mstsc.exe` vorgesehen. Der Trigger muss innerhalb der RDP-Sitzung ausgeführt werden, deren lokaler Client angesprochen werden soll.
|
||
|
||
Der lokale Programmstart erfolgt mit den Rechten des Benutzers, unter dem `mstsc.exe` auf dem Client ausgeführt wird.
|
||
|
||
Produktnamen wie Sidexis sind Eigentum der jeweiligen Rechteinhaber. Die RemoteVDDS-Scripte von Tobias Bauer sind nicht Bestandteil dieses Projekts.
|
||
|
||
## Lizenz
|
||
|
||
Copyright (c) 2026 Patrick Gniza.
|
||
All rights reserved.
|
||
|
||
Siehe [LICENSE](LICENSE).
|