1

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

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

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

2 ответа2

2

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

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

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

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 через API nssm просто вызвав скрипт.

    source create_service.sh
    

НОТА:

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .