Форум: "Начинающим";
Текущий архив: 2009.12.06;
Скачать: [xml.tar.bz2];
ВнизОшибки при запуске приложений из 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c