Конференция "WinAPI" » Регистрация типа файла под Windows7 [D7]
 
  • Alex_C (29.05.10 13:39) [0]
    Вопрос такой: я регистрирую свой тип файла. Делаю так (взято из факов)


    procedure RegisterFileType(prefix: string; exepfad: string);
    begin
     with TRegistry.Create do
       try
         RootKey := HKEY_CLASSES_ROOT;
         { create a new key --> .pci }
         OpenKey('.' + prefix, True);
         { create a new value for this key --> pcifile }
         WriteString('', prefix + 'file');
         CloseKey;
         { create a new key --> pcifile }
         CreateKey(prefix + 'file');
         { create a new key pcifile\DefaultIcon }
         OpenKey(prefix + 'file\DefaultIcon', True);
         { and create a value where the icon is stored --> c:\project1.exe,0 }
         WriteString('', exepfad + ',0');
         CloseKey;
         OpenKey(prefix + 'file\shell\open\command', True);
         { create value where exefile is stored --> c:\project1.exe "%1" }
         WriteString('', exepfad + ' \"%1\"');
         CloseKey;
       finally
         Free;
       end;
    end;



    Под XP все нормально, а вот 7-ка требует прав администратора, то не есть гут! Есть ли возможность по 7-кой регистрировать свой тим файла без прав администратора?
  • Loginov Dmitry © (29.05.10 22:52) [1]

    > Есть ли возможность по 7-кой регистрировать свой тим файла
    > без прав администратора?


    Раздел HKEY_CLASSES_ROOT требует админских прав. Поэтому без повышения прав нельзя. Да и в чем проблема запустить один раз программу от имени администратора?
  • Alex_C (30.05.10 13:04) [2]
    Да но допустим когда офис устанавливаешь - он же свой тип файла регистрирует как то без прав администратора?))) Т.е. механизм то какой то есть)))
  • Anatoly Podgoretsky © (30.05.10 14:24) [3]
    > Alex_C  (30.05.2010 13:04:02)  [2]

    Установка офиса ведется от имени администратора, вот и нет проблем.
  • Плохиш © (30.05.10 16:39) [4]

    > Alex_C   (30.05.10 13:04) [2]
    >
    > Да но допустим когда офис устанавливаешь

    Странно, у меня его инсталлятор сразу полные права администратора запрашивает.
  • han_malign (01.06.10 18:27) [5]

    > когда офис устанавливаешь - он же свой тип файла регистрирует
    > как то без прав администратора

    - а Microsoft офис подписан волшебным Microsoft сертификатом, который позволяет элевацию привилегий без лишних запросов...
  • DVM © (01.06.10 21:40) [6]

    > а Microsoft офис подписан волшебным Microsoft сертификатом,
    >  который позволяет элевацию привилегий без лишних запросов.
    > ..

    Вопрос будет и для подписанных MS программ. Например, на запуск Regedit такой вопрос выдается, хотя он тоже наверняка подписан (я правда не проверял).
  • Плохиш © (01.06.10 23:19) [7]

    > han_malign   (01.06.10 18:27) [5]

    Не надо обманывать.
  • han_malign (02.06.10 09:39) [8]

    > Вопрос будет и для подписанных MS программ.

    - Windows Installer - сервис, ему по барабану на UAC, но когда процесс установки требует повышения прав(запись в системные папки, установка сервисов, регистрация компонент, и т.д., в том числе и регистрация расширений оболочки) - он либо проверят сертификат, либо выдает сообщение о небезопасных действиях установочного пакета от недоверенного производителя...

    З.Ы. Запись в Program Files под ограниченным пользователем, между прочим, тоже запрещена...
  • DVM © (02.06.10 10:11) [9]

    > han_malign   (02.06.10 09:39) [8]


    > Windows Installer - сервис, ему по барабану на UAC,

    Я в курсе, что такое Windows Installer и как он устроен и как работает, но речь то не о нем, а исключительно об этом:

    > а Microsoft офис подписан волшебным Microsoft сертификатом,
    >  который позволяет элевацию привилегий без лишних запросов.
    > ..
  • Alex_C (02.06.10 15:43) [10]
    Сам немного поразбирался в этом вопросе: как уже было сказано выше, чтобы программа имела расширенные права (именно не пользователь, а программа) нужно, как уже было сказано выше "подписан волшебным Microsoft сертификатом, который позволяет элевацию привилегий без лишних запросов..." , а для этого надо заплатить денег Макрософту.... Вот такой способ для зарабатывания денег!
  • Dmitry (01.03.12 10:30) [11]
    Тема старая, но поскольку уж она выплыла гугле одной из первых напишу для тех кто на неё наткнется в будующем.
    Не регистрируйте типы файлов в 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
  • CRLF (01.03.12 11:25) [12]

    > чтобы программа имела расширенные права (именно не пользователь,
    >  а программа) нужно, как уже было сказано выше "подписан
    > волшебным Microsoft сертификатом, который позволяет элевацию
    > привилегий без лишних запросов..." , а для этого надо заплатить
    > денег Макрософту....
    Бред какой-то... Какие "расширенные права"? Только конкретно, без лирики. Какое отношение МС к подписыванию имеет?
  • megavoid © (06.03.12 11:59) [13]
    [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;

 
Конференция "WinAPI" » Регистрация типа файла под Windows7 [D7]
Есть новые Нет новых   [134431   +5][b:0][p:0.002]