Главная страница
    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.004 c
15-1255081017
Alkid
2009-10-09 13:36
2009.12.06
Плагины-переводчики


6-1210255588
AtZako
2008-05-08 18:06
2009.12.06
Разорвать OnHeadersAvailable


4-1224487927
worldmen
2008-10-20 11:32
2009.12.06
Вывести список компонент чужого окна.


2-1255702102
Aleks
2009-10-16 18:08
2009.12.06
Как узнать индекс доб.итема в ListView?


15-1254977768
stas
2009-10-08 08:56
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский