Помощь - Поиск - Пользователи - Календарь
Полная версия: доступ в HKEY_CLASSES_ROOT
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Snake_B
Такой вопрос... добавляю в программе пункт в контекстное меню папок... в раздел HKEY_CLASSES_ROOT...
всё как обычно используя Registry...
но в Висте (и я так думаю в 7-ке тоже будет) доступ в тот раздел я получить не могу... там и под администратором его нет...
можно это назначением привилегий обойти?
или как по другому (только по проще бы))
vlads
Не вижу смысла писать в данном случае в HKCR... Пиши в HKCU. Иначе с Win7 огребешь по полной "радостей жизни"...
Snake_B
Цитата(vlads @ 31.12.2010 19:13) *

Не вижу смысла писать в данном случае в HKCR... Пиши в HKCU. Иначе с Win7 огребешь по полной "радостей жизни"...


дык... то то и оно... что пункт в контекстное меню папки или для определенных типов файлов в HKCR добавляется...
или можно в другие? а как, куда...?
volvo
Цитата
но в Висте (и я так думаю в 7-ке тоже будет) доступ в тот раздел я получить не могу... там и под администратором его нет...
Под root-администратором есть... Повышай привилегии для процесса, который будет писать в HKCR (повысить привилегии для текущего процесса ты не можешь, можешь только создать новый, который будет с админскими правами. Кстати, в Win7 при включенной UAC админских прав тоже будет недостаточно). Доп. информация - здесь: http://stackoverflow.com/questions/923350/...ion-when-needed , там же ссылки на соответствующую статью в MSDN.

На самом деле установкой этих ключей в реестр должен заниматься инсталлятор, который запускается администратором, а не программа, которая работает из-под обычного пользователя. Но это по-хорошему, на самом деле ж никто так не пишет, правда? Вот и получаем теперь всякую ругань от системы, когда делаем так как привыкли...
Snake_B
Цитата(volvo @ 31.12.2010 21:05) *

Под root-администратором есть... Повышай привилегии для процесса, который будет писать в HKCR (повысить привилегии для текущего процесса ты не можешь, можешь только создать новый, который будет с админскими правами. Кстати, в Win7 при включенной UAC админских прав тоже будет недостаточно). Доп. информация - здесь: http://stackoverflow.com/questions/923350/...ion-when-needed , там же ссылки на соответствующую статью в MSDN.


процесс в данном случае... это запускать другой ехе? потоки не подойдут же...?

Цитата(volvo @ 31.12.2010 21:05) *

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


а вот тут я бы поспорил...
1. программа распостраняется в двух вариантах с инсталлятором и в архиве... в версии из архива инсталлятора в принципе нет...
2. почему я не могу дать пользователю возможность изменить какие то настройки в самой программе, а не в инсталляторе... те же ассоциации файлов (как в винампе).... изменение пунктов в контекстном меню (как в винраре, когда можно выбрать будет несколько пунктов, отдельное подменю или не будет вообще)...
но конечно MS лучше знает как надо...

и плюс антивирусы... есть у меня утилитка, для всех моих программ, проверяет наличие новых версий программ... просто проверяет наличие файла на сервере и скачивает его, если он есть (в нем информация о новой версии)... использую InternetReadFile... Avira ругается на эту утилиту... если строку с InternetReadFile закомментировать, то претензий нет... это блин у них такая эвристика что ле....

вот... накипело =)

всех с новым годом, успехов, всё такое! )
volvo
Цитата
процесс в данном случае... это запускать другой ехе? потоки не подойдут же...?
Нет, потоки не подойдут. Именно другой EXE.

Цитата
2. почему я не могу дать пользователю возможность изменить какие то настройки в самой программе, а не в инсталляторе... те же ассоциации файлов (как в винампе).... изменение пунктов в контекстном меню (как в винраре, когда можно выбрать будет несколько пунктов, отдельное подменю или не будет вообще)...
Дак а кто тебе запрещает-то? Меняй. Для текущего пользователя - меняй. Но почему ты решил, что твои, текущего пользователя, установки ТАК ВАЖНЫ ДЛЯ ВСЕХ ??? И что я, когда приду за ту же машину, и залогинюсь под другим аккаунтом, должен равно как и ты переться от того, что текстовый файл открывает твоя супер-программа, а не NotePad? Тебе это удобно? Мне - нет. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts и вперед, для своего аккаунта делай все, что хочешь. Других пользователей не трожь.

