Windows 10: Как заставить запуск задачи в пользовательском пространстве при запуске без разблокировки локальной машины?


1

У меня есть машина, которая будет развернута на месте клиента. Машина будет без головы и будет доступна только через RDC. (Если не произойдет катастрофа.) Существует программное обеспечение, которое должно работать постоянно для регистрации данных с подключенных датчиков. Программное обеспечение работает только тогда, когда оно работает на «переднем плане». То есть, если у меня он запускается как задача с использованием «Выполнить независимо от того, вошел ли пользователь в систему или нет», я могу видеть это в диспетчере задач, но данные не регистрируются. Если я убью его и запущу задачу через планировщик задач, он все равно не будет регистрировать данные. Если я убью его и запусту через прикрепленный значок на панели задач, он будет работать.

Как заставить это программное обеспечение работать при загрузке **? Я хочу сделать это так, чтобы, когда я использую RDC, используя имя пользователя и пароль, я видел приложение. Однако, если кто-то подключит клавиатуру и мышь, компьютер НЕ будет разблокирован.

** У меня BIOS машины настроен на автоматическую загрузку после сбоя питания.


1
Настройте автоматический вход в систему, запустите задачу и заблокируйте рабочий стол или сделайте приложение работоспособным в фоновом режиме / в качестве задачи. Первое решение, очевидно, будет представлять угрозу безопасности, поскольку кто-то может перезагрузиться и использовать маленькое временное окно перед блокировкой, чтобы что-то сделать.
Seth

Эта операционная система действительно настолько слаба, что единственный вариант - разблокировать локальную среду? Конечно, нет.
Bruno Bronosky

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

Ответы:


2

Используйте psexec run из запланированной задачи. В планировщике заданий есть опция «Когда система запускается». Настройте его для запуска:

psexec -u USERNAME -p PASSWORD -i 0 -d c:\path\to\program.exe

-i 0 говорит ему запускаться в сеансе 0, который, начиная с 2008 года, является сеансом консоли.


Проголосование, потому что это работало для одной из задач, но не для фактической (исключительно сложной) задачи, для которой я создал этот вопрос.
Bruno Bronosky

Сеанс 0 НЕ является пользовательским пространством, недоступен вошедшему в систему пользователю и НЕ является приоритетным. Сессия 0 является фоновой
Dr.Ping

0

Я закончил тем, что решил это с превосходным (если запутанно задокументировано) nssm - не сосущий сервис менеджер

Я не администратор Windows, поэтому я склоняюсь к тому, чтобы сделать все Unix дружественным. Надеюсь, это более полезно, чем запутывает. Вот как я решил это (и задокументировал это для своего будущего себя).

  1. устанавливать choco потому что это как можно ближе к apt или же brew для Windows.
  2. устанавливать cygwin потому что мы собираемся использовать BASH.

    choco install --yes cygwin
    
  3. устанавливать nssm

    choco install --yes nssm
    
  4. Сохраните следующее в скрипт, который я назову create_service.sh

    name='Phone Home'
    command='C:\Program Files\Python35\python.exe'
    arguments='phone_home.py -p 3389'
    start_in='C:\Users\ET\Dropbox\src\' # Edit this shared code have it sync'd via Dropbox FTW!
    domain='.'
    username='ET'
    password='Use SSH and reverse port forwarding!'
    description='Launch Phone Home script at startup for real, not at log on. (Because this machine is headless, and how are you supposed to log in before it phones home?)'
    display_name="00 $name" # make it sort to the top in Services
    
    nssm stop    "$name"
    nssm remove  "$name" confirm
    nssm install "$name" "$command"   $arguments
    nssm set     "$name" AppDirectory "$start_in"
    nssm set     "$name" DisplayName  "$display_name"
    nssm set     "$name" ObjectName   "$domain\\$username" "$password"
    nssm set     "$name" Description  "$description"
    nssm start   "$name"
    
  5. «Установить» службу Windows через nssm API просто вызывая скрипт.

    source create_service.sh
    

НОТА:

nssm stop а также nssm remove команды в первый раз потерпят неудачу, но я поместил их туда, чтобы вы могли повторно запустить скрипт и внести изменения в ваш сервис

Все это намекает на очень сложную систему удаленного выполнения кода и ssh-прокси Microsoft Remote Desktop. Это урок для другого дня.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.