Помогите сделать автостарт приложения
От: arkhivania  
Дата: 22.06.09 09:39
Оценка:
Добрый день! Не думал что попаду в подобный тупик
Необходимо сделать так, чтобы приложение запускалось при входе пользователя в систему. Раньше я использовал ключик в реестре Windows\CurrentVersion\Run для запуска приложения, но потом начал наблюдать что у многих пользователей (видимо в зависимости от антивирусов) этот ключик то вытирался, то приложение не смотря на ключик не запускается. Решил изменить стиль запуска приложения, регистрирую службу под LocalSystem и смотрю сколько открыто десктопов и зарегистрирован ли мутекс приложения, если нет, то пускаю в Default десктопе свое приложение. Проблема в том, что службе для этого необходимо взаимодействие с рабочим столом, что оказывается новыми версиями виндоузами форсированно вычищается. Вопрос: как сделать надежный авторан приложения?
Re: Помогите сделать автостарт приложения
От: Smarty Россия  
Дата: 22.06.09 11:40
Оценка: +1
Здравствуйте, arkhivania, Вы писали:

A>Добрый день! Не думал что попаду в подобный тупик

A>Необходимо сделать так, чтобы приложение запускалось при входе пользователя в систему. Раньше я использовал ключик в реестре Windows\CurrentVersion\Run для запуска приложения, но потом начал наблюдать что у многих пользователей (видимо в зависимости от антивирусов) этот ключик то вытирался, то приложение не смотря на ключик не запускается. Решил изменить стиль запуска приложения, регистрирую службу под LocalSystem и смотрю сколько открыто десктопов и зарегистрирован ли мутекс приложения, если нет, то пускаю в Default десктопе свое приложение. Проблема в том, что службе для этого необходимо взаимодействие с рабочим столом, что оказывается новыми версиями виндоузами форсированно вычищается. Вопрос: как сделать надежный авторан приложения?

Вирус пишем? Просто есть аксиома — если юзер НЕ хочет запуска любого приложения — приложение не запустится. Например — как вы можете заставить меня запускать вашу нетленку, да еще в авторане? Поэтому если цель топика раскрыть тему "как бороться с тупым юзверем", то никак. Юзверь всегда прав! Если он удалаяет что-то из CurrentVersion\Run — значит так надо. Насчет же

то приложение не смотря на ключик не запускается.


типа сомневаюсь. Если б это было системным являением такой бы хай стоял по всему И-нету, причем именно хай юзеров. Они же заинтересованы в автостартах...
Может просто конфликт идет с другим автостартником?
Re: Помогите сделать автостарт приложения
От: LuciferSaratov Россия  
Дата: 22.06.09 11:44
Оценка: +2
Здравствуйте, arkhivania, Вы писали:

A>Вопрос: как сделать надежный авторан приложения?


Прекрасный способ — это записывать ярлык в Пуск-Программы-Автозагрузка.
Re[2]: Помогите сделать автостарт приложения
От: arkhivania  
Дата: 22.06.09 11:46
Оценка:
Здравствуйте, Smarty, Вы писали:

S>Здравствуйте, arkhivania, Вы писали:


A>>Добрый день! Не думал что попаду в подобный тупик

A>>Необходимо сделать так, чтобы приложение запускалось при входе пользователя в систему. Раньше я использовал ключик в реестре Windows\CurrentVersion\Run для запуска приложения, но потом начал наблюдать что у многих пользователей (видимо в зависимости от антивирусов) этот ключик то вытирался, то приложение не смотря на ключик не запускается. Решил изменить стиль запуска приложения, регистрирую службу под LocalSystem и смотрю сколько открыто десктопов и зарегистрирован ли мутекс приложения, если нет, то пускаю в Default десктопе свое приложение. Проблема в том, что службе для этого необходимо взаимодействие с рабочим столом, что оказывается новыми версиями виндоузами форсированно вычищается. Вопрос: как сделать надежный авторан приложения?

S>Вирус пишем? Просто есть аксиома — если юзер НЕ хочет запуска любого приложения — приложение не запустится. Например — как вы можете заставить меня запускать вашу нетленку, да еще в авторане? Поэтому если цель топика раскрыть тему "как бороться с тупым юзверем", то никак. Юзверь всегда прав! Если он удалаяет что-то из CurrentVersion\Run — значит так надо. Насчет же

S>

S>то приложение не смотря на ключик не запускается.


