В этой статье объясняется, как запустить приложение для Windows на удаленном устройстве. This article explains how to launch a Windows app on a remote device.

Начиная с Windows 10 версии 1607, приложение UWP может запускать приложение UWP или классическое приложение для Windows удаленно на другом устройстве, которое также работает с Windows 10 версии 1607 или выше, при условии что вход на обоих устройствах выполнен с той же учетной записью Майкрософт (MSA). Starting in Windows 10, version 1607, a UWP app can launch a UWP app or Windows desktop application remotely on another device that is also running Windows 10, version 1607 or later, provided that both devices are signed on with the same Microsoft Account (MSA). Это самый простой вариант использования Project Rome. This is the simplest use case of Project Rome.

Функция удаленного запуска создает удобную пользовательскую среду для выполнения задач, и пользователь может начать выполнять задачу на одном устройстве и завершить на другом. The remote launch feature enables task-oriented user experiences; a user can start a task on one device and finish it on another. Например, если пользователь слушает музыку на телефоне в своей машине, придя домой, он или она может продолжить воспроизведение на Xbox One. For example, if the user is listening to music on their phone in their car, they could then hand playback functionality over to their Xbox One when they arrive at home. Удаленный запуск позволяет приложениям передавать контекстные данные в запускаемое удаленное приложение и продолжать работу в нем. Remote launch allows apps to pass contextual data to the remote app being launched, in order to pick up where the task was left off.

Предварительная настройка Preliminary setup

Добавление возможности remoteSystem Add the remoteSystem capability

Чтобы приложение могло запускать другое приложение на удаленном устройстве, вам потребуется добавить возможность remoteSystem в манифест пакета приложений. In order for your app to launch an app on a remote device, you must add the remoteSystem capability to your app package manifest. Вы можете использовать конструктор манифестов приложений для добавления этой возможности, выбрав Удаленная система на вкладке Возможности. Кроме того, можно вручную добавить следующую строку в файл Package.appxmanifest вашего проекта. You can use the package manifest designer to add it by selecting Remote System on the Capabilities tab, or you can manually add the following line to your project’s Package.appxmanifest file.

Возможность совместной работы на разных устройствах Enable cross-device sharing

Кроме того на клиентском устройстве должно быть разрешено использование на нескольких устройствах. Additionally, the client device must be set to allow cross-device sharing. Этот параметр, к которому можно получить в параметры: Система > общие возможности > общей папки на устройствах, включены по умолчанию. This setting, which is accessed in Settings: System > Shared experiences > Share across devices, is enabled by default.

Поиск удаленного устройства Find a remote device

Сначала вам потребуется найти устройство, к которому нужно подключиться. You must first find the device that you want to connect with. В статье Обнаружение удаленных устройств подробно описано, как это сделать. Discover remote devices discusses how to do this in detail. Мы воспользуемся простым способом, не прибегая к фильтрации по типу устройства или подключения. We’ll use a simple approach here that forgoes filtering by device or connectivity type. Мы создадим наблюдатель удаленных систем для поиска удаленных устройств и создадим обработчики событий, которые возникают при удалении или обнаружении устройств. We will create a remote system watcher that looks for remote devices, and write handlers for the events that are raised when devices are discovered or removed. Так мы получим коллекцию удаленных устройств. This will provide us with a collection of remote devices.

В коде из этих примеров требуется, чтобы в ваших файлах класса имелся оператор using Windows.System.RemoteSystems . The code in these examples requires that you have a using Windows.System.RemoteSystems statement in your class file(s).

Перед удаленным запуском необходимо сначала вызвать метод RemoteSystem.RequestAccessAsync() . The first thing you must do before making a remote launch is call RemoteSystem.RequestAccessAsync() . Проверьте полученное значение и убедитесь, что у вашего приложения есть разрешение на доступ к удаленным устройствам. Check the return value to make sure your app is allowed to access remote devices. Эта проверка может не удаться, если вы не добавили возможность remoteSystem в приложение. One reason this check could fail is if you haven’t added the remoteSystem capability to your app.

