Проблема с запуском стороннего приложения из VB6.0 в WinXP

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
vbStr
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 04.04.2005 (Пн) 20:18

Проблема с запуском стороннего приложения из VB6.0 в WinXP

Сообщение vbStr » 08.04.2005 (Пт) 18:03

Здравствуйте все! Вопрос на стыке VB и системы. Есть необходимость запустить из своего приложения другую программу.
В Win98 эта операция проводилась следующим образом. Строка
Код: Выделить всё
StartMirage = Shell(App.Path + "\mir32.bat", vbNormalFocus)
запускал пакетный файл следующего содержания:
Код: Выделить всё
cd c:\program files\Aril{пробел}
mir32.exe{пробел}

В WinXP этот номер не проходит (даже после замены команды cd на chdir). Вручную mir32.bat также не запускает exe-файл.
В чем может быть проблема?

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 08.04.2005 (Пт) 18:20

в 2000 для запуска такого файла необходимо сделать так
cd "c:\program files\Aril{пробел}mir32.exe{пробел}"
Я думаю в ХР также

vbStr
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 04.04.2005 (Пн) 20:18

Сообщение vbStr » 08.04.2005 (Пт) 20:12

Igor_123, не помогает. Пакетный файл не запускается. При ручном вводе в командную строку получаю сообщение: "Системе не удается найти указанный путь".

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 08.04.2005 (Пт) 21:13

Добавить команду в bat:
C:

Есть ещё вариант использовать API ф-и ShellExecute и ShellexecuteEx

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 08.04.2005 (Пт) 21:40

Да например вот такую API:
Код: Выделить всё
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As _
String, ByVal pParameters As String, ByVal lpDirectory As String, ByVal _
nShowCmd As Long) As Long

Public Const SW_SHOWDEFAULT = 10

Public Const BIF_RETURNONLYFSDIRS = 1
Public Const MAX_PATH = 260
Public Const HH_HELP_CONTEXT = &HF

' пример
'ShellExecute Me.hwnd, "open", "my program.exe", "", App.Path, SW_SHOWDEFAULT
No comments ...

SeT
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 362
Зарегистрирован: 29.12.2004 (Ср) 13:11

Сообщение SeT » 09.04.2005 (Сб) 14:48

VERITAS Во-во. Я всегда так делаю. Но между прочем и простая комманда Shell под XP нормально работает.
01000100
Причиняет боль 0010
Виртуальная любовь 00100
Индустрия снов 0010

vbStr
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 04.04.2005 (Пн) 20:18

Сообщение vbStr » 09.04.2005 (Сб) 16:49

SeT, в том то и дело, что у меня она тоже работала, а теперь - нет...
Alexanbar! Не подскажешь, как должна в этом случае выглядеть строка, если не так
Код: Выделить всё
c:\program files\ALir

VERITAS, WinAPI я плохо понимаю. Знаю, что вещь полезная, знаю, что все пользуют. Пытался разобраться - темный лес... Что я выяснил из обрывистых объяснений, так это то, что есть куча готовых функций (лежащих в DLL), которые можно использовать в своих приложениях. Так? А как узнать, какая функция за что отвечает, что делает? Попытаюсь разобраться на примере твоего кода. Спасибо!

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 09.04.2005 (Сб) 19:18

Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 09.04.2005 (Сб) 20:47

В разделе General пишем:
Public Declare Function ShellExecuteEx Lib "shell32.dll" _
(SEI As SHELLEXECUTEINFO) As Long
Public Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type

' Декларация константы для максимизирования окна открываемого приложения.
' Для работы с другими константами смотрите Help по API.
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_HIDE = 0
Public Const SW_MAXIMIZE = 3
Public Const SW_MINIMIZE = 6
Public Const SW_RESTORE = 9
Public Const SW_SHOW = 5
Public Const SW_SHOWDEFAULT = 10
Public Const SW_SHOWNA = 8
Public Const SW_SHOWNOACTIVATE = 4


Далее организуем ф-ю:

Function Execute(Path As String, WindowState As Integer) As Long

Dim fso As New FileSystemObject
Dim ShellInfo As SHELLEXECUTEINFO
Dim wd$, rez&

On Error Resume Next

If fso.FileExists(Path) Then
wd$ = fso.GetFile(Path).ParentFolder
End If
With ShellInfo
.cbSize = Len(ShellInfo)
.lpFile = Path
.lpDirectory = wd$
.nShow = WindowState
End With

rez& = ShellExecuteEx(ShellInfo)

End Function


Вызов ф-и:
Execute "c:\program files\Aril\mir32.exe",1

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 09.04.2005 (Сб) 21:52

UseXML.bat писал(а):cd "C:\Program Files" {Перевод каретки}
"Use XML.exe"{Любой файл переимонованный на имя с пробелом внутри}

Содержание бат-файла, лежит где угодно, кроме корня диска.

Код: Выделить всё
Private Sub Command1_Click()
Dim StartMirage As Double
StartMirage = Shell(App.Path + "\UseXML.bat", vbNormalFocus)
End Sub

проект с кнопкой, и вот таким обработчиком. Исполняемый файл должен лежать рядом с бат-файлом.
Все работает на XP SP2, IE6 SP1.
2 vbStr в командной строке попробуй запустить свой бат-файл и почитай что напишет. Только в консоли.
:D Удачи


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing-бот и гости: 192

    TopList