Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Shell() или Process.Start(). Что грамотнее? mysql.exe не видит параметров 
:(
    Опции темы
kuzyaka
Дата 19.7.2007, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2006

Репутация: нет
Всего: нет



Для запуска внешнего приложения использовал в начале такой вариант:
Код

    Shell("cmd.exe /c mysql.exe " & _
        "--host=localhost " & _
        "--user=myuser " & _
        "--password=mypassword " & _
        "my_test < """ & Application.StartupPath & "\my_test.sql""", AppWinStyle.Hide, True)

    Shell("cmd.exe /c mysqldump.exe " & _
        "--host=localhost " & _
        "--user=myuser " & _
        "--password=mypassword " & _
        "--opt my_test > """ & Application.StartupPath & "\my_test.sql""", AppWinStyle.Hide, True)

Здесь из дампа создается база MySQL "my_test" и наоборот.
Все работает.

Потом выяснилось что есть еще класс Process для таких дел.
Решил попробовать и переписал:
Код

    Dim MyProcess As New Process
    MyProcess.StartInfo.FileName = "mysql.exe"
    MyProcess.StartInfo.Arguments = _
      "--host=localhost --user=myuser --password=mypassword my_test < """ & _
      Application.StartupPath & "\my_test.sql"""
    MyProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    MyProcess.Start()
    MyProcess.WaitForExit()

    Dim MyProcess0 As New Process
    MyProcess0.StartInfo.FileName = "mysqldump.exe"
    MyProcess0.StartInfo.Arguments = _
      "--host=localhost --user=myuser --password=mypassword --opt my_test > """ & _
      Application.StartupPath & "\my_test10.sql"""

    MyProcess0.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    MyProcess0.Start()
    MyProcess0.WaitForExit()

НЕ РАБОТАЕТ!!! mysql.exe и mysqldump.exe не воспринимает параметров.
Выдается информация как при запуске "mysql.exe" без параметров (т.е. справка).
Попробовал другое:
Код

    Dim MyProcess As New Process
    MyProcess.StartInfo.FileName = "7z.exe"
    MyProcess.StartInfo.Arguments = "a -tzip archive.zip -p" & strPassword & " my_test.sql"
    MyProcess .StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    MyProcess.Start()
    MyProcess.WaitForExit()

А здесь все прекрасно работает.

Вопроса два.
1. Очевидный. Что не так в параметрах в случае с mysql.exe и mysqldump.exe.
2. Есть ли разница что использовать Shell() или Process.Start().

Это сообщение отредактировал(а) kuzyaka - 19.7.2007, 13:10
PM MAIL   Вверх
mr.DUDA
Дата 19.7.2007, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Юзайте Shell. Может Process-у не нравится формат строки параметров, с  > и <


--------------------
user posted image
PM MAIL WWW   Вверх
kuzyaka
Дата 19.7.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2006

Репутация: нет
Всего: нет



Цитата(mr.DUDA @  19.7.2007,  09:03 Найти цитируемый пост)
Юзайте Shell

Одно только не понятно, как преодолеть зависание по запуску через Shell?
У Process есть хоть Process.WaitForExit для решения проблемы, а у Shell - суши весла?



Это сообщение отредактировал(а) kuzyaka - 19.7.2007, 11:37
PM MAIL   Вверх
Naum
Дата 19.7.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(MSDN)

Shell Function
Requirements
Namespace: Microsoft.VisualBasic 

Module: Interaction 

Assembly: Microsoft Visual Basic .NET Runtime (in Microsoft.VisualBasic.dll) 
Runs an executable program and returns an integer containing the program's process ID if it is still running.

Public Function Shell( _
   ByVal Pathname As String, _ 
   Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus, _ 
   Optional ByVal Wait As Boolean = False, _ 
   Optional ByVal Timeout As Integer = -1 _
) As Integer
Parameters
Pathname 
Required. String. Name of the program to execute, together with any required arguments and command-line switches. Pathname can also include the drive and the directory path or folder. 
Style 
Optional. AppWinStyle. A value chosen from the AppWinStyle enumeration corresponding to the style of the window in which the program is to be run. If Style is omitted, Shell uses AppWinStyle.MinimizedFocus, which starts the program minimized and with focus. 
The Style argument can have one of the following settings: 
Enumeration value Description 

  • AppWinStyle.Hide The window is hidden and focus is given to the hidden window. 
  • AppWinStyle.NormalFocus The window is given focus and displayed in its most recent size and position. 
  • AppWinStyle.MinimizedFocus The window is given focus and displayed as an icon. 
  • AppWinStyle.MaximizedFocus The window is given focus and displayed using the entire screen. 
  • AppWinStyle.NormalNoFocus The window is set to its most recent size and position. The currently active window remains in focus. 
  • AppWinStyle.MinimizedNoFocus The window is displayed as an icon. The currently active window remains in focus. 

Wait 
Optional. Boolean. A value indicating whether the Shell function should wait for completion of the program. If Wait is omitted, Shell uses False. 
Timeout 
Optional. Integer. The number of milliseconds to wait for completion if Wait is True. If Timeout is omitted, Shell uses -1, which means there is no timeout and Shell does not return until the program completes. Therefore, if you omit Timeout or set it to -1, it is possible that Shell might never return control to your program.


Это сообщение отредактировал(а) Naum - 19.7.2007, 11:42


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
kuzyaka
Дата 19.7.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2006

Репутация: нет
Всего: нет



Цитата(Naum @  19.7.2007,  11:41 Найти цитируемый пост)
Цитата(MSDN)

Заодно уж, чтобы закрыть вопрос: Цитата(MSDN VS2003 по русски)
Цитата
Функция Shell
Запускает исполняемую программу и возвращает целочисленное значение, содержащее идентификатор процесса программы, если она все еще выполняется.

Public Function Shell( _
   ByVal Pathname As String, _ 
   Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus, _ 
   Optional ByVal Wait As Boolean = False, _ 
   Optional ByVal Timeout As Integer = -1 _
) As Integer
Параметры
Pathname 
Обязательный. String. Имя исполняемого файла со всеми необходимыми аргументами. Pathname может также содержать имя диска и путь. 
Style 
Необязательный. AppWinStyle. Значение, выбираемое из перечисления AppWinStyle, соответствующее стилю окна, в котором запускается программа. Если параметр Style опущен, Shell использует значение AppWinStyle.MinimizedFocus, запускающее программу в свернутом окне с фокусом. 
Аргумент Style может принимать одно из следующих значений: 

Значение перечисления Описание 
AppWinStyle.Hide Окно скрыто, и фокус передан скрытому окну. 
AppWinStyle.NormalFocus Окно получает фокус и отображается в своих предыдущих размере и позиции. 
AppWinStyle.MinimizedFocus Окно отображается как значок и имеет фокус. 
AppWinStyle.MaximizedFocus Окно получает фокус и развернуто во весь экран. 
AppWinStyle.NormalNoFocus Окно восстанавливает свои последние размер и позицию. Активное в данный момент окно остается активным. 
AppWinStyle.MinimizedNoFocus Окно отображается в виде значка в панели задач. Активное в данный момент окно остается активным. 

Wait 
Необязательный. Boolean. Значение, определяющее, должна ли функция Shell ожидать завершения выполнения программы. Если параметр Wait опущен, Shell использует False. 
Timeout 
Необязательный. Integer. Длительность в миллисекундах интервала, в течение которого ожидается завершение выполнения программы, если Wait равно True. Если параметр Timeout опущен, Shell использует-1, то есть таймаут не используется и Shell ожидает завершения выполнения программы. Таким образом, если вы опустите Timeout или установите его в -1, существует возможность, что Shell никогда не передаст управления вашей программе. 

То есть резюме выходит такое:
У Shell и у Process кухня одинаковая - обертки разные?
Это как DAO и ADO.
Какая обертка работает ту и используй.


Это сообщение отредактировал(а) kuzyaka - 19.7.2007, 13:08
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1024 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.