Форум: "Основная";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];
ВнизПеременная окружения Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c