Запуск программы при вкл. компьютера

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo писал(а):администратором (иначе её не установить), и этот флажок в реестре был взведён именно ним.
Опять фигня. Мы писали для зарубежа пару лет назад прогу, устанавливать которую должен был не админ.
Все последующие попытки пользователя сменить флажок будет тщетны.
Там не флажок. Иначе бы хакнуть политику безопасности винды не составляло бы труда.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):Мы писали для зарубежа пару лет назад прогу, устанавливать которую должен был не админ
Ты понимаешь в чём дело, большинство современных office/business oriented программ работают с реестром. Я бы даже сказал, что не большинство, а практически все. Если вы писали такую программу, то значит у вас в постановке задачи было указано, что программа не должна писать в реестр, правильно? А ты попробую поставь MS Office без прав админа. Там одних COM объектов два вагона и маленькая тележка, и все должны быть зарегистрированы, а ещё тонна опций + те же файловые ассоциации - всё в реестр пишется.
&quot писал(а):Там не флажок
Смотря там - это где :) В настройках программы - флажок. В реестре - строка. То, что в реестре должно быть строковое значение, я ещё в первом посте написал.
&quot писал(а):Иначе бы хакнуть политику безопасности винды не составляло бы труда.
Можно здесь подробней. Что ты имеешь ввиду?

Кстати, ты свой "правильный" вариант автоматического запуска программы так и не указал ;)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo писал(а):Если вы писали такую программу, то значит у вас в постановке задачи было указано, что программа не должна писать в реестр, правильно?
Не правильно. Почему там с правами админа столкнулись ? Там надо было писать в папку WINDOWS или в WINDOWS/SYSTEM я уже не помню, а без прав админа нельзя.
Кстати, ты свой "правильный" вариант автоматического запуска программы так и не указал ;)
Я его написал сразу:
Airhand писал(а):Для редактирования реестра нужны права администратора.
HKCU - для текущего пользователя.
HKLM - для всей машины.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):Не правильно. Почему там с правами админа столкнулись ? Там надо было писать в папку WINDOWS или в WINDOWS/SYSTEM я уже не помню, а без прав админа нельзя.
Ну тогда я вообще не понимаю зачем ты заговорил об этой программе, так как она не имеет вообще никакого отношения к данной теме.
&quot писал(а):Я его написал сразу:
Не совсем так. Насколько я понял из вот этого поста:
&quot писал(а):Это - чушь, т.к. как-то же работают люди без прав администратора. Если бы это было невозможно, то зачем бы делали такую возможность.
Я понял, что ты знаешь более правильный способ, который будет работать в обход реестра. Иначе зачем называть мои слова чушью. Или признавайся, что это не чушь, или давай альтернативное решение, не использующее реестр :) (написание своего шедулера или сервиса отметаем стразу, так как для их инсталяции требуется ещё больше прав, чем просто доступ к реестру).

На самом деле я нигде не читал, что другого способа железно нет, но за свою многолетнюю практику я сталкивался с уймой программ, и все они использовали именно реестр. Чтобы проверить, что это так, достаточно запустить программу msconfig и открыть предпоследнюю закладку "Startup". На ней перечислены все программы, которые запускаются автоматически, а также есть столбик "Location", в котором указано откуда Windows знает, что программу нужно запускать. За свою практику я ни разу не встречал, чтобы там было записано что-то иное, кроме указанного пути в реестре или строки "Startup", что обозначает, что программа запускается потому, что её ярлык был перетащен в папку "Startup" (или "Автозагрузка" на русских версиях Windows). Все программы, которые я встречал, после проставления соответствующей галки в их настройках, тут же лезут в реестр и это легко можно увидеть в msconfig. Более того, этот же самый вариант записи в реестр используется одном крупном продукте, в котором я проработал несколько лет - отвечаю, так как сам копался в этом коде и правил его. Продукт на данный момент входит в специальную поставку Oracle, в которой носит название Integration B2B. Надеюсь, этого достаточно, чтобы доказать серьёзность продукта, а, как следствие, и академичность подхода.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Romeo, может, я неточно уловил, кто (из двух уважаемых дискутирующих) что утверждает, но, насколько я помню из практики, в ветку реестра HKCU можно писать и без прав администратора.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

