Доброго всем времени суток. Столкнулся с одной интересной проблемой - CreateProcessWithLogonW ведет себя по-разному в разных местах программы (сразу оговорюсь - я трезвый и ни чего не курил . Создадим в Делфях новый проект с пустой формой. Создадим процедуру с вот таким вот содержанием: Код (Text): procedure RunSomeProcess; var si: TSTARTUPINFO; pif: PROCESS_INFORMATION; begin si.cb := SizeOf(TSTARTUPINFO); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := SW_SHOWDEFAULT; si.lpReserved := nil; si.lpDesktop := nil; si.lpTitle := nil; CreateProcessWithLogonW('Test', nil, 'test', 0, nil, 'c:\WINDOWS\system32\calc.exe', 0, nil, nil, si, pif); end; Естественно, пользователя Test нужно создать заранее (я создал его с правами админа). Так же нужно убедиться, что служба "Вторичный вход в систему" запущена. Попробуем теперь вызвать RunSomeProcess при загрузке формы: Код (Text): procedure TForm1.FormCreate(Sender: TObject); begin RunSomeProcess; end; Калькулятор запустился, но как... Целых два раза мы лицезреем "ошибку при инициализации приложения (0xc0000005)" и наш подопытный умирает. Дальше кинем на форму таймер (Interval == 1000) и вызовем RunSomeProcess в его обработчике: Код (Text): procedure TForm1.Timer1Timer(Sender: TObject); begin RunSomeProcess; Timer1.Enabled := false; end; Калькулятор вообще не запустился. GetLastError возвращает ERROR_NO_TOKEN. Теперь изменим немного код в обработчике таймера, просто скопировав содержимое функции RunSomeProcess: Код (Text): procedure TForm1.Timer1Timer(Sender: TObject); var si: TSTARTUPINFO; pif: PROCESS_INFORMATION; begin si.cb := SizeOf(tstartupinfo); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := SW_SHOWDEFAULT; si.lpReserved := nil; si.lpDesktop := nil; si.lpTitle := nil; CreateProcessWithLogonW('Test', nil, 'test', 0, nil, 'c:\WINDOWS\system32\calc.exe', 0, nil, nil, si, pif); Timer1.Enabled := false; end; Подопытный запустился и прекрасно работает. Вот такие вот пироги. У кого-нибудь есть мысли, отчего такой беспредел творится?
Ай-ай-ай... Что-то я, действительно, про это даже не подумал - видать заработался совсем. Вопрос закрыт.
Mental_Mirror Да не говори. Ну да ладно - с кем не бывает. К модерам просьба - топик снести, а то действительно стыд и позор