Registration-free COM se souborem manifestu a Delphi

vložil Radek Červinka 18. října 2016 21:58

Nemám moc rád technologii COM, hlavně protože jinak k prakticky samostatnému EXE vygenerovaného Delphi (případně s dalšími DLL v adresáři programu) zavádí závislosti na něčem, co musí být registrované v systému, což je z mého pohledu zásadní problém a moc se to neslučuje s mojí filozofií programů.

Nedávno jsem narazil na možnost použití COM bez registrace v systému, jen s tím, že do manifestu Vašeho programu vygenerujete patřičné informace. Pokud máte rozumně staré Delphi lze manifest přímo z IDE začlenit, pokud Vaše Delphi jsou z přelomu tisíciletí, musíte buďto si pomoci sami, nebo patřičný manifest přiložit k exe (stejně je tomu mimochodem u VB6).

Mechanismus Registration-free COM by měl být podporován od XP SP2.

Manifest vypadá nějak takto (zde z trial verze emailarchitect), sledujte věci ohledně comClass a comInterfaceExternalProxyStub.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <file name="EAGetMailObj.dll" hashalg="SHA1">
    <comClass clsid="{953EFD7C-8FCE-4D9C-9BD9-E6F19A1B7FC9}" tlbid="{5FA52C10-18FC-4D81-8542-50F9A2DC60A3}" description="MailClient Class"></comClass>
    <comClass clsid="{AD59203B-0C25-4192-98F2-C680D6A16738}" tlbid="{5FA52C10-18FC-4D81-8542-50F9A2DC60A3}" description="Attachment Class"></comClass>
…………..
    <typelib tlbid="{5FA52C10-18FC-4D81-8542-50F9A2DC60A3}" resourceid="1" version="1.0" helpdir="" flags="HASDISKIMAGE"></typelib>
  </file>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <comInterfaceExternalProxyStub name="IMailClient" iid="{F7463672-BDA9-428F-8A03-E30C0F1B7EA8}" tlbid="{5FA52C10-18FC-4D81-8542-50F9A2DC60A3}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
  <comInterfaceExternalProxyStub name="IImap4Folder" iid="{860EA4DE-9B7D-4C1B-8DC0-67B74B981F41}" tlbid="{5FA52C10-18FC-4D81-8542-50F9A2DC60A3}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
……….
</assembly>

Samozřejmě je nesmysl to psát manuálně. Součástí instalace Windows SDK je malý prográmek mt.exe

"c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\mt.exe" 
-tlb:EAGetMailObj.dll -dll:EAGetMailObj.dll -out:EAGetMailObj.dll.manifest

který udělá špinavou práci za Vás. Měl by být schopen manifest i přímo vložit do exe jen změnou out parametru na cílový exe.

Nyní jen stačí manifest doplnit např. o sekci Common Controls 6.0 (jak je naznačeno výše).

Tak a v Project Options nastavte nový manifest

manifest

V případě volby Manifest File - none lze použít i jen přiložení manifestu k souboru, např. Project1.exe.manifest

A to by mělo být vše a můžete šťastně používat COM bez registrace.

P.S.: Stejně je lepší mít zdrojáky.

Tagy:

Praxe

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců