Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Скрытый запуск внешнего консольного приложения (http://forum.oszone.net/showthread.php?t=196791)

RUVATA 16-01-2011 13:51 1589834

Скрытый запуск внешнего консольного приложения
 
Всем доброго времени суток... (язык 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 16-01-2011 14:29 1589854

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

Admiral 16-01-2011 17:36 1589977

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

RUVATA 17-01-2011 08:43 1590373

Цитата:

Цитата 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:37.

Время: 08:37.
© OSzone.net 2001-