BBB, суть дискуссии сводится к тому, что я указал единственный, как мне кажется, правильный способ добиться того, чтобы программа автоматически запускалась при залогинивании пользователя в систему. Вследствии того, что я считаю, что этот способ единственный правильный, я сделал вывод о том, что все программы используют его, и, как следствие, если у программы нет прав на запись в реестр, но она не сможет добавить себя в автозагрузку. Господин Airhand, после этого заявил, что мои слова являются (дословно) чушью, что такое невозможно, так как множество пользователей работают без прав администратора, так что наверняка есть другие, более правильные способы добиться автозагрузки (последние слова - мой собственный вывод). Свой "правильный" подход, не использующий реестр, Airhand выдать не смог и всё свелось к демагогии.

К сожалению я не силён в администрировании, так что не могу сказать существуют ли способы запретить запись именно в HKCU. Если таковых способов нет, то все претензии Airhand не стоят и ломанного гроша :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Romeo писал(а):К сожалению я не силён в администрировании, так что не могу сказать существуют ли способы запретить запись именно в HKCU. Если таковых способов нет, то все претензии Airhand не стоят и ломанного гроша :)
Не вызывает сомнения, что "множество пользователей работают без прав администратора" ((c) :) ). Но практически все программы пишут в
HKCU\Software\.......
Какие-то свои установки (напр, позицию/ширину/высоту окна, последний открытый каталог и т.д.). Отсюда делаем вывод, что программа, запущенная пользователем без адм.прав МОЖЕТ писать в этоту ветку реестра в HKCU.
Остается вопрос, если ли в Windows какие-то "особые права" на запись в
HKCU\Software\Microsoft\Windows\CurrentVersion\Run ?
Честно говоря, сомневаюсь.
Лена89
Сообщения: 52
Зарегистрирован: 20 июн 2007, 10:36

Romeo писал(а):Как я понял, девушку интересует именно программный способ записи в реестр. Об этом можно почитать, к примеру, здесь.
Все правильно, только там на Visual Basic, а мне надо Visual C++.NET 2003.

Знаю, с директорией автозагрузки - надо получить путь до неё через SHGetSpecialFolderPath для CSIDL_STARTUP и потом создать линк там.

Подскажите пожалуйста, как это сделать?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Не нужно создавать ярлык в Startup. На запись в этот фолдер как раз может и не оказаться прав. К тому же, пользователь может потом зайти в фолдер Startup через любой файл навигатор, увидеть этот ярлык и удалить его, после чего программа перестанет запускаться. Лучше писать в реестр. В этом случае ярлык не будет отображаться в папке Startup, таким образом мы защитимся от неграмотного пользователя.

Пожалуйста, уточни на каком языке пишешь, просто строка Visual C++.NET сбивает с толку и никак не получается понять то ли это С++, то ли С managed, то ли вообще С# :)

Если это С++, то там всё очень просто. Плясать следует от вот этих функций:

RegOpenKeyEx
RegCreateKeyEx
RegEnumKeyEx
RegDeleteKey
RegCloseKey

RegSetValueEx
RegQueryValueEx
RegDeleteValue

Почитать об этих функциях можно на том же MSDN. Я уверен, что там и пример есть. Просто воспользуйся поиском.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Romeo писал(а): Я понял, что ты знаешь более правильный способ, который будет работать в обход реестра. Иначе зачем называть мои слова чушью. Или признавайся, что это не чушь, или давай альтернативное решение, не использующее реестр :) (написание своего шедулера или сервиса отметаем стразу, так как для их инсталяции требуется ещё больше прав, чем просто доступ к реестру).
Я назвал чушью утверждение о том, что права админа нужны для работы на машине, т.к. дескать не будут работать другие проги. А НЕ про доступ в реестр, как пишеш ты:
Romeo писал(а):Бесспорно права должны быть. Но если их нет, то откажутся работать и другие программы, имеющие в настройках галочку "Run on startup". А всё потому, что эти программы используют такой же подход.
На ней перечислены все программы, которые запускаются автоматически, а также есть столбик "Location", в котором указано откуда Windows знает, что программу нужно запускать. За свою практику я ни разу не встречал, чтобы там было записано что-то иное, кроме указанного пути в реестре или строки "Startup", что обозначает, что программа запускается потому, что её ярлык был перетащен в папку "Startup" (или "Автозагрузка" на русских версиях Windows).
Там также указана и ветка HKLM, а не только HKCU. Не только для текущего пользователя, но и для всей машины.

P.S. Вчера не отвечал, т.к. не было инета.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Ответить