Обработчики событий наблюдателя систем вызываются при обнаружении устройства, к которому можно подключиться, или прекращении доступа к нему. The system watcher event handlers are called when a device that we can connect with is discovered or is no longer available. Мы будем использовать эти обработчики событий для ведения актуального списка устройств, к которым можно подключиться. We will use these event handlers to keep an updated list of devices that we can connect to.

Мы будет отслеживать устройства по идентификатору удаленной системы с помощью словаря. We will track the devices by remote system ID using a Dictionary. Для содержания исчисляемого списка устройств используется класс ObservableCollection. An ObservableCollection is used to hold the list of devices that we can enumerate. Класс ObservableCollection также упрощает привязку списка устройств к пользовательскому интерфейсу, но мы не будем этого делать в нашем примере. An ObservableCollection also makes it easy to bind the list of devices to UI, though we won’t do that in this example.

Добавьте вызов метода BuildDeviceList() в код запуска приложения перед запуском удаленного приложения. Add a call to BuildDeviceList() in your app startup code before you attempt to launch a remote app.

Запуск приложения на удаленном устройстве Launch an app on a remote device

Запустите приложение удаленно, указав устройство, к которому требуется подключиться, в API RemoteLauncher.LaunchUriAsync. Launch an app remotely by passing the device you wish to connect with to the RemoteLauncher.LaunchUriAsync API. Для этого метода существует три перегрузки. There are three overloads for this method. В самой простой из них, используемой в этом примере, указывается универсальный код ресурса (URI), с помощью которого активируется приложение на удаленном устройстве. The simplest, which this example demonstrates, specifies the URI that will activate the app on the remote device. В этом примере с помощью URI открывается приложение "Карты" на удаленной системе с трехмерным представлением башни Спейс-Нидл. In this example the URI opens the Maps app on the remote machine with a 3D view of the Space Needle.

Другие перегрузки RemoteLauncher.LaunchUriAsync позволяют указывать такие параметры, как URI веб-сайта для проверки невозможности запуска подходящего приложения, способного обработать этот URI, на удаленном устройстве, и необязательный список имен семейства пакетов, который можно использовать для запуска этого URI на удаленном устройстве. Other RemoteLauncher.LaunchUriAsync overloads allow you to specify options such as the URI of the web site to view if no appropriate app can be launched on the remote device, and an optional list of package family names that could be used to launch the URI on the remote device. Вы также можете предоставить данные в виде пар "ключ-значение". You can also provide data in the form of key/value pairs. Вы можете передать данные приложению, которое запускается, чтобы предоставить контекст для удаленного приложения, например название песни, которую требуется воспроизвести, и текущее расположение воспроизведения при передаче воспроизведения с одного устройства на другое. You might pass data to the app you are activating to provide context to the remote app, such as the name of the song to play and the current playback location when you hand off playback from one device to another.

В практических сценариях можно предоставить пользовательский интерфейс для выбора целевого устройства. In practical scenarios, you might provide UI to select the device you want to target. Однако для упрощения этого примера мы воспользуемся только первым удаленным устройством из списка. But to simplify this example, we’ll just use the first remote device on the list.

Объект RemoteLaunchUriStatus, возвращаемый методом RemoteLauncher.LaunchUriAsync() , содержит сведения об успешном удаленном запуске или причинах его сбоя. The RemoteLaunchUriStatus object that is returned from RemoteLauncher.LaunchUriAsync() provides information about whether the remote launch succeeded, and if not, the reason why.

Удаленный Справочник по API системы Remote Systems API reference
Подключенных приложений и устройств (проект рим) Обзор Connected apps and devices (Project Rome) overview
Обнаружение удаленных устройств Discover remote devices
Пример удаленных систем демонстрирует, как обнаружить удаленную систему, запустить приложение в удаленной системе и использовать службы приложений для передачи сообщений между приложениями, работающими в двух системах. Remote Systems sample demonstrates how to discover a remote system, launch an app on a remote system, and use app services to send messages between apps running on two systems.

