Главная страница
    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
1-55524
Tahion2
2003-07-03 07:08
2003.07.17
Чтение из реестра под гостем в ХР


7-55867
AndreiSm
2003-05-07 11:22
2003.07.17
Определение чипсета системной платы


1-55589
Сушняк
2003-07-03 12:23
2003.07.17
Проблема с написанием компонента.


14-55785
Jumbo
2003-06-29 19:10
2003.07.17
Статистика использования операционок


14-55723
KILLER_ABV
2003-07-02 15:39
2003.07.17
TmsComponentPack





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