Текущий архив: 2003.05.19;
Скачать: CL | DM;
ВнизНе работает запуск программы в Windows 98 Найти похожие ветки
← →
Geka (2003-03-20 09:32) [0]Есть функция для запуска программы. Она работает в 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;
← →
Юрий Зотов (2003-03-20 09:43) [1]Похоже, у Вас 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);
← →
Geka (2003-03-20 09:46) [2]>Похоже, у Вас FileName содержит неверный путь или имя файла и система его просто не находит. Проверьте отладчиком.
Я запускаю из одного места в сети => FileName одинаковый, а в чем проблема понять не могу. Сейчас попробую Ваш вариант.
← →
Geka (2003-03-20 09:54) [3]Проверила: результат тот же :-( Никаких сообщений, просто программа ничего не делает. А в W2000 работает.
← →
Игорь Шевченко (2003-03-20 10:02) [4]GetLastError - рулез...
← →
alexteam (2003-03-20 10:06) [5]function run(FileName :String): cardinal;
begin
Result := ShellExecute(application.Handle,
nil,pchar(filename),nil,nil,sw_normal);
end;
← →
Fiend (2003-03-20 10:07) [6]дада, GetLastError совместно c formatmessage(FORMAT_MESSAGE_FROM_SYSTEM,nil,GetLastError,
счастья принесут не мало
← →
plaha999 (2003-03-20 11:21) [7]Попробуй определять в какой ВИНДЕ работает твоя прога и используй для каждого варианта свой вариант запуска других программ, т.е. под ВИН2000 свой вариант, который у тебя работает, а под ВИН98 ShellExecute или WinExec...
← →
Geka (2003-03-20 11:38) [8]to plaha999
Проблема в том, что под 2000 все работает, а под 98 ни одна из вышеперечисленных
← →
Игорь Шевченко (2003-03-20 11:49) [9]Что говорит GetLastError ? Без этого дальше нельзя обсуждать
← →
Delirium^.Tremens (2003-03-20 11:54) [10]Нет особо времени вчитываться в коды, но вот кусок, который у меня почему-то работает :-)
//---------- 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)
:-)
← →
Geka (2003-03-20 11:57) [11]to Игорь Шевченко
Неповеришь, но НИЧЕГО. Он тоже не отрабатывает :-( Или я его не так вызываю
← →
Geka (2003-03-20 12:45) [12]Пробему ?:-) решила :-)))))
В пути файла один из каталогов был назван на русском :-)
А так, естественно, все работает
У меня ТАКИХ проблем еще не было...
← →
Игорь Шевченко (2003-03-20 13:01) [13]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();
← →
Юрий Зотов (2003-03-20 23:22) [14]> Проверила: результат тот же :-(
> Никаких сообщений, просто программа ничего не делает
Боюсь, неточно Вы проверяли. Там же не зря Win32Check стоит. То есть - либо CreateProcess сработает нормально, либо будет АВТОМАТИЧЕСКИ выведена диагностика GetLastError + FormatMessage. Ничего третьего быть просто не может.
← →
vidiv (2003-03-21 06:35) [15]странно, у меня работает по сети, и с "длинными" русскими именами... может у тебя Windows такой? Либо компьютер на который ты обращаешься работает не под Windows...
Страницы: 1 вся ветка
Текущий архив: 2003.05.19;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.007 c