Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.015 c
1-55620
Snake1977
2003-07-03 16:54
2003.07.17
Как переместить главную форму


14-55775
Карелин Артем
2003-06-30 13:48
2003.07.17
Как распаковать экзешник, запакованный с помощью UPX?


1-55652
Balkon
2003-07-04 13:36
2003.07.17
Что понимается под текущей директорией, возвращаемой...


3-55471
AlexA
2003-06-11 12:53
2003.07.17
ApplyUpdates?


14-55754
Mike B.
2003-07-01 15:46
2003.07.17
Враги.




   Наверх