Windows-узел - запуск приложения с графическим интерфейсом на экране входа - PullRequest
0 голосов
/ 28 августа 2018

Мне нужно запустить приложение с графическим интерфейсом на экране входа в Windows 7 до 10.

У меня есть приложение nodejs, зарегистрированное как служба, которая работает как SYSTEM (по умолчанию), используя модуль node-windows. Это кажется необходимым условием для того, что мне нужно, но нужно что-то большее.

Приложение представляет собой простой клиент для сокетов, который подключается к серверу сокетов, пока ничего особенного.

Я думаю, может быть, если я использую child_process.spawn (), чтобы открыть командную строку с повышенными привилегиями и / или запустить как другой пользователь - но какой пользователь? СИСТЕМА не делает этого. Я думаю, что все, что Winlogon.exe работает, но это не похоже на SYSTEM, хотя это то, что он показывает, как в диспетчере задач.

Есть ли команда windows для запуска графического интерфейса на экране входа в систему, если у вас есть доступ на уровне SYSTEM?

UPDATE:

Хорошо. На данный момент у меня есть обратный telnet-подобный клиент, работающий на «удаленном хосте» в качестве службы Windows под пользователем SYSTEM. Он периодически подключается к тестовому текстовому интерфейсу сервера (также к узлу), из которого вы можете вводить команды nodejs - в основном это JS REPL домашнего приготовления.

Я могу создать скрытую интерактивную командную строку Windows в сеансе 0, набирать команды и получать вывод через мой маленький терминал обратной командной строки.

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

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

[5472: 5492: 0828 / 031356.901: ОШИБКА: gpu_process_transport_factory.cc (1024)] Общий контекст потерянного интерфейса.

Если я список задач , я получаю:

winlogon.exe Консоль 2140 3 6,704 K Неизвестно NT AUTHORITY \ SYSTEM 0:00:00 Не применимо
LogonUI.exe 4772 Консоль 3 19,104 K Неизвестно NT AUTHORITY \ SYSTEM 0:00:00 Не применимо

Итак, я вижу, что winlogon.exe и LogonUI.exe работают в сеансе 3 как пользователь «SYSTEM».

Как я могу поместить службу в контекст графического интерфейса winlogon и logonui или создать в ней мое приложение?

Есть ли команды windows для этого? Команда / модуль / функция nodejs?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

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

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

Справочная информация: Это в основном для запуска приложения удаленного рабочего стола, которое я написал, так же, как Screen-Connect или LogMeIn. Он отлично работает - за исключением той части, где он останавливается каждый раз, когда вы вызываете что-либо, вызывающее UAC или входите в экран входа в систему, что делает его еще не практичным для удаленной работы ИТ.

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

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

Захват рабочего стола выполняется с помощью NW.js и приложения-сокета-клиента child_process.spawn () ed, работающего на удаленном хосте.

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

Я действительно надеюсь, что все, что мне нужно, это «запустить» другого пользователя или процесс. ** Примечание. Я ищу способ сделать это без автоматического входа в систему, перезагрузки или обходных путей. Я знаю, что MicroSoft официально поддерживает способы решения таких задач, но мне еще предстоит найти способ сделать это через Node, а не C. Если есть нод-модуль, использующий для этого нативный код, это нормально для меня. Я просто хочу, чтобы мой код был JavaScript.

В любом случае, это реальная цель, для которой я задаю этот вопрос - запустить приложение удаленного рабочего стола на экране входа в систему, чтобы захватывать видео и вызывать действия мыши и нажатия клавиш.

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

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Большое спасибо за то, что поделились своим открытием! Вот еще одна вещь, которая может помочь другим:

