Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
11-55482
mike.dld
2002-11-09 15:42
2003.07.17
StringGrid


1-55512
Ш-К
2003-07-04 16:55
2003.07.17
Повторный запуск приложения.


14-55755
Morfey
2003-06-28 03:11
2003.07.17
В чате просили исходник...


14-55799
Mifs
2003-06-30 18:14
2003.07.17
Адресация жесткого диска. (CHS)


1-55593
Urvin
2003-07-02 17:26
2003.07.17
Покраска Кнопок





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