A Windows desktop application that provides agent-less VNC remote control of Windows machines. It deploys TightVNC Server to a remote machine via WMI, connects with TightVNC Viewer, then cleans everything up on disconnect — no pre-installed agent or VNC software needed on the target machine.
Originally created by Chris Tschantz (RemoteControl v1.6.5, 2012, VB.NET / .NET Framework 3.5). This is a complete ground-up rebuild targeting modern Windows.
- Agent-less — nothing needs to be pre-installed on the target machine
- Automatic setup and cleanup — deploys TightVNC Server, connects, then removes all traces on disconnect
- Active Directory browser — browse and search AD for computers (when domain-joined)
- Recent hosts list — saves previously connected machines for quick reconnection
- Unattended mode — pass a hostname as a CLI argument to connect immediately
- ARM64 support — auto-detects 32/64-bit architecture on the remote machine
- Windows 10 or 11
- .NET 8 Desktop Runtime (or use the self-contained build — see below)
- Local admin rights on the target machine (C$ admin share + WMI access)
- Windows 10 or 11
- C$ admin share accessible
- WMI accessible
- Remote Registry service not permanently blocked by Group Policy
By default, Windows home machines block the admin share (C$) and WMI access that RemoteControl needs. Run Prepare-RemoteMachine.ps1 once on each target machine to configure it:
# Open PowerShell as Administrator, then:
Set-ExecutionPolicy Bypass -Scope Process -Force && .\Prepare-RemoteMachine.ps1The script enables OpenSSH Server, PowerShell Remoting, File & Printer Sharing, WMI, and Remote Registry, and lifts the UAC restriction that blocks admin share access for local accounts.
One additional requirement for workgroup machines: the connecting machine must use an account with the same username and password as a local administrator account on the target machine.
Download the latest RemoteControl.exe from the Releases page — no .NET installation needed on the target machine, just copy and run.
- .NET 8 SDK
- TightVNC 2.8.87 binaries (see below)
The 5 resource files must be placed in src/RemoteControl/Resources/ before building:
| File | Source |
|---|---|
tvnserver64.exe |
Extracted from tightvnc-2.8.87-gpl-setup-64bit.msi |
tvnserver32.exe |
Extracted from tightvnc-2.8.87-gpl-setup-32bit.msi |
tvnviewer.exe |
Extracted from tightvnc-2.8.87-gpl-setup-64bit.msi |
screenhooks64.dll |
Extracted from tightvnc-2.8.87-gpl-setup-64bit.msi |
screenhooks32.dll |
Extracted from tightvnc-2.8.87-gpl-setup-64bit.msi |
Download the GPL MSI installers from tightvnc.com, then extract with an MSI extraction tool (e.g. msiexec /a tightvnc-2.8.87-gpl-setup-64bit.msi /qb TARGETDIR=extracted64). See src/RemoteControl/Resources/README.md for full extraction details.
# Build
dotnet build src/RemoteControl.sln
# Run
dotnet run --project src/RemoteControl/RemoteControl.csproj
# Build self-contained single-file executable
dotnet publish src/RemoteControl/RemoteControl.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true- Launch
RemoteControl.exe - Type the hostname or IP address of the target machine and click Connect
- The app validates connectivity, deploys TightVNC Server, and opens the viewer
- Use the remote desktop as needed
- Close the VNC viewer window — the app automatically cleans up the remote machine
Unattended mode:
RemoteControl.exe <hostname>
Options menu:
- Browse AD — tree view of Active Directory OUs and computers (domain-joined machines only)
- Prompt User — when enabled, the remote user is prompted to accept or deny the connection
- Information — about, technical details, release notes, known issues
| Step | Action |
|---|---|
| 1 | Validate: DNS → Ping → C$ admin share → WMI connectivity |
| 2 | Start Remote Registry service on remote machine |
| 3 | Create SoftwareSASGeneration registry key (enables Ctrl+Alt+Del via VNC) |
| 4 | Deploy TightVNC Server files to C:\Windows\Temp\RCTEMP on remote machine |
| 5 | Configure TightVNC Server via remote registry |
| 6 | Install and start TightVNC as a Windows service |
| 7 | Add Windows Firewall rule for TCP port 5993 |
| 8 | Launch TightVNC Viewer and connect |
| 9 | On disconnect: remove service, delete registry keys, delete files, remove firewall rule |
- VNC port: 5993 (non-standard, avoids conflicts with standard VNC on 5900)
- Remote execution: WMI
Win32_Process.Create— no agent required - Authentication: Disabled by design; access controlled via IP ACL and admin share validation
src/
RemoteControl.sln
RemoteControl/
RemoteControl.csproj
Program.cs
Models/
HostEntry.cs
Services/
VncConnectionService.cs # Main orchestrator
NetworkService.cs # DNS, ping, share/WMI checks
RegistryService.cs # Remote registry operations
RemoteExecutionService.cs # WMI command execution
ResourceExtractor.cs # Extracts embedded VNC binaries
HostStorageService.cs # JSON host persistence
EventLogService.cs # Remote event log entries
DomainService.cs # Domain join detection
InputValidation.cs # RFC 1123 / RFC 4515 validation
Logger.cs # File logger
Forms/
MainForm.cs # Main window
AdBrowserForm.cs # Active Directory browser
AdSearchForm.cs # AD computer search
ChangeDomainForm.cs # Domain name dialog
FilterOptionsForm.cs # AD filter options
InformationForm.cs # About / How it Works / Release Notes
Resources/
README.md # Instructions for obtaining TightVNC binaries
- Windows Defender or SmartScreen on the remote machine may flag the TightVNC server executable. In enterprise environments, add an AV exclusion or sign the binary with your organization's code-signing certificate.
- The C$ admin share must be accessible. On workgroup machines, ensure file and printer sharing is enabled and the connecting user has local admin rights.
- The Remote Registry service must not be permanently disabled via Group Policy.
- If the remote machine becomes unreachable during a session, cleanup will be skipped. Reconnecting and doing a clean exit will properly clean up any leftovers.
This project is released for use in enterprise/IT environments. TightVNC is licensed under the GNU GPL v2.