S>типа сомневаюсь. Если б это было системным являением такой бы хай стоял по всему И-нету, причем именно хай юзеров. Они же заинтересованы в автостартах...

S>Может просто конфликт идет с другим автостартником?

Не, приложение имеет полный администраторский доступ во время установки, и считаем что этого достаточно чтобы устроить автостарт программы.
Re[2]: Помогите сделать автостарт приложения
От: arkhivania  
Дата: 22.06.09 11:48
Оценка:
Здравствуйте, LuciferSaratov, Вы писали:

LS>Здравствуйте, arkhivania, Вы писали:


A>>Вопрос: как сделать надежный авторан приложения?


LS>Прекрасный способ — это записывать ярлык в Пуск-Программы-Автозагрузка.


В принципе вариант, надо только сделать так, чтобы этот ярлык появлялся у всех пользователей.
Re[3]: Помогите сделать автостарт приложения
От: Ромашка Украина  
Дата: 22.06.09 12:09
Оценка: 4 (2) +1
arkhivania написав(ла):
> В принципе вариант, надо только сделать так, чтобы этот ярлык появлялся
> у всех пользователей.

Записать его в All Users? Что-то вроде "C:\Documents and Settings\All
Users\Start Menu\Programs\Startup"
Posted via RSDN NNTP Server 2.1 beta


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[4]: Помогите сделать автостарт приложения
От: GarryIV  
Дата: 23.06.09 05:36
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Записать его в All Users? Что-то вроде "C:\Documents and Settings\All

Р>Users\Start Menu\Programs\Startup"

У меня оттуда тоже "пропадают" ярлыки
WBR, Igor Evgrafov
Re: Помогите сделать автостарт приложения
От: Воронков Василий Россия  
Дата: 23.06.09 08:44
Оценка:
Здравствуйте, arkhivania, Вы писали:

A>Проблема в том, что службе для этого необходимо взаимодействие с рабочим столом, что оказывается новыми версиями виндоузами форсированно вычищается.


Вот что сама МС предлагает для Висты:
http://msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx

На первый взгляд вполне реальное решение. Запускаете из сервиса другое приложение и общаетесь с ним через какой-нибудь канал, хоть тот же ремотинг на пайпах.
Re[2]: Помогите сделать автостарт приложения
От: arkhivania  
Дата: 23.06.09 08:52
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, arkhivania, Вы писали:


A>>Проблема в том, что службе для этого необходимо взаимодействие с рабочим столом, что оказывается новыми версиями виндоузами форсированно вычищается.


ВВ>Вот что сама МС предлагает для Висты:

ВВ>http://msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx

ВВ>На первый взгляд вполне реальное решение. Запускаете из сервиса другое приложение и общаетесь с ним через какой-нибудь канал, хоть тот же ремотинг на пайпах.


так и пришлось сделать, правда пришлось поколдовать, так как сервис запускался в сессии 0, а десктопы в 1 и не так просто можно в висте сделать службу которая имеет доступ к десктопу, но получилось. Да, и в результате само приложение пользовательское тоже живет под LocalSystem эккаунтом.
Re[3]: Помогите сделать автостарт приложения
От: Воронков Василий Россия  
Дата: 23.06.09 09:09
Оценка:
Здравствуйте, arkhivania, Вы писали:

A>так и пришлось сделать, правда пришлось поколдовать, так как сервис запускался в сессии 0, а десктопы в 1 и не так просто можно в висте сделать службу которая имеет доступ к десктопу, но получилось. Да, и в результате само приложение пользовательское тоже живет под LocalSystem эккаунтом.


А зачем создавать службу, которая имеет доступ к декстопу? Служба должна быть самой обычной неинтерактивной, раз флажок интерактивности все равно не работает. Просто данная служба после своего запуска — ну, допустим, проверив, что логон уже произошел — запускает другое приложение, опять-таки самое обычное десктопное, при этом сама никакого доступа к десктопу по-прежнему не имеет.
А потом используется это другое приложение как своего рода stdout, кидая в него нужную информацию через IPC канал.

Кстати, подобная архитектура всегда мне казалось более правильной, чем заставлять сервис делать что-то на десктопе — ну разве что кроме мессадж-боксов.
Re[4]: Помогите сделать автостарт приложения
От: arkhivania  
Дата: 23.06.09 09:13
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Просто данная служба после своего запуска — ну, допустим, проверив, что логон уже произошел — запускает другое приложение, опять-таки самое обычное десктопное


