Как определить способ запуска программы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Как определить способ запуска программы

Сообщение Space » 22.03.2009 (Вс) 22:46

Как определить, была ли программа запущена из автостарта(реестр) или каким другим способом?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 22.03.2009 (Вс) 22:49

Нет, потому что способ запустить процесс всего один.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как определить способ запуска программы

Сообщение MIT » 22.03.2009 (Вс) 22:57

Можно поставить флаг запуска в реестре, а в приложении просто проверить параметры, с которыми оно запущено. Если там имеется, например, " -fromHKLM", значит запуск был произведен из понятно-откуда.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 22.03.2009 (Вс) 23:04

Если там имеется, например, " -fromHKLM", значит запуск был произведен из понятно-откуда.

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

Так что этот вариант, как способ определить, откуда запущен процесс, не принимается. Хотя принимается как вариант обходного пути. Но, мне думается, автору этот вариант и так очевиден.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Как определить способ запуска программы

Сообщение Space » 22.03.2009 (Вс) 23:06

какой флаг? Ключ ты имел ввиду? Вроде С:\...\myprg.exe -r ? Тогда как получить ключи, с которыми прога запущена?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 22.03.2009 (Вс) 23:08

Command$
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как определить способ запуска программы

Сообщение MIT » 22.03.2009 (Вс) 23:11

Space писал(а):Ключ ты имел ввиду? Вроде С:\...\myprg.exe -r ?
Ага, он самый.

Хакер писал(а):Так что этот вариант, как способ определить, откуда запущен процесс, не принимается.
Ты сам сказал, что реально правильного способа нет, так что лучше тут, имхо, не придумаешь. Хотя теоретически...
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 22.03.2009 (Вс) 23:15

Ты сам сказал, что реально правильного способа нет, так что лучше тут, имхо, не придумаешь.

Да, ну я, собственно, особо и не критикую твой пост. Просто хочу заметить, что это не ответ на поставленный вопрос, а другое решение проблемы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Как определить способ запуска программы

Сообщение MIT » 22.03.2009 (Вс) 23:22

А я что? А я ничего. :)
Ладно, автору решать, подходит данный вариант ему или нет.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить способ запуска программы

Сообщение jangle » 22.03.2009 (Вс) 23:39

Господи, все же намного проще. При старте сканируем ветку Software\Microsoft\Windows\CurrentVersion\Run и ищем там свое имя.
Если его там нет, значит запустились не из реестра :wink:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 22.03.2009 (Вс) 23:48

Уже теплее, но:

Как ты планируешь сравнивать то, что там есть, с собой?
А если оно было в RunOnce?
А если прав на чтение этого раздела реестра нет?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить способ запуска программы

Сообщение jangle » 23.03.2009 (Пн) 0:00

Хакер писал(а):Уже теплее, но:

Как ты планируешь сравнивать то, что там есть, с собой?
А если оно было в RunOnce?
А если прав на чтение этого раздела реестра нет?


В ветках \Run и \RunOnce должны быть пути к нашему экзешнику. Просто сканируем эти ветки, плюс папки автозагрузки. И сравниваем с именем своего EXE. Про запрет на чтение из этих веток реестра, ничего не скажу, не сталкивался с таким.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Как определить способ запуска программы

Сообщение Space » 23.03.2009 (Пн) 0:04

Как это нет прав? Прога сама пишет ключ в реестр и сама читает.
А сканировать ветку неверно, т.к. ветка может быть, а прога запущена повторно, например, кликом по иконке на рабочем столе, после того как закрыта была после автостарта ;)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как определить способ запуска программы

Сообщение iGrok » 23.03.2009 (Пн) 0:13

С RunOnce всё зависит от того, в какой момент удаляется ключ. После запуска, или после завершения работы. Если сразу после запуска - то фиг ты это проверишь..

Space писал(а):Как это нет прав? Прога сама пишет ключ в реестр и сама читает.

Да элементарно. Ключ записан из-под админа, а запуск производится из-под пользователя. Правда, права на чтение обычно есть для всех.. Но бывают исключения.

Space писал(а):А сканировать ветку неверно, т.к. ветка может быть, а прога запущена повторно, например, кликом по иконке на рабочем столе, после того как закрыта была после автостарта ;)

А кстати, да. )
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 23.03.2009 (Пн) 0:14

И сравниваем с именем своего EXE.

Вот об этом по подробнее. Как ты собрался сравнивать?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить способ запуска программы

Сообщение jangle » 23.03.2009 (Пн) 0:15

Space писал(а):Как это нет прав? Прога сама пишет ключ в реестр и сама читает.
А сканировать ветку неверно, т.к. ветка может быть, а прога запущена повторно, например, кликом по иконке на рабочем столе, после того как закрыта была после автостарта ;)


Угу, только после первого запуска, ты оставляешь метку в виде глобального атома. Программа ищет не только в реестре, но и этот атом.
Его наличие означает, что программа уже запускалась из реестра. Как видишь все просто, только гибкость ума и никакого мошенничества. :)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить способ запуска программы

Сообщение jangle » 23.03.2009 (Пн) 0:19

