powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Createprocess выдает ошибку в 98
8 сообщений из 8, страница 1 из 1
Createprocess выдает ошибку в 98
    #32195599
konst29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые Коллеги есть код.

name:='C:\Program Files\Microsoft Office\Office\WINWORD.EXE '+nameDok;
P1:=Pchar(name);
FillChar(Si,SizeOf(Si),0);
if not Createprocess(nil,P1,nil,nil,false,Create_default_error_mode,nil,nil,si,p) then
begin
ShowMessage( 'CreateProcess failed.' );
Exit;
end;
CloseHandle( p.hThread );
Waitforsingleobject(p.hProcess,infinite);
CloseHandle( p.hProcess );
//kod.....
DeleteFile(nameDok);

т.е. Открывается WordPad и туда загружается документ, ждем когда он закроется и что0то делаем. ( с WORDом почему-то не отрабатывает ожидание конца процесса). Так вот ... в XP все пашет на пять баллов, а в 98 ыкидывает ошибку. Кно-то сталкивался как с этим бороться или я что не так делаю.
...
Рейтинг: 0 / 0
Createprocess выдает ошибку в 98
    #32195602
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй такой функцией посмотреть:
extern void displayError()
{
LPVOID lpMsgBuf;

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Это на си, под делфи сам конверть.
...
Рейтинг: 0 / 0
Createprocess выдает ошибку в 98
    #32195985
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заверни CreateProcess в Win32Check и оно тебе скажет в чем дело.

Win32Check - это на самом деле удобная обертка того самого FormatMessage от предыдущего коллеги.
...
Рейтинг: 0 / 0
Createprocess выдает ошибку в 98
    #32196007
konst29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Dankov, стыдно признаться, но не знаю как это сделать. Если можно разжевать, в разумных пределах, то буду премного благодарен.
И еще. Если будет выяснена ошибка, то как можно ее вылечить. Ну будет что-то типа регистры не имеют значение или еще какое системное непотребство, есть механизмы лечения?
...
Рейтинг: 0 / 0
Createprocess выдает ошибку в 98
    #32196479
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо
if not Createprocess(nil,P1,nil,nil,false,Create_default_error_mode,nil,nil,si,p) then
надо написать
Win32Check(CreateProcess(nil,P1,nil,nil,false,Create_default_error_mode,nil,nil,si,p))

в случае ошибки, Win32Check сгенерит понятное исключение. А как лечить - зависит от природы ошибки.
...
Рейтинг: 0 / 0
Createprocess выдает ошибку в 98
    #32196490
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но причина ошибки, скорее всего, в пробеле в пути к файлу. Так как первый параметр NULL, то экзешник определяется в командной строке по первому пробелу (это в хелпе написано по CreateProcess). Чтобы такой неопределенности не было, обычно путь к экзешнику вкладывают в первый параметр, а хвост командной строки во второй.
...
Рейтинг: 0 / 0
Createprocess выдает ошибку в 98
    #32196733
konst29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но причина ошибки, скорее всего, в пробеле в пути к файлу. Так как первый параметр NULL, то экзешник определяется в командной строке по первому пробелу (это в хелпе написано по CreateProcess). Чтобы такой неопределенности не было, обычно путь к экзешнику вкладывают в первый параметр, а хвост командной строки во второй
----------------------------------------------------
Спасибо за подсказку. Развел вызов редактора и командной строки.

P1:=Pchar('wordpad.exe');
P2:=Pchar('name.doc');
Createprocess(P1,P2,nil,nil,false,Create_default_error_mode,nil,nil,si,p);

и ошибка ушла, но теперь запускается wordpad с новым документов, а не с моим документом т.е. не схватывает параметр.
...
Рейтинг: 0 / 0
Createprocess выдает ошибку в 98
    #32196747
konst29
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает все следующим образом

P1:=Pchar('wordpad.exe');
P2:=Pchar('wordpad.exe name.doc');
Createprocess(P1,P2,nil,nil,false,Create_default_error_mode,nil,nil,si,p);

тогда открывается документ и в ХР работает безупречно, но в 98 если name.doc пустой вылетает ошибка.
Попытаюсь локализовать ошибку или есть выход определять пустой name.doc
или нет и тогда открывать бес параметров, но это не есть хорошо.
А вообще задача такая. Есть база MSSQL где в BLOB полях документи вордовские их надо открыть, отредоктировать и сохранить.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Createprocess выдает ошибку в 98
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]