Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.06;
Скачать: CL | DM;

Вниз

Ошибки при запуске приложений из Delphi   Найти похожие ветки 

 
newbart   (2009-10-04 17:26) [0]

Здравствуйте!
Надо из моей программы запустить Блокнот с файлом tmp.txt, пишу такой код:
var
 si: TStartupInfo;
 pi: TProcessInformation;
 CmdLine: String;
begin
 CmdLine:= "C:\WINDOWS\NOTEPAD.EXE c:\tmp.txt";

 FillChar(si, SizeOf(TStartupInfo), #0);
 si.cb:= SizeOf(TStartupInfo);
 si.dwFlags:= STARTF_USESHOWWINDOW;
 si.wShowWindow:= Windows.SW_SHOWNORMAL;

 CreateProcess(nil, PChar(CmdLine), nil, nil, False, NORMAL_PRIORITY_CLASS,
               nil, nil, si, pi);
end;


Если программу запускать из Delphi, то вываливается на строке CreateProcess... с ошибкой в

отладчик CPU.
Если программу запускать НЕ из Delphi - все ОК.
Что можно сделать?
Спасибо.


 
Loginov Dmitry ©   (2009-10-04 23:12) [1]

> Если программу запускать из Delphi, то вываливается на строке
> CreateProcess... с ошибкой в


Ага. Тоже вылазит ошибка:
DrWeb: D:\Program Files\Borland\Delphi7\Projects\Project1.exe - инфицирован Trojan.DownLoad.47164
видимо не нравится, что программа вызывает функцию CreateProcess =))

Ну а если серьезно, что за ошибка? Воспроизводится, если создать проект с нуля?


 
Riply ©   (2009-10-05 05:31) [2]

> [0] newbart   (04.10.09 17:26)
> Что можно сделать?

Для начала, попробуем Help почитать :)
И гласит он следующее:
lpCommandLine
[in, out] The command line to be executed. The maximum length of this string is 32K characters.
Windows 2000:  The maximum length of this string is MAX_PATH characters.
The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.


Тогда, пробуем "подогнать" наш вызов под его несуразные требования :)
("несуразные" - imho. Имею право на свое мнение:) )
Пишем что-то такого типа:
var
si: TStartupInfo;
pi: TProcessInformation;
CmdLine: String;
pCmdLine: PChar;
begin
 inherited;
CmdLine:= "C:\WINDOWS\NOTEPAD.EXE c:\tmp.txt";
pCmdLine := @CmdLine[1];
FillChar(si, SizeOf(TStartupInfo), #0);
si.cb:= SizeOf(TStartupInfo);
si.dwFlags:= STARTF_USESHOWWINDOW;
si.wShowWindow:= Windows.SW_SHOWNORMAL;

if CreateProcess(nil, pCmdLine, nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, si, pi) then
 begin
  ProcessInfo_CloseHandles(@pi);
  ShowMessage(pCmdLine);
 end
else ShowMessage(SysErrorMessage(GetLastError));
end;


К моему великому удивлению ACCESS_VIOLATION исчезает :)


 
Юрий Зотов ©   (2009-10-05 05:51) [3]

> Riply ©   (05.10.09 05:31) [2]

У него же D7, юникод тут вряд ли при чем. Этот же самый код у меня работает без проблем (D7, XP):

procedure TForm1.FormDblClick(Sender: TObject);
var
 si: TStartupInfo;
 pi: TProcessInformation;
 CmdLine: string;
begin
 CmdLine := "C:\WINDOWS\NOTEPAD.EXE c:\tmp.txt";
 ZeroMemory(@si, SizeOf(si));
 si.cb := SizeOf(si);
 if CreateProcess(nil, PChar(CmdLine), nil, nil, False, 0, nil, nil, si, pi) then
 begin
   CloseHandle(pi.hThread);
   CloseHandle(pi.hProcess)
 end
end;


 
Riply ©   (2009-10-05 06:20) [4]

> [3] Юрий Зотов ©   (05.10.09 05:51)
> У него же D7, юникод тут вряд ли при чем. Этот же самый код у меня работает без проблем (D7, XP)

Во черт. Не заметила.
Не если его код копипайстнуь в Delphi 2010, то получаем AV.


 
newbart   (2009-10-05 09:34) [5]

Забыл сказать: ошибки только при запуска по User, под Admin - нет.


 
Юрий Зотов ©   (2009-10-05 12:27) [6]

> newbart   (05.10.09 09:34) [5]

Нужен текст сообщения об ошибке.

if Win32Check(CreateProcess(...)) then ...


 
MonoLife ©   (2009-10-05 16:34) [7]


> Надо из моей программы запустить Блокнот с файлом tmp.txt

сорри, а shellexecute() не канает?


 
newbart   (2009-10-07 13:13) [8]

> Юрий Зотов (05.10.09 12:27) [6]
Да какой там текст - CPU window выходит.

> MonoLife  (05.10.09 16:34) [7]
И на ShellExecute() и на WinExec тоже самое. Вся проблема здесь при запуске под User-ом, под Admin - нет.


 
Игорь Шевченко ©   (2009-10-07 13:22) [9]


> Да какой там текст - CPU window выходит


Больно слышать


 
newbart   (2009-10-10 06:48) [10]

> Игорь Шевченко  (07.10.09 13:22) [9]
А в чем больно-то?


 
Leonid Troyanovsky ©   (2009-10-10 22:50) [11]


> newbart   (10.10.09 06:48) [10]

> А в чем больно-то?

В мозге.

--
Regards, LVT.


 
имя   (2009-10-11 02:21) [12]

Удалено модератором


 
Германн ©   (2009-10-11 02:30) [13]

Удалено модератором


 
имя   (2009-10-11 02:35) [14]

Удалено модератором


 
Германн ©   (2009-10-11 03:27) [15]

Удалено модератором


 
имя   (2009-10-11 20:14) [16]

Удалено модератором


 
newbart   (2009-10-12 19:29) [17]

Что делать-то?


 
Leonid Troyanovsky ©   (2009-10-12 21:49) [18]


> newbart   (12.10.09 19:29) [17]

> Что делать-то?

Искать наведенную ошибку (AV в иных местах, скажем).
Но, это лишь в случае, если [3, 6] в "чистом" проекте работает.

--
Regards, LVT.


 
newbart   (2009-10-16 21:34) [19]

To Leonid Troyanovsky (12.10.09 21:49) [18]
Если создан новый проект и в нем НЕ работает - он "чистый"?


 
Leonid Troyanovsky ©   (2009-10-18 23:26) [20]


> newbart   (16.10.09 21:34) [19]

> Если создан новый проект и в нем НЕ работает - он "чистый"?

Вновь созданный проект - в студию.
Только, чур, без излишеств - токмо касаемо CreateProcess.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2009.12.06;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
15-1254768851
freeman1
2009-10-05 22:54
2009.12.06
Устроство подключено


4-1222413068
Riply
2008-09-26 11:11
2009.12.06
RtlCopyUnicodeString и IRQL


15-1255082295
cwl
2009-10-09 13:58
2009.12.06
ваш музыкальный аггрегатор


3-1231075733
Oleg_teacher
2009-01-04 16:28
2009.12.06
Clientdatase + рисунок


1-1227270584
parasolka
2008-11-21 15:29
2009.12.06
Ширина ячеек в DBGrid.