вот для этого и надо иметь доступ к десктопу
Re[5]: Помогите сделать автостарт приложения
От: Воронков Василий Россия  
Дата: 23.06.09 09:24
Оценка: 2 (1)
Здравствуйте, arkhivania, Вы писали:

A>вот для этого и надо иметь доступ к десктопу


Мне казалось, что из неинтерактивного сервиса можно создать интерактивный процесс, но, конечно, не совсем в лоб. Указываете юзер-токен и десктоп, какой-нибудь WinSta0\\Default, под которым он исполняется.
Вот, вроде, статья где что-то подобное и описываются + обходят UAC:
http://www.codeproject.com/KB/vista-security/SubvertingVistaUAC.aspx?display=Print
Re[6]: Помогите сделать автостарт приложения
От: Аноним  
Дата: 24.06.09 16:30
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Вот, вроде, статья где что-то подобное и описываются + обходят UAC:

ВВ>http://www.codeproject.com/KB/vista-security/SubvertingVistaUAC.aspx?display=Print

Пара слов по поводу статьи, если позволите.

Он ищет WinLogon с нужным ID сессии. А в следующем сервис паке ему имя поменяют и приехали. А то и просто доступ закроют. Да и просто время теряется на поиск. Всё прогрессивное человечество давно юзает маркер самого сервиса вкупе с SetTokenInformation.

DuplicateTokenEx — сомнительная надобность. Может на Висте что поменялось, но вряд-ли, а на предыдущих версиях ОС и без того у сервиса первичный маркер. Я вообще не припомню, чтобы OpenProcessToken когда-нибудь вернула не Primary Token. Ну может в каких-то специфичных случаях это и бывает, но только не для сервиса.

dwCreationFlags = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE — Если NORMAL_PRIORITY_CLASS ёщё можно считать более-менее уместным, то зачем тут CREATE_NEW_CONSOLE, совершенно не понятно
Re[7]: Помогите сделать автостарт приложения
От: arkhivania  
Дата: 28.06.09 14:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>Вот, вроде, статья где что-то подобное и описываются + обходят UAC:

ВВ>>http://www.codeproject.com/KB/vista-security/SubvertingVistaUAC.aspx?display=Print

А>Пара слов по поводу статьи, если позволите.


А>Он ищет WinLogon с нужным ID сессии. А в следующем сервис паке ему имя поменяют и приехали. А то и просто доступ закроют. Да и просто время теряется на поиск. Всё прогрессивное человечество давно юзает маркер самого сервиса вкупе с SetTokenInformation.


А>DuplicateTokenEx — сомнительная надобность. Может на Висте что поменялось, но вряд-ли, а на предыдущих версиях ОС и без того у сервиса первичный маркер. Я вообще не припомню, чтобы OpenProcessToken когда-нибудь вернула не Primary Token. Ну может в каких-то специфичных случаях это и бывает, но только не для сервиса.


А>dwCreationFlags = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE — Если NORMAL_PRIORITY_CLASS ёщё можно считать более-менее уместным, то зачем тут CREATE_NEW_CONSOLE, совершенно не понятно


Я использовал методы из статьи, проверил на 28 компутерах (WinXP и Vista). Удинственное что, вместо WTSGetActiveConsoleSessionId использовал енумерацию активных сессий. Всё пока работает хорошо (когда будет около 40 компутеров скажу что очень хорошо).
Re[8]: Помогите сделать автостарт приложения
От: Аноним  
Дата: 29.06.09 05:16
Оценка:
Здравствуйте, arkhivania, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, Воронков Василий, Вы писали:


A>Я использовал методы из статьи, проверил на 28 компутерах (WinXP и Vista). Удинственное что, вместо WTSGetActiveConsoleSessionId использовал енумерацию активных сессий. Всё пока работает хорошо (когда будет около 40 компутеров скажу что очень хорошо).


Дак ведь я и не говорил, что оно не будет работать Часто одно и то-же можно получить несколькими разными путями, но не все они одинаково оптимальны. Посто он выполняет пару ненужных действий, которые немного замедляют работу и одно из них потенциально может в будущем с небольшой вероятностью привести к проблемам, только и всего. Изложенный мной сценарий тоже проверен, и не только мной. А по поводу перечисления сессий вместо WTSGetActiveConsoleSessionId — деталь вообще-то несущественная

Впрочем, вопрос отношения к оптимизации каждый решает для себя сам.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.