Главная страница
    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.48 MB
Время: 0.007 c
1-59761
bss
2003-05-06 11:56
2003.05.19
Работа с TDateTime


6-59840
MortalScorpion
2003-03-20 17:06
2003.05.19
Немогу описать событие в ядре


4-60004
AlexWM
2003-03-16 17:29
2003.05.19
Чтение заголовка окна


3-59619
ligor
2003-04-28 21:25
2003.05.19
FibPlus


1-59791
OlegM
2003-05-07 06:41
2003.05.19
Как сделать невидимой определенную колонку StringGrid a





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