![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск закрытие приложений [D6, WinXP]
illy © (2005-09-10 21:12:00)Привет всем!
Народ я наверное торможу.
Ниже приведен код процедуры. Она должна запускать приложение, в общем в таком виде как она сейчас все работает, но есть строка она выделенная. В принципе она здесь не нужна, так как путь читается из файла в переменную Patch_, В переменную N читается имя файла без расширения, но казус в том что без этой строки процедура не работает , MessageBox выдает ошибку : "Ошибка при инициализации приложения (0xc0000142). Для выхода из приложения нажмите кнопку "ОК".", просветите пожалуйста?
procedure TMainForm.StartProgram(var Msg: TMessage);
var
ini: TIniFile;
Name, Patch_, s, N: string;
i,count,StartX_: integer;
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
s:= '';
StartInfo.cb := sizeof(StartInfo);
Name:= MainDirPatch+'IS.ini';
if FileExists(Name) then
begin
ini:= TIniFile.Create(Name);
try
count:= ini.ReadInteger('RunProgram','Count',0);
if count <> 0 then
for i:= 0 to count - 1 do begin
StartX_:= ini.ReadInteger('RunProgram','StartX_'+IntToStr(i), 0);
if StartX_ = Msg.WParam then begin
Patch_:= ini.ReadString('RunProgram','Patch_'+IntToStr(i), s);
//---------------------------------------------------------------------
N:= ini.ReadString('RunProgram','Name_'+IntToStr(i), s);
//---------------------------------------------------------------------
if (not CreateProcess(nil, PChar(Patch_), nil, nil,
false, NORMAL_PRIORITY_CLASS,
nil, nil, StartInfo, ProcInfo))
then MessageBox(0,PChar('Ошибка'+SysErrorMessage(GetLastError())),
'Ошыбка', 16);
end;
end;
finally
ini.Free;
end;
end;
end;
illy (2005-09-11 12:36:00) [1]
> Прочитай доку по ИНИ-файлам. FileExists(Name)-здесь тебе
> это не нужно
Вот это то как раз и несущественно.
> Слеш тут есть?
function MainDirPatch;
begin
Result:= ExtractFilePath(Application.ExeName);
end;
> Причем здесь строка N?
Вот я и спрашиваю?
Вообще здесь не важно какая строка, любое присваение даже левое, но без нее не работает. Че за глюк?
И еще. В проседуре CreateProcess получаю хендл процесса. Програму должна закрывать другая процудура, CloseHandl не работает, TerminateProcess закрывает, но в хелпе написано что ето грубо.А есть ли вариант понежнее?
psa247 (2005-09-11 10:55:00) [2]
> if FileExists(Name) then
> begin
> ini:= TIniFile.Create(Name);
Прочитай доку по ИНИ-файлам. FileExists(Name)-здесь тебе это не нужно
> MainDirPatch
Слеш тут есть?
Мессадж у тебя вылетает как результат if (not CreateProcess
Причем здесь строка N?