Если вы не хотите создавать отдельное приложение, чтобы просто запустить службу, вы можете использовать NSSM (https://nssm.cc/). Загрузите его и выполните следующую команду для создания службы:

nssm install your-app-name c:\tmp\paexec.exe -s -x -w c:\path\to\your\app_folder cmd /c app.exe -your_options

Затем при запуске службы запускается paexec в режиме блокировки (поэтому, если служба работает, paexec работает, и, следовательно, ваше приложение работает), с такими же флагами, как у jdmayfield awesome ответить.

Если у кого-нибудь есть какие-либо предложения о том, как получить доступ к удаленному рабочему столу, работающий в Windows, без необходимости переключения между сеансом службы и сеансом пользователя, поделитесь им!

0 голосов
/ 02 сентября 2018

Ответ: «paexec». psexec работает точно так же, но paexec имеет открытый исходный код, распространяется свободно и может использоваться в ваших приложениях как для личных, так и для коммерческих приложений.


Требования:

Скачать paexec.exe.

Поместите его туда, где вы можете его выполнить, ИЛИ компакт-диск в папку, в которую вы его поместили, ИЛИ поместите его в командный путь, ИЛИ добавьте папку, в которую вы его положили, в командный путь, ИЛИ ссылайтесь на нее по пути (например, c : \ папка \ subfolder \ paexec -your_options).


Рекомендуется:

Выполните это из службы Windows (в моем случае это служба окон узла npm). Это позволяет вам запускать его как СИСТЕМУ. Есть и другие способы, но этот, кажется, работает лучше всего.


Пример использования:

paexec -d -s -x -w c:\path\to\your\app_folder cmd /c app.exe -your_options

Как это работает:

-d не позволяет paexec ожидать завершения работы приложения, поэтому разрешает неблокирование.

-s выполняется как пользователь SYSTEM.

-x запускает его на экране входа в систему

-w устанавливает текущий рабочий каталог

cmd / c yourappname.exe позволяет запускать интерактивное приложение с графическим интерфейсом пользователя с предыдущими параметрами (кажется, оно не работает без предварительного открытия приглашения).


Особенности добавления:

Используя 'cmd / c', вы можете вызвать скрипт .bat или .cmd и использовать 'start / b your_app.exe', чтобы закрыть окно cmd.exe (в противном случае вы застряли с ним на экране входа в систему). пока вы не закроете это или ваше приложение).

Ваше приложение будет продолжать работать после входа в систему, однако оно не будет работать во время сеанса входа пользователей, поэтому, если вы хотите, чтобы ваше приложение выполняло оба действия, я рекомендую использовать 'taskkill / f / im your_app.exe' или другой означает остановиться и затем запустить сеанс входа пользователей в систему.

Вы можете запустить его на рабочем столе пользователя с помощью:

paexec -d -s -i 1 -w... (the rest is the same as above).

... при условии, что в систему вошел только один пользователь, он будет в сеансе 1. Это то, что делает опция -i 1, это запустить его в сеансе 1. Если в системе зарегистрировано более одного пользователя (т. е. через Switch User и т. д.) они могут иметь другой номер сеанса, поэтому просто замените «-i 1» на «-ix», где «x» - идентификатор сеанса пользователя.

Вы можете найти идентификатор сеанса с помощью команды Windows 'tasklist /v'.

Если вы пытаетесь запустить это из службы node.js, вам потребуется использовать встроенный модуль process_child и spawn приглашение cmd для его запуска. Есть много примеров для этого, так что здесь не об этом. Приятно, что при запуске из службы Windows он не открывает видимое окно, и вы можете обеспечить ввод / вывод через стандартные методы и события child_process.spawn ().


Безопасность:

Запуск этого из службы Windows (т.е. через node-windows и child_process.spawn) позволяет запускать ваше приложение с графическим интерфейсом не только на экране входа в систему, , но во время загрузки до входа в систему, GUI или нет - без каких-либо типичных небезопасных взломов, таких как автологон для специальной учетной записи пользователя, затем блокировка экрана или выход из системы и т. д. На самом деле он использует инструмент, который отражает собственный инструмент MicroSoft / SysInternals, чтобы сделать это в соответствии с официально предписанными методами MS.

Слабым местом здесь является только ваше приложение , так что застегните его и будьте в безопасности!


Примечание: Обви, это сложный вопрос, и, вероятно, поэтому, похоже, нет хороших ответов - и, вероятно, немногие, кто понял это, не хотят делиться. Итак, поехали.

Наслаждайтесь!


PS: Вы могли бы быть действительно Злым с этим. Пожалуйста, не используйте его в гнусных целях. Именно поэтому они сделали его таким трудным. Будьте добры, чтобы мы все могли извлечь выгоду из его силы.


В отношении имен задач:

Если вы хотите обратиться к своему узлу или приложению nw.js и видеть его как yourappname.exe в списке задач и диспетчере задач, вы можете просто переименовать исполняемые файлы node.exe и nw.exe во все, что хотите, чтобы они отображались. как (т.е. переименуйте nw.exe в myapp.exe, и он будет отображаться и будет называться myapp.exe в Windows). Это предполагает, что у вас есть локальная копия node.exe и т. Д. В папке приложения ... Не делайте этого с глобально установленным исполняемым файлом!


Еще одна вещь:

Если у кого-то есть лучший, испытанный и проверенный метод, , пожалуйста, добавьте его в качестве ответа!

Если это сработает для меня, я с радостью откажусь от своего ответа и приму ваш !!

...