Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.013 c
14-59945
msoftware
2003-04-30 15:53
2003.05.19
Где достать Erwin ERX Platinum?


1-59692
Masa
2003-05-07 19:00
2003.05.19
В чем разница между обьявлениями


9-59522
TWINc1
2002-12-13 11:32
2003.05.19
X


14-59910
Шоломицкий
2003-04-29 22:17
2003.05.19
В инете делать нечего....


3-59541
Anar
2003-04-29 11:56
2003.05.19
Как загружать в таблицу данные из файла MDB?