Как запустить приложение winforms через telnet? - PullRequest
0 голосов
/ 11 июня 2009

У меня есть приложение Windows Forms на клиентском компьютере. Я пытаюсь войти в систему через telnet, закрыть его, обновить некоторые файлы и перезапустить.

Использование cmd на клиентском компьютере и ввод MyApp.exe прекрасно работает для его запуска. Но если я сделаю это в окне telnet, произойдет что-то странное: приложение запустится настолько, насколько оно сейчас находится в списке процессов, но ни одна из его форм никогда не откроется, и не будет выполнена регистрация log4net.

Что происходит и как это исправить?

Редактировать: Это похоже на все приложения на основе форм Windows. Попробуйте сами: telnet localhost => блокнот. Он появляется в пользовательском интерфейсе, но не в интерфейсе пользователя!

Кроме того, на всех этих машинах установлен RAdmin ? Из того, что я видел, есть несуществующие средства автоматизации, но, может быть, в этом есть что-то, что может мне помочь?

Ответы [ 5 ]

1 голос
/ 21 февраля 2015

В Windows XP я нашел способ обойти это ограничение с помощью планировщика задач Windows. Для Windows 7 telnet по умолчанию не установлен.

Сначала мне пришлось изменить модель доступа к сети: общий доступ и безопасность для локальных учетных записей на «Классический - локальные пользователи аутентифицируются как они сами», объединив следующие параметры реестра:

Редактор реестра Windows, версия 5.00 [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ LSA] "ForceGuest" = DWORD: 00000000

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

Объединить его с regedit / s file.reg

Затем я создал задачу, которая запускалась один раз: Список задач / Создать / SC ONCE / RU "пользователь" / RP pass / TN "StartApp" / TR "\" C: \ Windows \ NotePad.exe \ "" / ST 00: 00: 00

Вручную запустил расписание: Schtasks / run / tn "StartApp"

Удалил расписание: schtasks / delete / F / tn "StartAPP"

И это сработало. Безумно верно! Какая боль!

1 голос
/ 11 июня 2009

Я думаю, что происходит то, что ваше приложение запускается на частном рабочем столе, а затем закрывается, как только вы закрываете сеанс telnet. Я не знаю, как заставить его запускаться в «текущем / активном» окне рабочего стола, но чтобы он продолжал работать после выхода из telnet, попробуйте запустить команду «start».

1 голос
/ 11 июня 2009

Вместо использования telnet, вы можете попробовать использовать VNCRobot . Я считаю, что VNCRobot работает от имени пользователя и должен использовать один и тот же рабочий стол.

Отказ от ответственности: я никогда не использовал VNCRobot, я просто подумал, что стоит упомянуть.

1 голос
/ 11 июня 2009

Редактировать: В моем первоначальном ответе я неправильно понял ваш вопрос, я думал, вы сказали, что перезапустили машину

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

0 голосов
/ 11 июня 2009

Если вы можете запустить PowerShell на этих машинах, вы можете использовать его, чтобы найти запущенный процесс и уничтожить его. ..

Get-Process

.. Командлет покажет вам запущенные процессы, вы можете написать логику для foreach через этот список и сопоставить ваше приложение с регулярным выражением непосредственно в powershell, я не знаю Ruby, но теоретически вы могли бы использовать его для того же вызова команды powershell с:

powershell.exe -command Get-Process

Чтобы убить процесс, его:

Stop-Process <processId>
Stop-Process -processname <processName>

Не совсем уверен, как запустить процесс графического интерфейса пользователя через telnet, у меня нет настройки telnet на моем оборудовании.

возможно, вы можете сделать что-то похожее на это: http://www.peterprovost.org/blog/post/Powershell-Sudo-(sort-of)-for-Vista-UAC.aspx

Установка глагола на «runas», как в примере по этому адресу, вызовет UAC, делая это, я не смог убить новый процесс, однако я должен убить его, если я установлю:

$psi.Verb = "open"

Кроме того, вы также можете установить следующие атрибуты:

Verb                    : open
Arguments               :
CreateNoWindow          : False
EnvironmentVariables    : {processor_revision, processor_level, logonserver, systemroot...}
RedirectStandardInput   : False
RedirectStandardOutput  : False
RedirectStandardError   : False
StandardErrorEncoding   :
StandardOutputEncoding  :
UseShellExecute         : True
Verbs                   : {open, runas, runasuser}
UserName                :
Password                :
Domain                  :
LoadUserProfile         : False
FileName                : notepad.exe
WorkingDirectory        :
ErrorDialog             : False
ErrorDialogParentHandle : 0
WindowStyle             : Normal
...