Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Вниз

OpenSaveDialog и CreateProcess   Найти похожие ветки 

 
Elec3C ©   (2007-11-04 20:05) [0]

Есть небольшая проблемка.

Сначала код:
Запуск приложений(OpenDlg : TKOLOpenSaveDialog):
...
 progs : array[0..1] of String;
...
procedure(FileName : String);
var
 FileName : String;//Имя и путь запускаемой программы
 SI       : _STARTUPINFOA;
 PI       : _PROCESS_INFORMATION;
begin
 ZeroMemory(@SI, SizeOf(_STARTUPINFOA));
 ZeroMemory(@PI, SizeOf(_PROCESS_INFORMATION));

 with SI, PI do
  begin
    cb          := SizeOf(_STARTUPINFOA);
    dwFlags     := STARTF_USESHOWWINDOW;
    wShowWindow := SW_SHOWNORMAL;

    CreateProcess(nil, PChar(FileName), nil, nil, False, NORMAL_PRIORITY_CLASS,
       

         nil,             nil,  SI,  PI);

    CloseHandle(hProcess);  CloseHandle(hThread);   CloseHandle(hStdError);
    CloseHandle(hStdInput); CloseHandle(hStdOutPut);
  end;
end;
...
Путь и имя запускаемой 1-ой программы:
...
OpenDlg.Title  := "Программа";
OpenDlg.Filter := "Программа (*.exe)|*.exe";
if OpenDlg.Execute then
progs[0] := OpenDlg.Filename;
...
Путь и имя запускаемой 2-ой программы:
...
OpenDlg.Title  := "Программа";
OpenDlg.Filter := "Программа (*.exe)|*.exe";
if OpenDlg.Execute then
progs[1] := OpenDlg.Filename;
...

Описание проблемы:
Указываю путь и имя 1-ой программы в OpenDlg(например "F:\Games\Quake 3\Quake3.exe").
Пробую запустить 1-ую программу(Успешно). Закрываю Quake. Указываю путь и имя 2-ой

программы(например "F:\Games\CS\CS.exe"). Пробую запустить 2-ую программу(Успешно).
Затем пытаюсь запустить 1 программу, quake3(в моём примере) пытается грузится
не с "F:\Games\Quake 3\"(хотя в progs[0] указан "F:\Games\Quake 3\Quake3.exe"),
а с "F:\Games\CS\". В итоге quake 3 не запускается(такое происходить не только с

Quake"ом). Подскажите в чём может быть проблема?


 
Compiler ©   (2007-11-04 21:40) [1]

Может быть воспользоваться функцией ShellExecute(0,"open",pchar(filename),nil,nil,SW_SHOWNORMAL);
и по-моему reateProcess(PChar(FileName), nil,...


 
Elec3C ©   (2007-11-05 00:12) [2]


> и по-моему reateProcess(PChar(FileName), nil,...

Так пробовал - не помогает!
А через CreateProcess?


 
Elec3C ©   (2007-11-05 00:32) [3]

C ShellExecute тоже ничего не выходит(


 
Vladimir KladovVladimir Kladov   (2007-11-05 08:15) [4]

А где те строчки, которые используют p[0] и p[1]? Можно ведь вместо вызова программы просто сделать ShowMessage, чтобы просто убедиться, сделать наконец остановку, посмотреть значения переменных. Не верю, что виноват диалог. Рзве только выставлена опция multi0select и Filename перед вызовом не стираете, но это задокументировано.


 
Вячеслав   (2007-11-05 15:30) [5]


CreateProcess( lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation);
lpCurrentDirectory
Points to a null-terminated string that specifies the current drive and directory for the child process. The string must be a full path and filename that includes a drive letter. If this parameter is NULL, the new process is created with the same current drive and directory as the calling process. This option is provided primarily for shells that need to start an application and specify its initial drive and working directory.



> Указываю путь и имя 1-ой программы в OpenDlg(например "F:
> \Games\Quake 3\Quake3.exe").
> Пробую запустить 1-ую программу(Успешно). Закрываю Quake.

OpenDlg изменяет каталог на "F:\Games\Quake 3"
При вызове CreateProcess lpCurrentDirectory не указана значит будет использоватся текущий каталог.

>  Указываю путь и имя 2-ой
> программы(например "F:\Games\CS\CS.exe"). Пробую запустить
> 2-ую программу(Успешно).

OpenDlg изменяет каталог на "F:\Games\CS"

> Затем пытаюсь запустить 1 программу, quake3(в моём примере)
> пытается грузится
> не с "F:\Games\Quake 3\"(хотя в progs[0] указан "F:\Games\Quake
> 3\Quake3.exe"),
> а с "F:\Games\CS\". В итоге quake 3 не запускается(такое
> происходить не только с
Quake"ом). Подскажите в чём может быть проблема?

Quake при запуске сам не меняет каталог. Но пытается открыть ресурсы расположенные в ТЕКУЩИЙ КАТАЛОГ\Base\*.pk3. А так как в текущий каталог это "F:\Games\CS\" то найти своих ресурсов он там не может и валится с ошибкой.

Наверно надо как-то так:
CreateProcess(nil, PChar(FileName), nil, nil, False, NORMAL_PRIORITY_CLASS,
nil, PChar(ExtractFilePath(prog[0]),  SI,  PI);


 
Elec3C ©   (2007-11-05 17:10) [6]

Лекарство от Вячеслава помогло. Спасибо.



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
1-1199531227
ras122
2008-01-05 14:07
2008.10.05
помогите с работой с мышкой, пожалуйста


15-1219000113
Andy BitOff
2008-08-17 23:08
2008.10.05
Компонент реализующий RAMDisk.


2-1219895591
snake-as
2008-08-28 07:53
2008.10.05
Печать картинок


2-1219559874
zivan
2008-08-24 10:37
2008.10.05
Сортировка в TTreeView


15-1218610196
MsGuns
2008-08-13 10:49
2008.10.05
Лето или очередная летаргия форума ?





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