Рассмотрим замечательную утилиту PSEXEC от Microsoft. Утилита мощная с большими возможностями, рассмотрим возможность как установки ПО так и удаления на удаленном ПК пользователя без его ведома. (Скачать утилиту можно тут)

Установка ПО/Удаление ПО осуществляются по одному принципу, с помощью исполняемых файлов *.bat.

Бывают случаи когда нужно установить или удалить нужную программу на ПК пользователя, но по ряду причин нет физического доступа к ПК, ну или простая админская лень вставать со своего трона 🙂

Рассмотрим пример скрипта установки ПО FusionInventory Agent.

Создаем обычный текстовый файл, именуем его install_FUInv.bat далее на созданном файле нажимаем ПКМ (правой кнопкой мыши) и нажимаем Изменить и вписываем вот это:

Psexec будет очень полезна для решения задач связанных с удаленным администрированием. Она позволяет удаленно выполнять команды командной строки Windows и незаметно устанавливать программы на любой компьютер в сети со воего компьютера. Для наглядности рассмотрим работу программы на некоторых примерах.

Для того чтобы psexec смог беспрепятственно подключиться к удаленной рабочей станции с Windows версии 7 и позднее, на этих самых удаленных компьютерах должны быть включены административные ресурсы C$ D$ IPC$ Admin$.

Для включения административных шар добавляем в реестр запись:
reg add «HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem» /v «LocalAccountTokenFilterPolicy» /t REG_DWORD /d 1 /f

Например нужно узнать конфигурацию сетевого интерфейса компьютера в сети.

Запускаем коммандную строку CMD и набираем комманду

psexec \172.16.0.121 ipconfig

Можно запустить исполняемый файл со своего компьютера на удаленный или даже несколько удаленных ПК. Ключ /c использовался, чтобы указать путь к файлу на локальной машине.

Если psexec нужно выполнить на большом числе компьютерах, то при помощи праметра @ можно указать текстовый файл, в котором будет указан список ip адресов компьютеров:

psexec @ip-list.txt cmd -c c:patch.bat

При помощи PsExec можно поменять пароль учетной записи в удаленной системе

Параметры запуска Psexec

Указывает программе PsExec, что нужно запустить приложение на всех компьютерах, перечисленных в заданном текстовом файле.

-a

Процессоры, на которых можно запустить приложение, отделяются запятыми, при этом процессоры нумеруются, начиная с 1. Например, чтобы запустить приложение на процессорах втором и четвертом, введите «-a 2,4»

Указанная программа копируется в удаленную систему для выполнения. Если этот параметр не задан, то приложение должно находиться в системной папке удаленной системы.

Указывает, что не нужно ждать завершения приложения. Этот параметр следует использовать только при запуске неинтерактивных приложений.

Указанный профиль учетной записи не загружается.

Указанная программа копируется в удаленную систему, даже если такой файл в удаленной системе уже есть.

Запускаемая программа получает доступ к рабочему столу указанного сеанса в удаленной системе. Если сеанс не задан, то процесс выполняется в консольном сеансе.

При запуске процесса пользователю предоставляются ограниченные права (права группы администраторов отменяются, и пользователю предоставляются только права, назначенные группе «пользователи»). В ОС Windows Vista процесс запускается с низким уровнем благонадежности.

Позволяет задать задержку подключения к удаленным компьютерам (в секундах).

Позволяет указать необязательный пароль для имени пользователя. Если этот параметр опущен, то будет выдан запрос на ввод пароля, при этом пароль не будет отображаться на экране.

Удаленный процесс запускается из системной учетной записи.

Позволяет указать необязательное имя пользователя для входа в удаленную систему.

Указанный файл копируется в удаленную систему вместо уже имеющегося только при условии, что номер его версии выше или он более новый.

Позволяет указать для процесса рабочий каталог (путь внутри удаленной системы).

Отображает интерфейс пользователя на рабочем столе Winlogon (только в локальной системе).