CreateProcess и его последствия (странная история)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

CreateProcess и его последствия (странная история)

Сообщение Eugenio » 09.12.2005 (Пт) 17:20

Запускаю процесс из своего приложения. С точно теми же параметрами, что из командной строки раньше.
И вдруг эта (чужая) запущенная прога сообщает, что не может установить соединения с SQL Server (по TCP/IP). Запускаю из командной строки - всё нормально.
Процесс из моего приложения запускается с параметрами безопасности по умолчанию. И из командной строки ведь тоже, вроде бы?
В чем м.б. разница?
Есть ли у меня вопрос? У меня всегда есть вопрос

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.12.2005 (Пт) 17:25

А дело точно в параметрах безопасности?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 09.12.2005 (Пт) 17:34

GSerg писал(а):А дело точно в параметрах безопасности?

Да я про них на всякий упомянул.
Просто не понимаю, в чем разница между этими способами запуска в данном случае
Есть ли у меня вопрос? У меня всегда есть вопрос

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.12.2005 (Пт) 17:44

Например, ты намудрил с кавычками или упустил их.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 09.12.2005 (Пт) 17:52

GSerg писал(а):Например, ты намудрил с кавычками или упустил их.

Поглядел через TaskInfo командную строку обоих процессов (запуск из командной строки и из проги на VB) - они одинаковые!
Мне кажется, если б с кавычками намудрил, то чужая прога просто не запустилась бы.
Жуть какая-то... И че делать вообще непонятно. Тут я обходных путей просто не вижу (ShellExecute не канает, нужен хэндл процесса).. Запускаешь себе прогу, но при одном способе (cmd) все нормально, а при другом (CreateProcess) - SQL server не находится! Вообще хрень какая-то..
И повторяется это в 100% случаев
Есть ли у меня вопрос? У меня всегда есть вопрос

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.12.2005 (Пт) 18:12

А как она его ищет?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 09.12.2005 (Пт) 18:28

GSerg писал(а):А как она его ищет?

Не знаю, в том-то и дело. чужая прога.
Но используется ODBC. Причем, без настройки источников данных на клиенте. напрямую.

Native: 6
Message: [Microsoft][ODBC SQL Server driver][TCP/IP Sockets] Specified SQL server not found.

Native: 10055
Message: [Microsoft][ODBC SQL Server driver][TCP/IP Sockets] ConnectionOopen(Connect()).
Есть ли у меня вопрос? У меня всегда есть вопрос

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 09.12.2005 (Пт) 18:32

Eugenio писал(а):ShellExecute не канает, нужен хэндл процесса


Так Shell вроде PID возвращает. :scratch:
Или я чего опять не понимаю:scratch:
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.12.2005 (Пт) 18:34

Потом этот PID ты откроешь с минимальными правами. Оно тебе надо, если createprocess возвращает FULL_ACCESS?


Может, дело в том, что прога ищет сервак в своём конфиге, а ты ей не задаёшь папку по умолчанию, и она ищет в твоей?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 09.12.2005 (Пт) 18:38

Да, только нужен не PID, а handle. И желательно не только процесса, но и главного потока.
Можно, конечно, попробовать OpenProcess с полученным PID'ом...
Я уж про то думал. Но, кстати, понятия не имею, как перечислять потоки в процессе
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 09.12.2005 (Пт) 18:46

GSerg писал(а):Потом этот PID ты откроешь с минимальными правами. Оно тебе надо, если createprocess возвращает FULL_ACCESS?


Может, дело в том, что прога ищет сервак в своём конфиге, а ты ей не задаёшь папку по умолчанию, и она ищет в твоей?


Они совпадают
Есть ли у меня вопрос? У меня всегда есть вопрос

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 10.12.2005 (Сб) 14:10

А когда мы запускаем чужую прогу из своей через АПИ, наша над ней становится что-то вроде родителя?

