Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] Скрытый запуск внешнего консольного приложения

Ответить
Настройки темы
.NET - [решено] Скрытый запуск внешнего консольного приложения

Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16


Конфигурация

Профиль | Отправить PM | Цитировать


Всем доброго времени суток... (язык vb.NET)
Столкнулся с тривиальной казалось бы проблемой, но те методы которые вроде бы должны выполнять эту функцию не дают ни какого эффекта...
Суть: моей программой используется внешняя программа (утилита Handle.exe от Windows SysInternals), я передаю ей некие аргументы, а с ее StandartOutput читаю к себе в переменную.
"Умный справко" говорит: Для запуска процесса, не отображая ее на экране, предварительно укажите
ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
ну так... вот и ни хрена ничего не скрывается
Код: Выделить весь код
   Public Function UseHandle(ByVal Arg As String)
        Dim my_handle As New Process
        Dim myProcessStartInfo As New ProcessStartInfo(System.Windows.Forms.Application.StartupPath & "\Handle.exe")
        myProcessStartInfo.UseShellExecute = False
        myProcessStartInfo.RedirectStandardOutput = True
        myProcessStartInfo.Arguments = Arg
        myProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
        my_handle.StartInfo = myProcessStartInfo
        my_handle.Start()
        my_handle.WaitForExit()
        Return (my_handle.StandardOutput.ReadToEnd)
        my_handle.Close()
    End Function
Все равно это чертово cmd-шное окно мелькает
Как быть? Shell не пробовал, да и не катит... мне надо процесс как объект юзать.

-------
Одно дело искать сиюминутное решение, другое - искать знания...
вот и думай - что ты ищешь...


Отправлено: 13:51, 16-01-2011

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4465
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


RUVATA, может имеет смысл сначала сделать окно невидимым, а уже потом запускать?

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 14:29, 16-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


RUVATA если не получается .NET вариант то тогда стоит API вариант запуск приложения с параметром /?
По текущему коду есть замечания.
  • Не указан тип функции UseHandle.
  • Последняя строчка никогда не выполнится, так как в предпоследней указан Return.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:36, 16-01-2011 | #3


Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16

Профиль | Отправить PM | Цитировать


Цитата Admiral:
Последняя строчка никогда не выполнится, так как в предпоследней указан Return. »
верно, ошибка не заметна, так как объект процесса созданный в функции закрывается вместе с ней, кстати почему так?

PS: проблема решена... использованием свойства ProcessStartInfo.CreateNoWindow = True
которое требует определенного значения другого свойства ProcessStartInfo.UseShellExecute = False (обязательно)
соответственно свойство
ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden (действует только для программ с Windows.Forms интерфейсом)

вот полностью рабочий пример функции вызывающей handle из директории с программой...
handle отрабатывает скрыто.
передаваемый аргумент - строка (целевая директория)
возвращаемое значение - строка (вывод handle.exe)

Код: Выделить весь код
    Public Function UseHandle(ByVal Arg As String)
        Dim my_handle As New Process
        Dim myProcessStartInfo As New ProcessStartInfo(System.Windows.Forms.Application.StartupPath & "\Handle.exe")
        Dim HandleText As String
        myProcessStartInfo.UseShellExecute = False
        myProcessStartInfo.RedirectStandardOutput = True
        myProcessStartInfo.Arguments = Arg
        myProcessStartInfo.CreateNoWindow = True
        my_handle.StartInfo = myProcessStartInfo
        my_handle.Start()
        my_handle.WaitForExit()
        HandleText = my_handle.StandardOutput.ReadToEnd
        my_handle.Close()
        Return (HandleText)
    End Function

-------
Одно дело искать сиюминутное решение, другое - искать знания...
вот и думай - что ты ищешь...


Отправлено: 08:43, 17-01-2011 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] Скрытый запуск внешнего консольного приложения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - Проблема при запуске службой консольного приложения kivenko Windows Server 2008/2008 R2 1 07-08-2012 09:10
C/C++ - [решено] Запуск консольного приложения с помощью bat-файла котвася Программирование и базы данных 4 23-10-2010 20:40
Автозагрзка консольного приложения, без входа в систему Solker Microsoft Windows NT/2000/2003 2 29-12-2009 17:23
MFC - Какие установки в VS2005 для консольного приложения с исключением в связях mfc80u.dll Viacheslav8 Программирование и базы данных 2 05-05-2009 17:25
[решено] окно консольного приложения ogronom Microsoft Windows 2000/XP 2 12-09-2006 11:27




 
Переход