![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не работает запуск программы в Windows 98 [D5]
Geka © (2003-03-20 09:32:00)Есть функция для запуска программы. Она работает в Windows2000, а в Windows 98 не работает...
Пробовала 3 различных функции, что я делаю не так?
Мне надо, чтобы она работала во всех версиях Winsows
function ExecPRG(const FileName : ShortString): cardinal;//longbool;
var StartInfo : TStartupInfo;
ProcInfo :TProcessInformation;
begin
FillChar(StartInfo, SizeOf(StartInfo), #0);
with StartInfo do begin
cb := SizeOf(StartInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_SHOW;
end;
{ Result := CreateProcess(PChar(String(FileName)), PChar(String(FileName)), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
PChar(ExtractFilePath(Filename)), StartInfo, ProcInfo);}
// Result := WinExec(PChar(String(FileName)),SW_SHOW);
Result := ShellExecute(0,nil,pchar(String(filename)),nil,nil,sw_normal);
end;
vidiv (2003-03-21 06:35:00) [1]странно, у меня работает по сети, и с "длинными" русскими именами... может у тебя Windows такой? Либо компьютер на который ты обращаешься работает не под Windows...
Юрий Зотов (2003-03-20 23:22:00) [2]> Проверила: результат тот же :-(
> Никаких сообщений, просто программа ничего не делает
Боюсь, неточно Вы проверяли. Там же не зря Win32Check стоит. То есть - либо CreateProcess сработает нормально, либо будет АВТОМАТИЧЕСКИ выведена диагностика GetLastError + FormatMessage. Ничего третьего быть просто не может.
Игорь Шевченко (2003-03-20 13:01:00) [3]Geka © (20.03.03 11:57)
Или ты его не вызываешь вовсе.
Result := CreateProcess(PChar(String(FileName)), PChar(String(FileName)), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
PChar(ExtractFilePath(Filename)), StartInfo, ProcInfo);
if not result then
RaiseLastWin32Error();
Geka (2003-03-20 12:45:00) [4]Пробему ?:-) решила :-)))))
В пути файла один из каталогов был назван на русском :-)
А так, естественно, все работает
У меня ТАКИХ проблем еще не было...
Geka (2003-03-20 11:57:00) [5]to Игорь Шевченко
Неповеришь, но НИЧЕГО. Он тоже не отрабатывает :-( Или я его не так вызываю
Delirium^.Tremens (2003-03-20 11:54:00) [6]Нет особо времени вчитываться в коды, но вот кусок, который у меня почему-то работает :-)
//---------- ExecAndWait ---------------------------------------
function ExecAndWait(const FileName,
Params: ShortString;
const WinState: Word): boolean;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: ShortString;
fWaiting: TFWaiting;
begin
CmdLine := """ + Filename + "" " + Params;
FillChar(StartInfo, SizeOf(StartInfo), #0);
with StartInfo do
begin
cb := SizeOf(StartInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WinState;
end;
try
fWaiting := TFWaiting.Create(Application);
fWaiting.Caption := "Ожидание...";
fWaiting.Panel1.Caption := "Подождите завершения процесса";
fWaiting.show;
Application.ProcessMessages;
Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
if Result then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
fWaiting.Close;
finally
FreeAndNil(fWaiting);
end;
end;
TFWaiting - это просто формочка для отображения процесса ожидания.
Это для случая, когда нужно ждать завершения процесса, а просто для запуска - alexteam © (20.03.03 10:06)
:-)
Игорь Шевченко (2003-03-20 11:49:00) [7]Что говорит GetLastError ? Без этого дальше нельзя обсуждать
Geka (2003-03-20 11:38:00) [8]to plaha999
Проблема в том, что под 2000 все работает, а под 98 ни одна из вышеперечисленных
plaha999 (2003-03-20 11:21:00) [9]Попробуй определять в какой ВИНДЕ работает твоя прога и используй для каждого варианта свой вариант запуска других программ, т.е. под ВИН2000 свой вариант, который у тебя работает, а под ВИН98 ShellExecute или WinExec...
Fiend (2003-03-20 10:07:00) [10]дада, GetLastError совместно c formatmessage(FORMAT_MESSAGE_FROM_SYSTEM,nil,GetLastError,
счастья принесут не мало
alexteam (2003-03-20 10:06:00) [11]function run(FileName :String): cardinal;
begin
Result := ShellExecute(application.Handle,
nil,pchar(filename),nil,nil,sw_normal);
end;
Игорь Шевченко (2003-03-20 10:02:00) [12]GetLastError - рулез...
Geka (2003-03-20 09:54:00) [13]Проверила: результат тот же :-( Никаких сообщений, просто программа ничего не делает. А в W2000 работает.
Geka (2003-03-20 09:46:00) [14]>Похоже, у Вас FileName содержит неверный путь или имя файла и система его просто не находит. Проверьте отладчиком.
Я запускаю из одного места в сети => FileName одинаковый, а в чем проблема понять не могу. Сейчас попробую Ваш вариант.
Юрий Зотов (2003-03-20 09:43:00) [15]Похоже, у Вас FileName содержит неверный путь или имя файла и система его просто не находит. Проверьте отладчиком.
Вот это должно работать, а в случае ошибки запуска будет возбуждаться исключение с диагностическим сообщением:
var
SI: TStartupInfo;
PI: TProcessInformation;
...
ZeroMemory(@SI, SizeOf(SI));
SI.cb := SizeOf(SI);
Win32Check(CreateProcess(nil, "C:\Dir\Prog.exe Params", nil, nil, False, 0, nil, nil, SI, PI));
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);