Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.015 c
15-1250841620
Empleado
2009-08-21 12:00
2009.12.06
На чем мультики делать?


2-1255876581
kodius
2009-10-18 18:36
2009.12.06
Перебор всех значений в stringgrid


2-1254662801
newbart
2009-10-04 17:26
2009.12.06
Ошибки при запуске приложений из Delphi


2-1255610309
XTasy
2009-10-15 16:38
2009.12.06
Глобальные переменные delphi


15-1254741346
megamuz
2009-10-05 15:15
2009.12.06
Проследить за процессом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский