-
Вопрос такой: я регистрирую свой тип файла. Делаю так (взято из факов)
procedure RegisterFileType(prefix: string; exepfad: string);
begin
with TRegistry.Create do
try
RootKey := HKEY_CLASSES_ROOT;
OpenKey('.' + prefix, True);
WriteString('', prefix + 'file');
CloseKey;
CreateKey(prefix + 'file');
OpenKey(prefix + 'file\DefaultIcon', True);
WriteString('', exepfad + ',0');
CloseKey;
OpenKey(prefix + 'file\shell\open\command', True);
WriteString('', exepfad + ' \"%1\"');
CloseKey;
finally
Free;
end;
end;
Под XP все нормально, а вот 7-ка требует прав администратора, то не есть гут! Есть ли возможность по 7-кой регистрировать свой тим файла без прав администратора?
-
> Есть ли возможность по 7-кой регистрировать свой тим файла > без прав администратора?
Раздел HKEY_CLASSES_ROOT требует админских прав. Поэтому без повышения прав нельзя. Да и в чем проблема запустить один раз программу от имени администратора?
-
Да но допустим когда офис устанавливаешь - он же свой тип файла регистрирует как то без прав администратора?))) Т.е. механизм то какой то есть)))
-
> Alex_C (30.05.2010 13:04:02) [2]
Установка офиса ведется от имени администратора, вот и нет проблем.
-
> Alex_C (30.05.10 13:04) [2] > > Да но допустим когда офис устанавливаешь
Странно, у меня его инсталлятор сразу полные права администратора запрашивает.
-
> когда офис устанавливаешь - он же свой тип файла регистрирует > как то без прав администратора
- а Microsoft офис подписан волшебным Microsoft сертификатом, который позволяет элевацию привилегий без лишних запросов...
-
> а Microsoft офис подписан волшебным Microsoft сертификатом, > который позволяет элевацию привилегий без лишних запросов. > ..
Вопрос будет и для подписанных MS программ. Например, на запуск Regedit такой вопрос выдается, хотя он тоже наверняка подписан (я правда не проверял).
-
> han_malign (01.06.10 18:27) [5]
Не надо обманывать.
-
> Вопрос будет и для подписанных MS программ.
- Windows Installer - сервис, ему по барабану на UAC, но когда процесс установки требует повышения прав(запись в системные папки, установка сервисов, регистрация компонент, и т.д., в том числе и регистрация расширений оболочки) - он либо проверят сертификат, либо выдает сообщение о небезопасных действиях установочного пакета от недоверенного производителя...
З.Ы. Запись в Program Files под ограниченным пользователем, между прочим, тоже запрещена...
-
> han_malign (02.06.10 09:39) [8]
> Windows Installer - сервис, ему по барабану на UAC,
Я в курсе, что такое Windows Installer и как он устроен и как работает, но речь то не о нем, а исключительно об этом:
> а Microsoft офис подписан волшебным Microsoft сертификатом, > который позволяет элевацию привилегий без лишних запросов. > ..
-
Сам немного поразбирался в этом вопросе: как уже было сказано выше, чтобы программа имела расширенные права (именно не пользователь, а программа) нужно, как уже было сказано выше "подписан волшебным Microsoft сертификатом, который позволяет элевацию привилегий без лишних запросов..." , а для этого надо заплатить денег Макрософту.... Вот такой способ для зарабатывания денег!
-
Тема старая, но поскольку уж она выплыла гугле одной из первых напишу для тех кто на неё наткнется в будующем. Не регистрируйте типы файлов в HKEY_CLASSES_ROOT, физически такой ветки не существует, аж с 90-х годов. Типы файлов регистрируются в HKEY_LOCAL_MACHINE\Software\Classes для всех пользователей (действие требует элевации), и в HKEY_CURRENT_USER\Software\Classes для текущего пользователя (что совершенно НЕ требует элевации). Ветку HKEY_CLASSES_ROOT винда создает во время работы, путем объединения выше упомянутых, в целях обратной совместимости со старыми приложениями. Таким образом используя её, вы приравниваете свое приложение к устаревшим. Если вы пишете в HKEY_CLASSES_ROOT - то все сильно зависит от того, зарегистрирован ли такой тип файлов уже в системе или нет, те вы играете с системой в рулетку и не можете заранее предсказать в какую вутку реестра на самом деле попадет ваш ключ и будет ли он записью для текущего пользователя или для всех. По этим причинам НИКОГДА не записывайте ключи в HKEY_CLASSES_ROOT. Для получения доступа к объединенной информации о типах данных используйте функцию RegOpenUserClassesRoot. Подробнее на MSDN в соответсвующей теме: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724475.aspx
-
> чтобы программа имела расширенные права (именно не пользователь, > а программа) нужно, как уже было сказано выше "подписан > волшебным Microsoft сертификатом, который позволяет элевацию > привилегий без лишних запросов..." , а для этого надо заплатить > денег Макрософту.... Бред какой-то... Какие "расширенные права"? Только конкретно, без лирики. Какое отношение МС к подписыванию имеет?
-
[0] теперь надо так [11]: procedure RegisterFileType(prefix: string; exepfad: string);
begin
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
OpenKey('Software\\Classes\\' + '.' + prefix, True);
WriteString('', prefix + 'file');
CloseKey;
CreateKey('Software\\Classes\\' + prefix + 'file');
OpenKey('Software\\Classes\\' + prefix + 'file\\DefaultIcon', True);
WriteString('', exepfad + ',0');
CloseKey;
OpenKey('Software\\Classes\\' + prefix + 'file\\shell\\open\\command', True);
WriteString('', '\"\" + exepfad + '" "%1"');
CloseKey;
finally
Free;
end;
end;
|