WEBサイトのリンクでリモートデスクトップ接続(Windows専用)

2021/10/01


初めにレジストリキーでプロトコルスキーム「RDP:」を作成します。(名称は任意なのでXXXでも可)
 ≪ プロトコル追加レジストリサンプル ≫
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\rdp]
"URL Protocol"=""
[HKEY_CLASSES_ROOT\rdp\shell]
[HKEY_CLASSES_ROOT\rdp\shell\open]
[HKEY_CLASSES_ROOT\rdp\shell\open\command]
@="C:\Windows\System32\mstsc.exe /v:SERVER1:3389 /f"

上記の例では rdp: というスキームで SERVER1にRDP接続 を呼び出す設定です。
WEBサーバー側のHTMLでは以下のよう記述にします。
ex)<a href="rdp:">Connect</a>

  SERVER1:Connect

ちなみに上記のレジストリでmstsc.exeにRDPファイルを指定する場合、 RDPファイルを配置するパスはユーザーのデスクトップになります。 ※「..\」を使っても上層へのアクセスはできません。

「C:\Windows\System32\mstsc.exe %1」としてパラメータとして渡す場合、 ホームパスはユーザーデスクトップで上層アクセス不可は一緒です。 また、プロトコルスキームも一緒に渡されるため、mstscが受け取れません。 以下に例を示します。

例)ユーザープロファイルパスが【C:\Users\USR1\Desktop】で<a href="rdp:TestServer.RDP">とした場合、 %1は【C:\Users\USR1\Desktop\rdp:TestServer.RDP】になります。
せっかくだからもう少し頑張って %1 に渡されるパラメータに入る スキーム文字列をバッチファイルで除去(バッチファイルが動いてしまえばあとは色々どうにでもできますし?)してみます。
まずは前述のプロトコル追加レジストリの最終行の内容を以下のように変更します。
@=cmd.exe /c start "" /min S:\share\makeps.bat %1
これでリンクをクリックするとcmd.exe経由でバッチファイルが呼び出されるようになります。

次に上で指定したバッチファイル[makeps.bat]を作ります。[S:\share\]は端末から見たパスです。
このままだと使い方によっては不具合が出ますので状況に応じて修正してください。
(例 %1が「/v:SVrdp:3389」→「/v:SV3389」となってしまう)
@echo off
setlocal ENABLEDELAYEDEXPANSION
set prm=%1
set prm=%prm:rdp:=%
set prm=!prm:%%5C=\!
c:\windows\system32\mstsc.exe %prm%
exit

最後にサーバ側のHTMLソースを以下の4パターンの何れかに変更します。
ex) <a href="rdp:S:/share/SERVER1.rdp">Connect</a>
  <a href="rdp:S:\share\SERVER2.rdp">Connect</a>
  <a href="rdp:\\FileServer\share\SERVER3.rdp">Connect</a>
  <a href="rdp:/v:SERVER4:3389">Connect</a>

 SERVER1:Connect
 SERVER2:Connect
 SERVER3:Connect
 SERVER4:Connect
"rdp://FileServer/SERVER1.rdp" としたり、"rdp:http://127.0.0.1/SERVER1.rdp" とすると失敗しますので表記には注意してください。