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

Ответить
Аватара пользователя
RUVATA

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

Сообщение RUVATA »

Всем доброго времени суток... (язык 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 не пробовал, да и не катит... мне надо процесс как объект юзать.
Аватара пользователя
lxa85

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

Сообщение lxa85 »

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

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

Сообщение lxa85 »

RUVATA если не получается .NET вариант то тогда стоит API вариант
.NET - [решено] запуск приложения с параметром /?


По текущему коду есть замечания.Не указан тип функции UseHandle.Последняя строчка никогда не выполнится, так как в предпоследней указан Return.
Аватара пользователя
RUVATA

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

Сообщение RUVATA »

Цитата Admiral:



Последняя строчка никогда не выполнится, так как в предпоследней указан Return.
.NET - [решено] Скрытый запуск внешнего консольного приложения




верно, ошибка не заметна, так как объект процесса созданный в функции закрывается вместе с ней, кстати почему так?



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
Ответить

Вернуться в «Программирование и базы данных»