Понимаешь, да, откуда у всего этого ноги растут? Ты годами сидел на Win200/WinXP под админом, потому что у тебя автоматом создавался админский аккаунт, а менять что-либо и настраивать как положено у тебя не было ни желания ни умений. И работал ты один на машине, так? Менял себе (ибо админ, чего б не поменять), и это распространялось на всех (особенно, если ты был один на машине). Только вот почему-то 30% стороннего программного обеспечения я не мог запустить у себя под XP (под ограниченным аккаунтом), ибо этот лезет куда не надо, система его блокирует, тот пишет в корень диска, система его блокирует, третий пытается в папку дефолтного пользователя свою меганужную информацию запихать, что ему говорит система - сам догадаешься, или как?

А теперь вдруг появилась необходимость сделать так, как положено (хотя положено так делать было "уже вчера") - и не умеем, да? Учись. И не надо переваливать все на MS... Она действительно лучше знает, как обезопасить одного пользователя от произвола второго... Еще раз повторяю: есть инсталлятор, и есть приложение, которое этот инсталлятор установил. Поскольку инсталлятор запускается с правами админа (если это не так - то программиста надо послать далеко и надолго), то он имеет доступ в HKCR, и может там добавить все то, что нужно для всех пользователей, либо только для одного, это уж как пользователь решит (обращал внимание на "Установить для всех пользователей"/"Только для текущего пользователя"? Вот как раз тот случай). Само приложение запускается конкретным пользователем. И имеет право менять настройки только для этого пользователя (а это - HKCU). Точка. Это - основы разграничения прав.

Цитата
Avira ругается на эту утилиту... если строку с InternetReadFile закомментировать, то претензий нет... это блин у них такая эвристика что ле....
Да, причем достаточно глупая. Чтобы Авира перестала вякать - достаточно сделать пару простейших вещей (здесь приводить не буду, но любой Гугл тебе выдаст рецепт).
Snake_B
Цитата(volvo @ 1.01.2011 0:31) *

Дак а кто тебе запрещает-то? Меняй. Для текущего пользователя - меняй. Но почему ты решил, что твои, текущего пользователя, установки ТАК ВАЖНЫ ДЛЯ ВСЕХ ??? И что я, когда приду за ту же машину, и залогинюсь под другим аккаунтом, должен равно как и ты переться от того, что текстовый файл открывает твоя супер-программа, а не NotePad? Тебе это удобно? Мне - нет. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts и вперед, для своего аккаунта делай все, что хочешь. Других пользователей не трожь.


о как... я не знал, что в другом месте можно... во втором посте спрашивал... тогда всё, впорос снят... так конечно на много лучше... спасибо =)

Цитата(volvo @ 1.01.2011 0:31) *

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


а в личку можно? я искал, но легкого способа не нашел...

Добавлено через 15 мин.
Цитата(Snake_B @ 1.01.2011 0:41) *

о как... я не знал, что в другом месте можно... во втором посте спрашивал... тогда всё, впорос снят... так конечно на много лучше... спасибо =)


ХМ... не всё так просто... для файлов то туда можно записать... а вот для контекстного меню папок ни фига... запись делаю, а пункта не появляется... так что всё таки видимо прийдется делать ехе...

п.с.. м-да... а нельзя как-нибудь сделать, чтобы не запрашивала подтверждение на запуск от имени админа?
volvo
Цитата
ХМ... не всё так просто... для файлов то туда можно записать... а вот для контекстного меню папок ни фига... запись делаю, а пункта не появляется...
Для контекстного меню папок - это уже уровень администратора, это должен делать инсталлятор (ну, или EXE-шник с повышенными правами, если ты все-таки хочешь сделать по своему, наплевав на правильность. Пойми, плевать - это не совсем верно. Ведь в следующей версии ОС может быть запрещено, скажем, поднимать привилегии "левому процессу", и где тогда окажется твоя программа? Так что обманываешь ты себя в первую очередь, а не Windows). Конкретный пользователь не имеет такой привилегии - записывать что-то в меню папки, он может только выбрать, каким приложением открывать тот или иной тип файлов.

