2009-06-10 4 views
0

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

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

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

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

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

+0

ЧТО ПРОИСХОДИТ, так как приложение запускается без связанного с ним рабочего стола. Вам нужно будет найти текущую учетную запись пользователя и запустить ее под этими правами пользователей. Если вы запустите его под пользователем telnet'd, вы получите безгласный дисплей - он не может взаимодействовать с рабочим столом в большинстве случаев. –

+0

Джейсон, не могли бы вы объяснить, как запустить приложение в качестве пользователя из telnet? У компьютера только пользователь-администратор, поэтому я подключаюсь и запускаю рабочий стол в качестве администратора. –

+0

Просто из любопытства, есть ли причина, по которой вы не можете использовать удаленный рабочий стол? –

ответ

1

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

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

+0

почему нет контекста пользователя? Я вхожу в telnet как пользователь.Я не хочу перезагружать машину, просто обновляйте системные файлы, такие как DLL программы. –

+0

Хорошо, мы попадаем в довольно сложную архитектуру территории австронаута, чтобы решить проблему с запуском приложения в неправильном режиме. Если худшее приходит к худшему, я могу сделать 2-строчное загрузочное приложение, которое использует Process.Start или что-то еще, но это просто еще одна движущаяся часть, должно быть что-то проще? –

1

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

+0

Ах, спасибо, Джоэл, интересная подсказка. –

+0

На самом деле я просто подумал об этом, если бы он просто начинал с частного рабочего стола, то почему не регистрируется log4net? –

+0

Если вы сразу же выйдете из системы, это может закончиться, прежде чем у вас будет время что-либо сделать. Но я подозреваю, что это скорее вопрос разрешения. –

1

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

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

+0

Спасибо, это звучит интересно, но я не могу оправдать установку на эти машины стороннего программного обеспечения VNC, если у нас уже есть удаленный администратор, даже если это автоматизация sh * t. –

+0

Итак, вы установили http://www.radmin.com/products/radmin/? Я не заметил этого в вопросе. Вы можете отредактировать это в своем вопросе, потому что может быть что-то особенное в telnetting через этот инструмент, который вызывает эту проблему. Или, может быть, нет ... но на всякий случай стоит упомянуть. – dss539

+0

Ну, я не подключился через этот инструмент, я делаю это с помощью рубинового скрипта. Или cmd, или powershell - не особо заботятся о том, какой из них. Однако я сделал это. Возможно, у него есть какая-то утилита или расширение, которые я мог бы использовать. –

0

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

Get-Process 

..Cmdlet покажет запущенные процессы, вы можете написать логику Foreach через этот список и соответствовать приложение с регулярным выражением непосредственно в PowerShell, я не знаю, Ruby, но теоретически вы могли бы использовать его, чтобы сделать то же самое призывая Powershell команды с:

powershell.exe -command Get-Process 

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

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

не совсем уверен, как начать процесс GUI через телнет, я не У меня есть установка 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 
+0

Единственная проблема, с которой я столкнулся, - начать процесс. Остановить это легко - taskkill. Также нет powershell, это сенсорные немые терминалы, поэтому его вряд ли можно будет утвердить. –

1

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

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

редактор системного реестра Windows версии 5.00 [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa] "forceguest" = dword: 00000000

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

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

Затем я создал задачу, которая выбежала раз: SchTasks/Создать/SC РАЗ/RU "пользователь"/RP годен/TN "StartApp"/TR «\ "C: \ Windows \ notepad.exe \"»/ ST 00:00:00

вручную начал график: Schtasks/запустить/т "StartApp"

Удаляется расписание: Schtasks/удалить/F/tn "StartAPP"

И это сработало. Сумасшедший! Вот это боль!

+0

Yikes! Извините, что вам нужно работать с Windows XP. Вы должны сказать своим клиентам обновить. –