Где находится сиквел-сервер?
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 10.12.2005 (Сб) 15:33

FleX_2004 писал(а):юзай winexec

Это замечательно, только использование winexec дает еще меньше, чем Shell. Не заметил, о чем тут речь шла?
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 10.12.2005 (Сб) 15:41

Вобщем, все-таки Shell + OpenProcess.
Это работает.
Загадочно это всё...
Последний раз редактировалось Eugenio 13.12.2005 (Вт) 11:37, всего редактировалось 1 раз.
Есть ли у меня вопрос? У меня всегда есть вопрос

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.12.2005 (Сб) 17:13

Таки покажи, как вызываешь createprocess...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 12.12.2005 (Пн) 8:54

А может этой программе просто нужен какой-то файл из ее каталога (или вложенных)? Например, udl... Ты CurrentDirectory указываешь?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.12.2005 (Пн) 12:43

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 13.12.2005 (Вт) 11:36

GSerg писал(а):Таки покажи, как вызываешь createprocess...

Был тут завален, поэтому не отвечал. Вот:
Код: Выделить всё

lngProcCreationResult& = CreateProcess(vbNullString, FullPath & " " & CmdLine, ByVal 0&, ByVal 0&, 0&, _
NORMAL_PRIORITY_CLASS, 0&, App.Path, STARTUP_INFO, PROC_INFO)
If lngProcCreationResult = 0 Then
            SetStatus "Ошибка создания процесса: " & CStr(GetLastError()), True
            Exit Function
End If
Есть ли у меня вопрос? У меня всегда есть вопрос

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 13.12.2005 (Вт) 21:46

CreateProcess(vbNullString, FullPath & " " & CmdLine, ByVal 0&, ByVal 0&, 0&, _
NORMAL_PRIORITY_CLASS,BYVAL 0&, App.Path, STARTUP_INFO, PROC_INFO)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 15.12.2005 (Чт) 18:43

ANDLL писал(а):CreateProcess(vbNullString, FullPath & " " & CmdLine, ByVal 0&, ByVal 0&, 0&, _
NORMAL_PRIORITY_CLASS,BYVAL 0&, App.Path, STARTUP_INFO, PROC_INFO)

Да я понимаю. ByVal в Declare вписан. Я там вообще все явно написал, так удобнее.
Код: Выделить всё
Public Declare Function CreateProcess Lib "kernel32.dll" Alias "CreateProcessA" _
(ByVal lpApplicationName As String, ByVal lpCommandLine As String, _
ByRef lpProcessAttributes As Any, ByRef lpThreadAttributes As Any, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As String, _
ByVal lpCurrentDirectory As String, ByRef lpStartupInfo As STARTUPINFO, _
ByRef lpProcessInformation As PROCESS_INFORMATION) As Long
Есть ли у меня вопрос? У меня всегда есть вопрос

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.12.2005 (Чт) 18:49

Если в ByVal lpEnvironment As String передать 0&, то dll получит что?
Правильно, dll получит указатель на "0".

Таки объяви как long.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 16.12.2005 (Пт) 9:45

GSerg писал(а):Если в ByVal lpEnvironment As String передать 0&, то dll получит что?
Правильно, dll получит указатель на "0".

Таки объяви как long.

Таки придется! :)
Ну ё-мое, почему очевидное видят все кроме меня.
Мне As String был нужен в другом случае, я про него и забыл, рассчитывал на Long!
Спасибо.
ЗЫ. Кто-то сказал "баги размножаются копированием". Это точно.
Есть ли у меня вопрос? У меня всегда есть вопрос

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.12.2005 (Пт) 11:39

Можно еще As Any.
Lasciate ogni speranza, voi ch'entrate.

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 16.12.2005 (Пт) 11:47

alibek писал(а):Можно еще As Any.

Угу.
Есть ли у меня вопрос? У меня всегда есть вопрос


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

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 82

    TopList