Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];

Вниз

Просьба проверить код на Windows Vista   Найти похожие ветки 

 
tmp   (2007-09-22 14:20) [0]

У Вас работает этот код без пробела перед c:\New_text_file.txt ?

procedure TForm1.Button1Click(Sender: TObject);
var
 si: STARTUPINFO;
 pi: PROCESS_INFORMATION;
 WinDir: array[0..MAX_PATH] of Char;
begin
 ZeroMemory(@si, SizeOf(si));
 ZeroMemory(@pi, SizeOf(pi));
 si.cb := SizeOf(si);
 si.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEOFFFEEDBACK;
 si.wShowWindow := SW_SHOWNORMAL;
 if GetWindowsDirectory(WinDir,SizeOf(WinDir)) > 0 then
   if CreateProcess(PChar(WinDir + "\notepad.exe"), "c:\New_text_file.txt", nil,
     nil, False, 0, nil, nil, si, pi)
   then
     ShowMessage(IntToStr(Integer(CloseHandle(pi.hProcess))));  
end;


 
Denis_ ©   (2007-09-22 15:21) [1]

Да.


 
tmp   (2007-09-22 15:40) [2]


> Denis_ ©   (22.09.07 15:21) [1]
>
> Да.

Спасибо.
С Win9x до Xp SP2 - не пашет.


 
Юрий Зотов ©   (2007-09-22 16:32) [3]

Сорри, но код безобразный.
:-(


 
tmp   (2007-09-22 20:29) [4]


> Юрий Зотов ©   (22.09.07 16:32) [3]
>
> Сорри, но код безобразный.
> :-(
>

Я не профи, но вопрос был в другом: работает или нет. Кстати, а что не так?


 
Вася Правильный   (2007-09-22 20:40) [5]


>  без пробела перед c:\New_text_file.txt ?

пробел проверяем в константе или перед ней?


 
Anatoly Podgoretsky ©   (2007-09-22 22:16) [6]


> Кстати, а что не так?

Отсутствие обработки ошибок.


 
Юрий Зотов ©   (2007-09-22 22:40) [7]

> tmp   (22.09.07 20:29) [4]

> Кстати, а что не так?

1. Много лишнего.
2. Утечка ресурсов.
3. Нет обработки ошибок.

Сравните - этот код делает то же самое:

procedure TForm1.Button1Click(Sender: TObject);
var
 si: STARTUPINFO;
 pi: PROCESS_INFORMATION;
begin
 ZeroMemory(@si, SizeOf(si));
 si.cb := SizeOf(si);
 Win32CheckCreateProcess(nil, "notepad.exe c:\New_text_file.txt", nil, nil, False, 0, nil, nil, si, pi));
 CloseHandle(pi.hThread)
 CloseHandle(pi.hProcess)
end;


 
Юрий Зотов ©   (2007-09-22 22:42) [8]

Скобку пропустил:
Win32Check(...


 
tmp   (2007-09-22 23:42) [9]

Насчет обработки ошибок - это всего лишь тестовый код. Про CloseHandle(pi.hThread) забыл, а параметры lpApplicationName и lpCommandLine нужны для проверки, т.к функция без начального пробела перед параметром lpCommandLine почему-то не работает в Windows 9x/Me/XP/XPSP2, хотя в MSDN ничего не сказано на этот счет.


 
исследователь ©   (2007-09-23 00:37) [10]


> Юрий Зотов ©   (22.09.07 22:40) [7]

А почему зеромемори для pi не вызываете?


 
Anatoly Podgoretsky ©   (2007-09-23 11:38) [11]

> исследователь  (23.09.2007 00:37:10)  [10]

Из-за бессмысленности подобной операции.


 
исследователь ©   (2007-09-23 12:39) [12]

Значит, si обнулять не бессмысленно, а pi - бессмысленно? Обоснуйте.


 
Юрий Зотов ©   (2007-09-23 12:55) [13]

> tmp   (22.09.07 23:42) [9]

> функция без начального пробела перед параметром lpCommandLine
> почему-то не работает в Windows 9x/Me/XP/XPSP2

Я этот код использовал десятки раз - все работало. Похоже, причина в чем-то другом.

> исследователь ©   (23.09.07 12:39) [12]

Обнулять si нужно потому, что эта запись содержит ВХОДНЫЕ для CreateProcess данные. Если в них будет мусор, то CreateProcess или не сработает вообще, или сработает случайным образом (что еще хуже).

А pi содержит два поля и оба они заполняются внутри самой CreateProcess. Поэтому безразлично, что эти поля содержали перед вызовом - а если так, то операция их очистки лишняя.


 
Юрий Зотов ©   (2007-09-23 12:58) [14]

> pi содержит два поля

Сорри, не два, а четыре. Но это ни на что не влияет - все четыре все равно заполняет сама CreateProcess, поэтому чистить их перед вызовом бессмысленно.


 
исследователь ©   (2007-09-23 14:07) [15]

Спасибо.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.048 c
6-1171873686
megajober3d
2007-02-19 11:28
2007.10.21
Проблема с UDP пакетами по сети Internet


6-1163414321
anis
2006-11-13 13:38
2007.10.21
Как отобразить ход выполнения закачки IdFTP?


15-1190093011
boriskb
2007-09-18 09:23
2007.10.21
Домен su живет и побеждает


15-1190091413
Kolan
2007-09-18 08:56
2007.10.21
Что-то я думаю, Gero пропал, а у меня есть DMClient RC1, может&#133


2-1190806117
F@T@L_Err0r
2007-09-26 15:28
2007.10.21
Связка





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