Здравствуйте Princ, вы писали:
P>1) Запущенное под сервисом приложение (CreateProcess & CreateProcessAsUser) не видимо, даже при залогиненом пользователе. Никаких ошибок не возникает, программа запускается и прекрасно работает, аналогичный код не в сервисе работает как ожидалось.
Если не предпринимать никаких дополнительных действий, то созданный из сервиса процесс будет выполняться на той же паре window station & desktop, что и сервис. Как правило, это неинтерактивная window station (если только при создании сервиса не был указан флаг SERVICE_INTERACTIVE_PROCESS).
Запуск процессов из сервиса на десктопе пользователя описан в
http://www.microsoft.com/MSJ/0200/logon/logon.asp
P>2) Как правильнее из сервиса открыть зарегистрированный в системе документ (те открыть связанную программу и передать ей этот файл).
С какой целью? С трудом могу представить себе сценарий, когда из сервиса нужно открывать документы.
P>- ShellExecute [Ex] не подходят по причинам:
P> a) не позволяет запустить с правами требуемого пользователя
P> b) _как я понимаю_ не могут работать без загруженного шела... или могут?
Я думаю, что все-таки могут.
P>- FindExecutable
P> a) дает только свзяанный exe, но не то как запускать
P> b) то же
P>- (самый экстремальный вариант) — самому читать из реестра, но
P> a) придется предусмотреть всё самому
P> b) часть программ (пр ACDSee) принимает параметры по DDE, я совсем этим не занимался и опять же безопасность NT + DDE = ?
Есть безопасность и в DDE :) Самый простой вариант — это запустить свой процесс под нужным пользователем на нужной паре window station & desktop с помошью CreateProcessAsUser, а оттуда уже вызывать ShellExecuteEx.