Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Регистрация библиотеки COM


Автор: AnalogXP 26.4.2010, 15:43
Здравствуйте!

С своей программе использую стороннюю библиотеку которую необходимо регистрировать. С регистрацией не проблема - regsvr32.exe /s Biblia.dll - под админом. А вот как регистрировать библиотеку в портативной программе (без инсталятора) и без прав админа (под ограниченой учетной записью)? 

Автор: cemick 27.4.2010, 10:22
Цитата(AnalogXP @ 26.4.2010,  15:43)
Здравствуйте!

С своей программе использую стороннюю библиотеку которую необходимо регистрировать. С регистрацией не проблема - regsvr32.exe /s Biblia.dll - под админом. А вот как регистрировать библиотеку в портативной программе (без инсталятора) и без прав админа (под ограниченой учетной записью)?

Мне кажется ваш вопрос подразумевает ответ. Никак. Разве вы не замечали что очень часто установить программу можно только с правами администратора. А без инсталятора можно зарегестрировать вот так
Код

function RegisterServer(const aDllFileName: string; aRegister: Boolean): Boolean;
type
  TRegProc = function: HResult;
  stdcall;
const
  cRegFuncNameArr: array [Boolean] of PChar =
    ('DllUnregisterServer', 'DllRegisterServer');
var 
  vLibHandle: THandle;
  vRegProc: TRegProc;
begin
  Result := False;
  vLibHandle := LoadLibrary(PChar(aDllFileName)); 
  if vLibHandle = 0 then Exit; 
    @vRegProc := GetProcAddress(vLibHandle, cRegFuncNameArr[aRegister]);
  if @vRegProc <> nil then 
    Result := vRegProc = S_OK;
end;

Автор: AnalogXP 27.4.2010, 11:00
cemick, вот что я нашел http://stackoverflow.com/questions/465882/generate-manifest-files-for-registration-free-com. И это работает, но только под XP. Под Win7 не получается. Вам спасибо, попробую и Ваш вариант.

Автор: cemick 27.4.2010, 11:45
Цитата(AnalogXP @  27.4.2010,  11:00 Найти цитируемый пост)
вот что я нашел здесь

Э-э, вообщем мужики сомневаются. Там видать манифест - чисто дот нешная приблуда. 
Если действительно есть способ заюзать COM без регистрации(сильно сомневаюсь) в реестре отпишитесь. 

Автор: AnalogXP 27.4.2010, 15:23
cemick, так я же говорил - работает.
Вот еще: http://msdn.microsoft.com/ru-ru/library/x65a421a%28v=VS.90%29.aspx

Я сделал два файла манифеста для программы и библиотеки. Запускал под XP ( ограниченная учетная запись ), поиском прошелся по реестру до и во время работы. GUID не найдет. 
Вот бы еще с Вистой/7 разобратся.

Автор: cemick 28.4.2010, 08:45
Цитата(AnalogXP @  27.4.2010,  15:23 Найти цитируемый пост)
cemick, так я же говорил - работает.
Вот еще: http://msdn.microsoft.com/ru-ru/library/x6...v=VS.90%29.aspx

Я сделал два файла манифеста для программы и библиотеки. Запускал под XP ( ограниченная учетная запись ), поиском прошелся по реестру до и во время работы. GUID не найдет. 
Вот бы еще с Вистой/7 разобратся.


А можете привести пример ваших манифестов?

Автор: AnalogXP 28.4.2010, 18:49
Манифест библиотеки (Имя файла манифеста - HtmlSnap2.dll.manifest):
Код

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity type="win32" name="HtmlSnap2.dll" version="2.1.2009.1101" />
  <file name="HtmlSnap2.dll">
     <typelib
        tlbid="{144732A7-D135-46DB-B271-72EFC74418FE}"
        version="1.0"
        helpdir=""/>
     <comClass 
       clsid="{ADF55FB4-E4A0-47C8-A7B4-89C7328A9AB5}" />
  </file>
</assembly>

Библиотеку взял с данного http://www.guangmingsoft.net/htmlsnapshot/help.htm.  ПРОШУ ПРОШЕНИЯ - ССЫЛКУ ИСПРАВИЛ

Манифест программы (Имя файла манифеста - MyProgram.exe.manifest):
Код

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity type="win32" name="MyProgram.exe" version="1.0.0.0" />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="HtmlSnap2.dll" version="2.1.2009.1101" />
    </dependentAssembly>
  </dependency>
</assembly>



Автор: AnalogXP 1.5.2010, 21:22
В общем под Window 7 я сделал так:
Создал батник с содержимым - regsvr32.exe /s "путь к HtmlSnap2.dll"
Запускаю при создании формы.
Код

if IsWindowsVista then
     ShellExecute(Handle, 'runas', PChar( IncludeTrailingPathDelimiter( ExtractFilePath(Application.ExeName) )+'RegHTML.bat' ), nil, nil, SW_HIDE);


Но все время при запуске появляется такое окно:
http://ipicture.ru/
При закрытии программы отменяю регистрацию библиотеки (программа портативная).

Как от этого окна избавиться? Или может есть другой какой вариант регистрации под Висту и Семерку? Можно ли запустить ShellExecute из под Юзера с правами администратора? 

Автор: AnalogXP 3.5.2010, 16:15
Разобрался. Проблема в том, что я использовал два манифеста (тот что модуль (ресурс) и тот что файл). Из за этого, используется только манифест из файла - из ресурса игнорируется. Убрал модуль из USES и добавил необходимое в файл MyProgram.exe.manifest:
Код

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">

  <assemblyIdentity
    type="win32"
    name="MyProgram"
    version="1.0.0.0"
    processorArchitecture="*"/>
  
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="HtmlSnap2.dll" version="2.1.2009.1101" />
    </dependentAssembly>
  </dependency>

  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>

</assembly>


Теперь работает и в XP, и в Семерке.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)