2018年6月27日に以下の製品の運用環境のサポート対象に「Microsoft RemoteApp」(以下RemoteApp)を追加しました。
- InputManPlus for Windows Forms(Update 2以降で対応)
- InputManPlus for WPF
- MultiRowPlus for Windows Forms(Update 2以降で対応)
RemoteAppに対応している製品の詳細はこちらをご覧ください。
RemoteAppは、Windows Serverのリモート デスクトップ サービス(旧称:ターミナルサービス)が提供する機能の1つで、ホストで実行されるアプリケーションの画面だけを転送してクライアントのデスクトップ上に表示・操作させる、アプリケーションの仮想化を実現する機能です。
今回はHyper-V上に構築したWindows Server 2016の環境を使って、InputManPlus for WPFのサンプルアプリケーションをRemoteAppで配信してみたいと思います。
Active Directory環境上での構築が推奨
RemoteAppの環境は、Active Directory(ドメイン)環境上に構築することが推奨されており、非ドメイン環境ではリモート デスクトップ サービスのインストールすら制限されてしまいます。
しかし、Active Directoryとアプリケーションは別々のサーバーで運用したいということも多々あるかと思います。
非ドメイン環境でのRemoteAppの設定方法は、Microsoftの公式サイトに方法が紹介されていたので、今回はこれに沿って非ドメイン環境での動作を試してみます。
リモート デスクトップ セッション ホストのインストール
[検証環境]
- ホスト側
- OS:Windows Server 2016 (Hyper-V)
- クライアント側
- OS:Windows 10
ホスト側のWindows ServerでWindows PowerShellを起動し、以下コマンドを順に実行し、 [リモート デスクトップ セッション ホスト] 役割サービスと、 [ライセンス診断] ツールをそれぞれインストールします。
> Add-WindowsFeature -Name RDS-RD-Server
> Add-WindowsFeature -Name RSAT-RDS-Licensing-Diagnosis-UI
機能のインストールが完了したら、システムを再起動します。
なお、RemoteAppの環境を構築する場合、GUI環境が必要なので、OSインストール時にデスクトップエクスペリエンスオプションを選択してインストールするか、後で追加でインストールしてください。今回はOSインストール時にデスクトップエクスペリエンスを有効にしていたので、このまま進みます。
リモート デスクトップ ライセンスのインストール、ライセンス サーバーの設定
リモートデスクトップサービスを利用するには、本来であればホストに適切なライセンスの設定が必要ですが、 [リモート デスクトップ セッション ホスト] 役割サービスのインストール後120日間は猶予期間としてライセンス無しで利用できます。
今回は動作確認のための一時利用なので、このライセンスサーバーの設定の手順はスキップします。
商用で長期利用する場合は、前述のMicrosoftの公式サイトに記載の方法で設定を行ってください。
アプリケーションの配置と登録
次にRemoteAppで配信するアプリケーションをホスト環境に配置します。今回はInputManPlus for WPFに含まれる「Functionsプロジェクト」サンプルをあらかじめビルドし、ホスト環境にコピーします。
次にレジストリにRemoteAppで公開するアプリケーションの登録を行います。今回はimwpfsample
という名前を付けてレジストリキー登録します。
注意:レジストリに不正な値を書き込んだ場合、システムに重大な障害を及ぼす可能性があります。システムのバックアップをとるなど、操作は自己の責任で慎重に行ってください。
> $regPath = “HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications” > New-Item -Force $regPath -Name imwpfsample > New-ItemProperty $regPath\imwpfsample -Name CommandLineSetting -Value 0 -PropertyType Dword > New-ItemProperty $regPath\imwpfsample -Name Name -Value Paint -PropertyType String > New-ItemProperty $regPath\imwpfsample -Name Path -Value C:\work\GrapeCity.WPF.InputMan.Sample.Functions.exe -PropertyType String > New-ItemProperty $regPath\imwpfsample -Name RequiredCommandLine -PropertyType String > New-ItemProperty $regPath\imwpfsample -Name SecurityDescriptor -PropertyType String > New-ItemProperty $regPath\imwpfsample -Name ShowInTSWA -Value 1 -PropertyType Dword
レジストリエディタで登録後のレジストリキーを見るとこのようになります。
リモートアクセスの許可
次にリモートアクセス可能なユーザーをホスト側に設定します。コントロールパネルから「リモートアクセスの許可」を選択します。
「このコンピュータへのリモート接続を許可する」を選択し、「ユーザーの選択」をクリックします
許可するユーザーを設定します。今回はあらかじめ作っておいたtaro
というユーザーを許可リストに加えます。
rdpファイルの作成
最後に接続のためのrdpファイルを作成します。テキストエディタに以下を貼り付けtest.rdp
として保存します。アプリケーション名には先ほど設定したレジストリキーimwpfsample
を指定します。
redirectclipboard:i:1 redirectposdevices:i:0 redirectprinters:i:1 redirectcomports:i:1 redirectsmartcards:i:1 devicestoredirect:s:* drivestoredirect:s:* redirectdrives:i:1 session bpp:i:32 prompt for credentials on client:i:1 span monitors:i:1 use multimon:i:1 remoteapplicationmode:i:1 server port:i:3389 allow font smoothing:i:1 promptcredentialonce:i:1 authentication level:i:2 gatewayusagemethod:i:2 gatewayprofileusagemethod:i:0 gatewaycredentialssource:i:0 full address:s:<ホストのサーバー名もしくは IP アドレス> alternate shell:s:||imwpfsample remoteapplicationprogram:s:||imwpfsample gatewayhostname:s: remoteapplicationname:s:imwpfsample remoteapplicationcmdline:s:
RemoteAppでアプリを実行
Windows 10のクライアント環境に先ほど作成したrdpファイルを配布し実行します。先ほど設定したtaro
の資格情報を入力し進むと、ホストのサーバーに配置していたアプリケーションが立ち上がります。(ホスト側で実行したアプリの画面が転送されてきた状態)
もちろん操作も可能です。
アプリケーションの仮想化ができると各端末にアプリケーション自体を配布する必要もなく、サーバー側で一元管理できるので便利ですね。
製品の機能を試すには
今回RemoteAppに対応した製品の基本機能を手軽に体感できるデモアプリケーションをWebサイトで公開しています。以下よりアクセスして是非お試しください!
- InputManPlus for Windows Forms(InputMan|PlusPak|JPAddress)
- InputManPlus for WPF(InputMan)
- MultiRowPlus for Windows Forms(MultiRow|CalendarGrid)
開発者におすすめのフォーラム
7月10日(火)に弊社の開発支援ツール販売30周年記念フォーラム「Toolsの杜(ツールのもり)」を開催します。
弊社の.NET開発支援コンポーネントの最新動向や、実際の開発事例についてのセッションも行います。ぜひご参加ください。