Цитата
а нельзя как-нибудь сделать, чтобы не запрашивала подтверждение на запуск от имени админа?
Нет, и это есть хорошо, иначе любая программа будет тихо и незаметно запускаться под админом и творить все, что ей нужно. К какому лешему тогда нужен UAC? В Семерке, к примеру, под админом, ты даже RegEdit не запустишь без вопроса, а уверен ли ты, и действительно ли хочешь продолжить...

Цитата
а в личку можно? я искал, но легкого способа не нашел...
Я не дома сейчас (все ссылки - на домашнем компьютере), попробую найти что-то, если найду - отпишусь... Если нет - значит, послезавтра, не раньше...
Snake_B
Цитата(volvo @ 2.01.2011 2:25) *

Нет, и это есть хорошо, иначе любая программа будет тихо и незаметно запускаться под админом и творить все, что ей нужно. К какому лешему тогда нужен UAC? В Семерке, к примеру, под админом, ты даже RegEdit не запустишь без вопроса, а уверен ли ты, и действительно ли хочешь продолжить...


ну да... логично...

Цитата(volvo @ 2.01.2011 2:25) *

Для контекстного меню папок - это уже уровень администратора, это должен делать инсталлятор (ну, или EXE-шник с повышенными правами, если ты все-таки хочешь сделать по своему, наплевав на правильность. Пойми, плевать - это не совсем верно. Ведь в следующей версии ОС может быть запрещено, скажем, поднимать привилегии "левому процессу", и где тогда окажется твоя программа? Так что обманываешь ты себя в первую очередь, а не Windows). Конкретный пользователь не имеет такой привилегии - записывать что-то в меню папки, он может только выбрать, каким приложением открывать тот или иной тип файлов.


не знаю... почему было не разрешить менять меню каждому пользователю... самому себе то... а так... у меня программа в архиве 360 кб, а с инсталлятором она же 640.... оно то как бы с современными безлимитами вроде и не критично... но и принудительно заставлять пользователей качать версию в 2 раза больше только из-за пункта меню... сделал запуск программой самой себя с повышением привилегий... вторая копия записывает и выходит...
Snake_B
Цитата(volvo @ 2.01.2011 2:25) *


Цитата
а в личку можно? я искал, но легкого способа не нашел...


Я не дома сейчас (все ссылки - на домашнем компьютере), попробую найти что-то, если найду - отпишусь... Если нет - значит, послезавтра, не раньше...


ни чего не нашел?

п.с.... вроде разобрался...
пробовал заменить InternetReadFile и InternetOpenUrl... на них ругались антивирусы...
и сокеты пробовал и UrlDownloadToFile и динамический вызов dll с кодированием... количество срабатываний только росло...
после добавление в uses "Messages, Variants, Classes, Graphics" (для увеличения размера ехе) и возврата к InternetReadFile и InternetOpenUrl срабатывать антивирусы перестали... видимо руководствуясь логикой, что трояны в 100 кб не бывают...
то что в программке не бвло запуска других ехе и работы с реестром тоже их как то не смущало...
volvo
Цитата
ни чего не нашел?
Нет. Просто передумал. Надоело что-то объяснять человеку, который все время говорит "и так сойдет". Сойдет - пользуйся...

Я предпочитаю разговаривать с теми, кто пытается разобраться, почему нечто происходит, и как убрать причину, а не следствие... Да, это порой занимает больше времени, да, это может привести к переписыванию значительной части кода (а возможно и всего проекта), но в дальнейшем поддержка обойдется дешевле. И добавление новых фич не будет требовать все новых и новых костылей. Которые в один прекрасный момент рухнут, и этим все закончится...

P.S. (Показать/Скрыть)
Snake_B
Цитата(volvo @ 8.01.2011 0:00) *

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


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