Хакер писал(а):
И сравниваем с именем своего EXE.

Вот об этом по подробнее. Как ты собрался сравнивать?


Что-то не понимаю тебя. Сравниваю имя своего экзешника и экзешников прописанных в списке автозагрузки.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 23.03.2009 (Пн) 0:20

Меня интересует способ сравнения.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Как определить способ запуска программы

Сообщение Space » 23.03.2009 (Пн) 0:22

Не знаю, что там у тя за глобальные атомы и останутся ли они после завершения проги, но тут уже не проще первого варианта ;)
У меня прога пишет в HKCU, так что с правами должно быть всё ok.
А теперь ещё вопрос на засыпку - должна ли программа восcтанавливать автозапуск при старте, если он был удалён из реестра извне (т.е. в проге установлен флаг Автозагрузка)?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить способ запуска программы

Сообщение jangle » 23.03.2009 (Пн) 0:28

Хакер писал(а):Меня интересует способ сравнения.


Сравнение двух текстовых строк? Может объяснишь, что ты на самом деле хочешь сказать.

Не знаю, что там у тя за глобальные атомы и останутся ли они после завершения проги, но тут уже не проще первого варианта


Глобальные атомы живут до перезагрузки системы. Это вобщем азы WinApi

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 23.03.2009 (Пн) 0:31

jangle писал(а):Сравнение двух текстовых строк? Может объяснишь, что ты на самом деле хочешь сказать.

Это и хочу сказать.

Вот так будешь сравнивать?
If sFileNameFromRegistry = App.Path + "\" + App.ExeName + ".exe" Then
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Как определить способ запуска программы

Сообщение Space » 23.03.2009 (Пн) 0:57

Хакер небось хочет подловить его на разных местах запуска проги ;) Хотя, в основном прога запускается с одного места, куды она инсталлирована. Но мобильность exe тоже хороша ;) Но тогда строки не будут равны, автозагрузки не будет, прога может принять неравенство как отсутствие значения ключа и в принципе, сработает правильно...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить способ запуска программы

Сообщение jangle » 23.03.2009 (Пн) 1:07

Хакер писал(а):
jangle писал(а):Сравнение двух текстовых строк? Может объяснишь, что ты на самом деле хочешь сказать.

Это и хочу сказать.

Вот так будешь сравнивать?
If sFileNameFromRegistry = App.Path + "\" + App.ExeName + ".exe" Then


Достаточно сравнить просто имена экзешников. Все равно не пойму куда ты клонишь.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить способ запуска программы

Сообщение jangle » 23.03.2009 (Пн) 1:08

Space писал(а):Хакер небось хочет подловить его на разных местах запуска проги ;)


Ну этоже детский сад! :) Никакой проблемы не представляет

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Как определить способ запуска программы

Сообщение ANDLL » 23.03.2009 (Пн) 1:18

Глобальные атомы живут до перезагрузки системы. Это вобщем азы WinApi
Нет, их время жизни ограничено жизнью сеанса.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Как определить способ запуска программы

Сообщение Space » 23.03.2009 (Пн) 1:23

давайте вернёмся к вопросу - должна ли программа восcтанавливать автозапуск при старте, если он был удалён из реестра извне (т.е. в проге установлен флаг Автозагрузка)?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 23.03.2009 (Пн) 1:34

Ну этоже детский сад! Никакой проблемы не представляет

  • Длинные пути/короткие пути
  • каталоги [.] и [..]
  • UNC-пути
  • DosDevice-овые диски, т.е. виртуальные тома, созданные с помощью subst.
  • Симлинки

ы?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить способ запуска программы

Сообщение jangle » 23.03.2009 (Пн) 1:49

Space писал(а):давайте вернёмся к вопросу - должна ли программа восcтанавливать автозапуск при старте, если он был удалён из реестра извне (т.е. в проге установлен флаг Автозагрузка)?


Думаю лучше выдать диалог пользователю, чтобы он сам принял решение. Возможно он намеренно удалил твою программу из автозапуска.

Длинные пути/короткие пути
каталоги [.] и [..]
UNC-пути
DosDevice-овые диски, т.е. виртуальные тома, созданные с помощью subst.
Симлинки


Для меня это не проблема

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как определить способ запуска программы

Сообщение Хакер » 23.03.2009 (Пн) 1:52

Для тебя это проблема, если ты собрался тупо сравнить две строки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Как определить способ запуска программы

Сообщение jangle » 23.03.2009 (Пн) 2:05

Хакер писал(а):Для тебя это проблема, если ты собрался тупо сравнить две строки.


Далеко не тупо. Просто надо распарсить полученную строку, думаю, для большинства эта такая рутина, что они даже не задумываются о ней.
Тут главное, что есть алгоритмическое решение задачи. Программа стартовав, пробегается по всем точкам автозагрузки и ищет глобальный атом-метку (которая живет до конца сеанса, как правильно сказал ANDLL).
Значит если есть в автозагрузке и нет атома - стартовали из реестра, если есть в реестре и атом, то по дабл-клику, нет в реестре и атома нет - опять по дабл-клику.
Наверное, лучше никто не сможет придумать. )))

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 52

    TopList  
cron