Главная страница
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.016 c
14-55810
Дмитрий К.К.
2003-07-01 06:50
2003.07.17
Именинники 1 июля


7-55876
sergio_serg
2003-05-05 17:19
2003.07.17
освободить память


1-55542
killer
2003-07-05 15:29
2003.07.17
Как удалить компонент?


3-55423
Lexa2504
2003-06-24 10:07
2003.07.17
Формат ячеек в StringGrid


3-55404
Status_I
2003-06-22 19:47
2003.07.17
Ввод функции