first commit
This commit is contained in:
1548
KONFIGURATION_DOKUMENTATION.md
Normal file
1548
KONFIGURATION_DOKUMENTATION.md
Normal file
File diff suppressed because it is too large
Load Diff
30
KURZBESCHREIBUNG.txt
Normal file
30
KURZBESCHREIBUNG.txt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
WireGuard Service Installer und VPNTray - Automatisierte VPN-Lösung für Windows
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
Dieses Projekt bietet eine vollautomatische Installation und Verwaltung von
|
||||||
|
WireGuard VPN-Verbindungen unter Windows mit komfortabler Tray-Anwendung.
|
||||||
|
|
||||||
|
KOMPONENTEN:
|
||||||
|
- wireguard_service_installer.cmd: Automatisches Installationsskript
|
||||||
|
- WireGuardMon: Überwachungsdienst für WireGuard-Tunnel
|
||||||
|
- VPNTray: System-Tray-Anwendung mit Statusanzeige
|
||||||
|
- VPNTray.ini: Umfangreiche Konfigurationsdatei
|
||||||
|
|
||||||
|
FEATURES:
|
||||||
|
✓ Ein-Klick Installation mit automatischer WireGuard-Einrichtung
|
||||||
|
✓ WireGuard als Windows-Dienst mit Autostart
|
||||||
|
✓ Tray-Icon mit Echtzeit-Statusanzeige
|
||||||
|
✓ Konfigurierbare Checks: Ping, GeoIP, Speedtest
|
||||||
|
✓ Multi-Tunnel-Unterstützung (wg0, wg1, wg2, ...)
|
||||||
|
✓ Auto-Disconnect bei Firmennetzwerk-Erkennung
|
||||||
|
✓ Interaktive Elemente (RDP, Browser-Links per Klick)
|
||||||
|
✓ Anpassbare Themes (Auto, Dark, Light, Custom)
|
||||||
|
✓ Umfangreiche Variablen für LAN, VPN und GeoIP-Daten
|
||||||
|
|
||||||
|
VERWENDUNG:
|
||||||
|
wireguard_service_installer.cmd C:\Pfad\zur\config.conf
|
||||||
|
|
||||||
|
Das Skript installiert automatisch WireGuard, richtet den Dienst ein,
|
||||||
|
konfiguriert Sicherheitsberechtigungen und startet VPNTray im Autostart.
|
||||||
|
|
||||||
|
Ideal für IT-Support, Helpdesk und Remote-Arbeitsplätze!
|
||||||
2
README.md
Normal file
2
README.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Wireguard-Installer-and-Tray
|
||||||
|
Wireguard als Windows Dienst mit Trayicon für Support
|
||||||
BIN
VPNTray.exe
Normal file
BIN
VPNTray.exe
Normal file
Binary file not shown.
118
VPNTray.ini
Normal file
118
VPNTray.ini
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
# =================================================
|
||||||
|
# VPNTray Konfigurationsdatei
|
||||||
|
# =================================================
|
||||||
|
[General]
|
||||||
|
# Pfad zur Statusdatei von WireGuardMon. Default gleiches Verzeichnis wie .exe und .ini
|
||||||
|
#ITC=C:\Program Files\WireGuard\wireguardmon.itc
|
||||||
|
|
||||||
|
# Schließt die folgenden WireGuard-Dienste von der Überwachung aus.
|
||||||
|
# Disabled=wg1,wg2
|
||||||
|
|
||||||
|
# Visuelles Thema: Auto, Dark, Light, Custom
|
||||||
|
Theme=Auto
|
||||||
|
|
||||||
|
# Zeit in Sekunden, bis das Fenster automatisch schließt (0 = deaktiviert)
|
||||||
|
AutoClose=15
|
||||||
|
|
||||||
|
# AutoDisconnect=DOMAIN
|
||||||
|
# AutoDisconnect=IP:10.11.12.128/25,IP:192.168.178.0/24,DNS:mydomain.local
|
||||||
|
|
||||||
|
# Powermode Checks werden auch bei geschlossener UI ausgeführt (Traffic)
|
||||||
|
#PowerMode=0
|
||||||
|
#[Wireguardmon]
|
||||||
|
#POLL_TIME=30
|
||||||
|
#STEMP_MS=500
|
||||||
|
|
||||||
|
[Theme]
|
||||||
|
# Dieser Abschnitt wird nur bei Theme=Custom verwendet.
|
||||||
|
WindowBackgroundBrush=#FF252525
|
||||||
|
ItemCardBackgroundBrush=#FF3C3C3C
|
||||||
|
ItemHoverBackgroundBrush=#1AFFFFFF
|
||||||
|
SeparatorBrush=#FF555555
|
||||||
|
PrimaryTextBrush=#FFFFFFFF
|
||||||
|
SecondaryTextBrush=#FFB0B0B0
|
||||||
|
ShadowColor=Black
|
||||||
|
|
||||||
|
# =====================================================
|
||||||
|
# Definition der Checks
|
||||||
|
# Jeder [CheckX] Abschnitt ist eine Zeile im Fenster.
|
||||||
|
# =====================================================
|
||||||
|
## Type=
|
||||||
|
# Display - (Standard) Zeigt nur Name und Data an
|
||||||
|
# Ping - Pingt ein Ziel an.
|
||||||
|
# GeoIP - Ermittelt die öffentliche IP und den Standort.
|
||||||
|
# Speedtest - Führt einen Geschwindigkeitstest durch.
|
||||||
|
# Separator - Visuelle Trennlinie.
|
||||||
|
#
|
||||||
|
# --- Allgemeine Check-Einstellungen ---
|
||||||
|
# Name= - Der angezeigte Titel des Checks.
|
||||||
|
# Data= - Die Daten für den Check (z.B. IP-Adresse, URL).
|
||||||
|
# Hidden=True - Versteckt den Check in der UI.
|
||||||
|
#
|
||||||
|
# --- Interaktions-Einstellungen (optional) ---
|
||||||
|
# Click= - Pfad zu einer Datei, die bei Einfachklick gestartet wird.
|
||||||
|
# DblClick= - Pfad zu einer Datei, die bei Doppelklick gestartet wird.
|
||||||
|
# CmdArguments= - Argumente für die Click/DblClick-Aktion.
|
||||||
|
#
|
||||||
|
# --- Verfügbare Variablen für Name= und Data= ---
|
||||||
|
# LAN: $LAN_IP$, $LAN_GW$, $LAN_DNS1$, $LAN_DNS2$, $LAN_TYPE$, $LAN_SPEED$, $LAN_NAME$
|
||||||
|
# WireGuard:$WGX_STATUS$, $WGX_IP$, $WGX_DNS1$, $WGX_DNS2$, $WGX_SERVER_IP$, $WGX_LASTHANDSHAKE$, $WGX_BYTESSEND$, $WGX_BYTESRECV$ (X = Tunnel-Nummer)
|
||||||
|
# GeoIP: $GEO_IP$, $GEO_ORG$, $GEO_CITY$, $GEO_COUNTRY_NAME$, $GEO_COUNTRY_CODE$, $GEO_ASN$, $GEO_TIMEZONE$, $GEO_VERSION$
|
||||||
|
#
|
||||||
|
[Check1]
|
||||||
|
# Zeigt den Typ und die Geschwindigkeit des LAN-Adapters an.
|
||||||
|
Name=$LAN_TYPE$ ($LAN_NAME$) $LAN_SPEED$
|
||||||
|
# Zeigt die lokale IP-Adresse an.
|
||||||
|
Data=$LAN_IP$
|
||||||
|
|
||||||
|
[Check2]
|
||||||
|
# Ping auf den lokalen Router.
|
||||||
|
Name=Router
|
||||||
|
Data=$LAN_GW$
|
||||||
|
Type=Ping
|
||||||
|
|
||||||
|
[Check3]
|
||||||
|
# Führt eine GeoIP-Abfrage durch, um die öffentliche IP und den Standort zu ermitteln.
|
||||||
|
Type=GeoIP
|
||||||
|
|
||||||
|
[Check4]
|
||||||
|
# Ping auf einen öffentlichen DNS-Server zur Prüfung der Internetverbindung.
|
||||||
|
Name=Internet
|
||||||
|
Data=1.1.1.1
|
||||||
|
Type=Ping
|
||||||
|
|
||||||
|
[Check5]
|
||||||
|
# Eine visuelle Trennlinie.
|
||||||
|
Type=Separator
|
||||||
|
|
||||||
|
[Check6]
|
||||||
|
# Ping auf den VPN-Server (Peer).
|
||||||
|
Name=Firewall
|
||||||
|
Data=$WG0_SERVER_IP$
|
||||||
|
Type=Ping
|
||||||
|
|
||||||
|
[Check7]
|
||||||
|
# Ping auf die zugewiesene VPN-IP-Adresse.
|
||||||
|
Name=VPN IP
|
||||||
|
Data=$WG0_IP$
|
||||||
|
Type=Ping
|
||||||
|
|
||||||
|
[Check8]
|
||||||
|
# Ping auf einen internen DNS-Server im Firmennetzwerk.
|
||||||
|
Name=Firmen DNS
|
||||||
|
Data=$WG0_DNS1$
|
||||||
|
Type=Ping
|
||||||
|
|
||||||
|
[Check9]
|
||||||
|
# Ping auf einen Terminalserver. Bei Doppelklick wird eine RDP-Verbindung gestartet.
|
||||||
|
Name=Terminalserver
|
||||||
|
Data=my-terminal-server.company.local
|
||||||
|
Type=Ping
|
||||||
|
DblClick=C:\Windows\System32\mstsc.exe
|
||||||
|
CmdArguments="C:\Path\To\Your\Connection.rdp"
|
||||||
|
|
||||||
|
[Check10]
|
||||||
|
# Führt einen internen Speedtest durch.
|
||||||
|
Name=Speedtest intern
|
||||||
|
Type=Speedtest
|
||||||
|
Data=http://speedtest.internal.net/endpoint.php
|
||||||
98
speedtest.php
Normal file
98
speedtest.php
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* speed.php - All-in-One Speedtest Endpoint
|
||||||
|
*
|
||||||
|
* FÜHRE DIESES SKRIPT EINMALIG PER CLI AUS, UM DIE ZUFALLSDATEN-DATEI ZU GENERIEREN:
|
||||||
|
* > php /pfad/zum/script/speed.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
// --- KONFIGURATION ---
|
||||||
|
define('DATA_FILE_NAME', 'random_data.php');
|
||||||
|
// KORREKTUR: Wir definieren den VOLLSTÄNDIGEN Pfad zur Datendatei,
|
||||||
|
// basierend auf dem Speicherort dieses Skripts. Das ist jetzt idiotensicher.
|
||||||
|
define('DATA_FILE_PATH', __DIR__ . '/' . DATA_FILE_NAME);
|
||||||
|
define('NUM_CHUNKS', 10);
|
||||||
|
define('CHUNK_SIZE_KB', 256);
|
||||||
|
|
||||||
|
|
||||||
|
// --- KONTEXT-WEICHE: CLI oder WEB? ---
|
||||||
|
if (php_sapi_name() === 'cli') {
|
||||||
|
// --- GENERATOR-MODUS ---
|
||||||
|
echo "Führe im CLI-Modus aus. Generiere '" . DATA_FILE_PATH . "'...\n";
|
||||||
|
|
||||||
|
$chunk_size_bytes = CHUNK_SIZE_KB * 1024;
|
||||||
|
$chunks_array = [];
|
||||||
|
for ($i = 0; $i < NUM_CHUNKS; $i++) {
|
||||||
|
echo "Generiere Block " . ($i + 1) . "/" . NUM_CHUNKS . "...\n";
|
||||||
|
$random_data = random_bytes($chunk_size_bytes);
|
||||||
|
$chunks_array[] = base64_encode($random_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$file_content = "<?php\n// " . DATA_FILE_NAME . "\n// Generiert am: " . date('Y-m-d H:i:s') . "\n\n";
|
||||||
|
$file_content .= "\$RANDOM_CHUNKS = [\n";
|
||||||
|
foreach ($chunks_array as $chunk) {
|
||||||
|
$file_content .= " '" . $chunk . "',\n";
|
||||||
|
}
|
||||||
|
$file_content .= "];\n?>";
|
||||||
|
|
||||||
|
// KORREKTUR: Schreibe in den absoluten Pfad.
|
||||||
|
if (file_put_contents(DATA_FILE_PATH, $file_content)) {
|
||||||
|
echo "\nERFOLG: '" . DATA_FILE_PATH . "' wurde erfolgreich erstellt.\n";
|
||||||
|
} else {
|
||||||
|
echo "\nFEHLER: Konnte '" . DATA_FILE_PATH . "' nicht schreiben.\n";
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// --- WEB-MODUS ---
|
||||||
|
|
||||||
|
// Security & Caching Headers
|
||||||
|
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
|
||||||
|
header("Pragma: no-cache");
|
||||||
|
|
||||||
|
// Logik-Weiche: GET für Download, POST für Upload
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
|
// --- UPLOAD LOGIK ---
|
||||||
|
$input = file_get_contents('php://input');
|
||||||
|
$received_bytes = strlen($input);
|
||||||
|
header('Content-Type: text/plain');
|
||||||
|
echo $received_bytes;
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
|
||||||
|
// --- DOWNLOAD LOGIK ---
|
||||||
|
if (!file_exists(DATA_FILE_PATH)) {
|
||||||
|
http_response_code(503); // Service Unavailable
|
||||||
|
echo "FEHLER: Bitte das Skript zuerst einmal per CLI ausführen um Zufallsdaten zu erzeugen.";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once DATA_FILE_PATH;
|
||||||
|
|
||||||
|
$chunks_to_send = isset($_GET['chunks']) ? (int)$_GET['chunks'] : 1;
|
||||||
|
$chunk_size_bytes = CHUNK_SIZE_KB * 1024;
|
||||||
|
$total_size_bytes = $chunks_to_send * $chunk_size_bytes;
|
||||||
|
|
||||||
|
header('Content-Type: application/octet-stream');
|
||||||
|
header('Content-Length: ' . $total_size_bytes);
|
||||||
|
|
||||||
|
for ($i = 0; $i < $chunks_to_send; $i++) {
|
||||||
|
$random_chunk_base64 = $RANDOM_CHUNKS[array_rand($RANDOM_CHUNKS)];
|
||||||
|
echo base64_decode($random_chunk_base64);
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'HEAD') {
|
||||||
|
// Der Jitter-Test sendet HEAD. Wir antworten einfach mit 200 OK.
|
||||||
|
// Der Webserver sorgt dafür, dass kein Body gesendet wird.
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback für andere HTTP-Methoden
|
||||||
|
http_response_code(405);
|
||||||
|
echo "Method Not Allowed";
|
||||||
|
exit();
|
||||||
|
?>
|
||||||
170
wireguard_service_installer.cmd
Normal file
170
wireguard_service_installer.cmd
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
@echo off
|
||||||
|
chcp 65001 >nul
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
|
||||||
|
:: UAC-Elevation prüfen und anfordern
|
||||||
|
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
|
||||||
|
if '%errorlevel%' NEQ '0' (
|
||||||
|
echo Administratorrechte erforderlich. Starte Script als Administrator...
|
||||||
|
goto UACPrompt
|
||||||
|
) else (
|
||||||
|
goto gotAdmin
|
||||||
|
)
|
||||||
|
|
||||||
|
:UACPrompt
|
||||||
|
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
|
||||||
|
echo UAC.ShellExecute "%~s0", "%*", "", "runas", 1 >> "%temp%\getadmin.vbs"
|
||||||
|
"%temp%\getadmin.vbs"
|
||||||
|
del "%temp%\getadmin.vbs"
|
||||||
|
exit /B
|
||||||
|
|
||||||
|
:gotAdmin
|
||||||
|
pushd "%CD%"
|
||||||
|
CD /D "%~dp0"
|
||||||
|
|
||||||
|
:: Parameter prüfen
|
||||||
|
if "%~1"=="" (
|
||||||
|
echo Fehler: Keine WireGuard-Konfigurationsdatei angegeben.
|
||||||
|
echo Verwendung: %0 ^<pfad_zur_wireguard_config^>
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
set "CONFIG_FILE=%~1"
|
||||||
|
|
||||||
|
:: Prüfen ob Konfigurationsdatei existiert
|
||||||
|
if not exist "%CONFIG_FILE%" (
|
||||||
|
echo Fehler: Konfigurationsdatei "%CONFIG_FILE%" nicht gefunden.
|
||||||
|
echo es wird ein WireGuard-Configfile als Parameter erwartet
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo WireGuard Installation und Konfiguration wird gestartet...
|
||||||
|
|
||||||
|
:: WireGuard Installation prüfen und ggf. installieren
|
||||||
|
winget >nul 2>&1
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo Fehler: winget lässt sich nicht ausführen
|
||||||
|
pause >nul
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
echo "Es wird ein Wireguard Service eingerichtet. <strg>+<c> zum beenden, <enter> weiter"
|
||||||
|
pause >nul
|
||||||
|
|
||||||
|
echo Prüfe WireGuard Installation...
|
||||||
|
winget install --id WireGuard.WireGuard --silent --accept-package-agreements --accept-source-agreements
|
||||||
|
|
||||||
|
echo Installiere Microsoft Visual C++ Redistributable...
|
||||||
|
winget install --id Microsoft.VCRedist.2015+.x64 --accept-package-agreements --accept-source-agreements
|
||||||
|
|
||||||
|
:: Config-Verzeichnis erstellen
|
||||||
|
set "CONFIG_DIR=%PROGRAMFILES%\WireGuard\config"
|
||||||
|
echo Erstelle Konfigurationsverzeichnis: %CONFIG_DIR%
|
||||||
|
|
||||||
|
if not exist "%CONFIG_DIR%" (
|
||||||
|
mkdir "%CONFIG_DIR%"
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo Fehler: Konnte Konfigurationsverzeichnis nicht erstellen.
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Berechtigungen setzen - Vererbung entfernen und nur Admin/LocalSystem
|
||||||
|
echo Setze Berechtigungen für Konfigurationsverzeichnis...
|
||||||
|
icacls "%CONFIG_DIR%" /inheritance:d >nul 2>&1
|
||||||
|
icacls "%CONFIG_DIR%" /grant:r "Administratoren:(OI)(CI)F" >nul 2>&1
|
||||||
|
icacls "%CONFIG_DIR%" /grant:r "SYSTEM:(OI)(CI)F" >nul 2>&1
|
||||||
|
icacls "%CONFIG_DIR%" /remove "Benutzer" >nul 2>&1
|
||||||
|
icacls "%CONFIG_DIR%" /remove "Authentifizierte Benutzer" >nul 2>&1
|
||||||
|
|
||||||
|
:: Konfigurationsdatei kopieren
|
||||||
|
set "WG_CONFIG=%CONFIG_DIR%\wg0.conf"
|
||||||
|
echo Kopiere Konfigurationsdatei nach %WG_CONFIG%...
|
||||||
|
copy "%CONFIG_FILE%" "%WG_CONFIG%" >nul
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo Fehler: Konnte Konfigurationsdatei nicht kopieren.
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
:: WireGuard Tunnel Service installieren
|
||||||
|
echo Installiere WireGuard Tunnel Service...
|
||||||
|
"%PROGRAMFILES%\WireGuard\wireguard.exe" /installtunnelservice "%WG_CONFIG%"
|
||||||
|
|
||||||
|
:: Service-Berechtigungen setzen
|
||||||
|
echo Setze Service-Berechtigungen...
|
||||||
|
sc sdset "WireGuardTunnel$wg0" "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;RPWPDTRCWD;;;AU)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)" >nul 2>&1
|
||||||
|
|
||||||
|
:: Zusätzliche Dateien kopieren
|
||||||
|
set "SCRIPT_DIR=%~dp0"
|
||||||
|
set "WG_DIR=%PROGRAMFILES%\WireGuard"
|
||||||
|
|
||||||
|
echo Kopiere zusätzliche Dateien...
|
||||||
|
|
||||||
|
:: WireGuardMon.exe kopieren
|
||||||
|
copy "%SCRIPT_DIR%wireguardmon.exe" "%WG_DIR%\" >nul
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo Warnung: Konnte wireguardmon.exe nicht kopieren.
|
||||||
|
pause
|
||||||
|
) else (
|
||||||
|
echo wireguardmon.exe erfolgreich kopiert.
|
||||||
|
)
|
||||||
|
|
||||||
|
:: VPNTray.exe kopieren
|
||||||
|
copy "%SCRIPT_DIR%VPNTray.exe" "%WG_DIR%\" >nul
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo Warnung: Konnte VPNTray.exe nicht kopieren.
|
||||||
|
pause
|
||||||
|
) else (
|
||||||
|
echo VPNTray.exe erfolgreich kopiert.
|
||||||
|
)
|
||||||
|
|
||||||
|
:: VPNTray.ini kopieren
|
||||||
|
copy "%SCRIPT_DIR%VPNTray.ini" "%WG_DIR%\" >nul
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo Warnung: Konnte VPNTray.ini nicht kopieren.
|
||||||
|
pause
|
||||||
|
) else (
|
||||||
|
echo VPNTray.ini erfolgreich kopiert.
|
||||||
|
)
|
||||||
|
|
||||||
|
:: WireGuardMon installieren
|
||||||
|
if exist "%WG_DIR%\wireguardmon.exe" (
|
||||||
|
echo Installiere WireGuardMon...
|
||||||
|
pushd "%WG_DIR%"
|
||||||
|
wireguardmon.exe --install
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo Warnung: WireGuardMon Installation fehlgeschlagen.
|
||||||
|
pause
|
||||||
|
) else (
|
||||||
|
echo WireGuardMon erfolgreich installiert.
|
||||||
|
net start wireguardmon
|
||||||
|
)
|
||||||
|
popd
|
||||||
|
) else (
|
||||||
|
echo Warnung: WireGuardMon nicht verfügbar - Installation übersprungen.
|
||||||
|
pause >nul
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Autostart-Eintrag für VPNTray.exe erstellen
|
||||||
|
if exist "%WG_DIR%\VPNTray.exe" (
|
||||||
|
echo Erstelle Autostart-Eintrag für VPNTray...
|
||||||
|
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "VPNTray" /t REG_SZ /d "\"%WG_DIR%\VPNTray.exe\"" /f >nul 2>&1
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo Warnung: Autostart-Eintrag konnte nicht erstellt werden.
|
||||||
|
pause
|
||||||
|
) else (
|
||||||
|
echo Autostart-Eintrag für VPNTray erfolgreich erstellt.
|
||||||
|
)
|
||||||
|
start "" explorer.exe "%WG_DIR%\VPNTray.exe"
|
||||||
|
) else (
|
||||||
|
echo Warnung: VPNTray.exe nicht verfügbar - Autostart-Eintrag übersprungen.
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo Drücke eine beliebige Taste zum Beenden...
|
||||||
|
pause >nul
|
||||||
|
|
||||||
|
endlocal
|
||||||
BIN
wireguardmon.exe
Normal file
BIN
wireguardmon.exe
Normal file
Binary file not shown.
Reference in New Issue
Block a user