Запуск процесса администрирования с пользовательским интерфейсом из windows -сервиса - PullRequest
1 голос
/ 18 марта 2020

Мы хотели бы разработать устройство windows 10 со встроенным в него набором программного обеспечения. Это устройство будет иметь две учетные записи: учетную запись администратора и ограниченную учетную запись. Конечный пользователь (расположенный по всему миру) будет использовать ограниченную учетную запись и не будет знать пароль администратора.

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

До сих пор мы пробовали:

  1. запуск процесса из службы windows: процесс начинается с правами администратора, но нет gui показано
  2. , запускающее процесс из windows службы, олицетворяющей текущего пользователя: процесс показывает gui, но без прав администратора
  3. , запускающий процесс из windows служба, олицетворяющая администратора: тот же результат: 1.
  4. запущенный процесс с планировщиком задач: не повезло как с администратором (без gui), так и с ограниченной учетной записью (без прав администратора)
  5. запущенный процесс с psexe c (из sysinternals pstools): те же результаты, что и выше.

Есть ли обходной путь для запуска процесса администрирования с пользовательским интерфейсом из службы windows? Я знаю, что у нас может быть служба с правами администратора, связывающаяся с процессом, отличным от admin gui (с использованием именованных каналов, mqtt или ...), но это невозможно с установкой installshield (или nsis или ...).

Или есть другое решение нашей проблемы?

Спасибо за любой ответ.

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Team Viewer имеет API, который решает все такие проблемы. Это также позволит вам выбрать, какие учетные данные должны быть предоставлены пользователю. Вы можете использовать это, как включить свою учетную запись пользователя, а затем после установки TeamViewer API и всего, что готово с установленными привилегиями. Вы можете установить приличное соединение.

С помощью Team Viewer API вы можете управлять своим cmd из типа cmd: start /pathtoteamviewer.exe Тогда удаленный хост, который получит доступ к P C, который вы хотите использовать, сообщит пользователю ввести идентификатор и пароль пользователя P C. И Kaboom вы с легкостью сделали то, что хотите.

Если вы включите функцию пароля удаленного подключения в TeamViewer, это также поможет, если вы переносите свой проект на следующий уровень.

I надеюсь это поможет.

0 голосов
/ 27 марта 2020

Я понял ваш вопрос. В тот день, когда я программировал, я решил для себя:

  1. Создать скрипт Powershell для загрузки вещей с вашего сайта (файл Update.txt); См .: https://blog.jourdant.me/post/3-ways-to-download-files-with-powershell

    $ url = "http://mirror.internode.on.net/pub/test/Update.txt"

    $ output = "$ PSScriptRoot \ Update.txt"

    $ start_time = Get-Date

    Invoke-WebRequest -Uri $ url -OutFile $ output

    Write-Output "Время выполнения: $ ((Get-Date) .Subtract ( $ start_time) .Seconds) second (s) "* ​​1021 *

  2. В этом файле укажите номер версии, а в созданной вами Программе также есть version.txt и сравните их с помощью простой логики c если он не равен Update.txt, попросите пользователя обновить.

  3. Снова используйте скрипт Powershell для загрузки вашего установщика обновлений после диалогового окна Да / Нет с пользователем .

  4. Запустите программу обновления с правами администратора См. Как запустить процесс в режиме администратора в C#

...