Можно ли запустить удаленное приложение и отображать его интерактивно в Windows? - PullRequest
1 голос
/ 29 июля 2011

Я уверен, что об этом уже спрашивали, но мне еще не удалось найти вопрос или ответ.

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

Я экспериментировал со множеством разных подходов, от написания своего собственного приложения на C # до Process.Start, написания второго приложения на C #, которое живет на удаленной машине и запускает соответствующее приложение, используя psexec от Sysinternals и т. Д. Я могу заставить процесс успешно запускаться на удаленной машине, но GUI отсутствует независимо от того, какие учетные данные пользователя я предоставляю (и независимо от того, вошел ли пользователь в систему в интерактивном режиме). Я считаю, что это повышение безопасности в Windows.

Анализ метода Create () документации MSDN Win32_Process показывает, что я подозревал. Из соображений безопасности метод Win32_Process.Create нельзя использовать для удаленного запуска интерактивного процесса.

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

Может кто-нибудь предложить подход, который будет работать, или помочь опровергнуть возможность сделать это?

РЕДАКТИРОВАТЬ Собственная документация psexec Документация подтверждает мое утверждение, что это невозможно. Флаг -x гласит: «Отображать пользовательский интерфейс на рабочем столе Winlogon (только для локальной системы)». Если бы это было возможно, я уверен, что Sysinternals сделал бы это возможным.

1 Ответ

2 голосов
/ 29 июля 2011

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

  1. Поместите свой процесс в группу автозагрузки пользователя в меню «Пуск» (или в разделе «Выполнить HKLM / HKCU»).
  2. Ваш процесс будет запущенинтерактивно всякий раз, когда пользователь входит в систему. Вы можете создать значок в трее, чтобы указать, что он работает.
  3. Ваш процесс открывает порт TCP для прослушивания команд.
  4. Управляющий процесс на другом компьютере отправляеткоманда к порту TCP.
  5. Ваш процесс выполняет указанную команду.Поскольку ваш процесс выполнялся в интерактивном режиме, дочерний процесс также будет интерактивным.

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

...