Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.17;
Скачать: CL | DM;

Вниз

Переменная окружения   Найти похожие ветки 

 
Sandman25 ©   (2003-07-02 17:31) [0]

Здравствуйте.
Нужно открыть файл с помощью WordPad.
В реестре нахожу строку типа
"%ProgramFiles%\Windows NT\Accessories\WORDPAD.EXE" "%1",
заменяю %1 на имя файла.
Если такую строку запустить из Start/Run, то она выполняется, запуская WordPad.
Но чтобы запустить ее программно, я вынужден использовать
RegData := StringReplace(RegData, "%ProgramFiles%",
GetEnvironmentVariable("ProgramFiles"),
[rfIgnoreCase]);
В описании CreateProcess написано, что если я не задаю среду окружения, то наследуется окружение запускающего процесса.
Я пробовал и через WinExec, и через CreateProcess.
Происходит ошибка "The system cannot find the file specified".
Моя программа работает, ведь вряд ли для WordPad будет использоваться другая переменная, но все-таки интересно. Неужели пришлось бы просматривать строку, находить все переменные, используемые в ней, и читать их через GetEnvironmentXXX?

Через CreateProcess я пробовал вот так:

function Exec(const CommandLine: string; const WinState: Word): boolean;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
FillChar(StartInfo, SizeOf(StartInfo), #0);
with StartInfo do
begin
cb := SizeOf(StartInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WinState;
end;
Result := CreateProcess(nil, PChar(CommandLine), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
nil,StartInfo,ProcInfo);
if Result then
begin
{ Free the Handles }
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;

Вызов:
var RegData: string;
Exec(PChar(RegData), SW_SHOWNORMAL);


 
Юрий Федоров ©   (2003-07-02 17:40) [1]

А зачем связываться с переменными окружения?
файл WordPad система должна найти без указания полного пути


 
Sandman25 ©   (2003-07-02 17:48) [2]

Точно.

Спасибо, Юрий! Сейчас переделаю.

А все-таки для интереса - как в таком случае "скопировать" окружение?


 
Sandman25 ©   (2003-07-02 17:59) [3]

Переделал. Не работает. Такое ощущение, что даже Path не установлен.

Я пробовал просто запустить WinExec("wordpad.exe",sw_shownormal);
Та же ошибка - не могу найти файл. Так что лучше через реестр и замену переменной.


 
Юрий Федоров ©   (2003-07-02 18:11) [4]

У меня находит.
Проверял правда не через WinExec а через пуск\выполнить


 
Sandman25 ©   (2003-07-02 18:14) [5]

Через пуск\выполнить и у меня находит, причем даже для "%ProgramFiles%...". Наверное, Winexec среду не копирует, а CreateProcess я неправильно вызвал :(



 
MikeP ©   (2003-07-02 18:35) [6]

ExpandEnvironmentStrings


 
Sandman25 ©   (2003-07-02 18:48) [7]

Спасибо, MikeP. То, что нужно!



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

Текущий архив: 2003.07.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
8-55664
Makhanev A.S.
2003-02-19 21:19
2003.07.17
USLT фрейм ID3v2-тэга


14-55820
MBo
2003-07-01 08:09
2003.07.17
Delphi5 vs Builder6


14-55822
Darts
2003-07-01 12:09
2003.07.17
Вакансия программиста Borland Basic :))


1-55608
IDDQD
2003-07-03 16:24
2003.07.17
Можно ли свою процедуру выполнить как отдельный процесс ?


3-55391
Alexander Vasjuk
2003-06-20 13:12
2003.07.17
TIBDataSet: Проблема с генератором