delphi – 免注册COM/DLL?

前端之家收集整理的这篇文章主要介绍了delphi – 免注册COM/DLL?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的程序使用Skype4COM.dll(Skype API的包装器)。

我使用Delphi 2010 – 有没有办法确保我的程序总是使用Skype4COM.dll,我会运送它?事情是,有不同版本的Skype4COM,如果我注册我的超过某人elses,他们的应用程序可能不再工作了。

通常我使用RegSvr32在人系统上注册DLL,但我听说它可以使它免注册(在C#中),所以我的问题是:我们能在Delphi中这样做吗?

谢谢!

解决方法

在你甚至触摸注册免费com确保您的应用程序工作,当dll注册。一旦你对此感到满意。是时候尝试,让它工作免费注册。第一步是取消注册你的dll。如果你现在尝试并运行你的程序,你应该得到ClassId找不到。

第一步是为您的应用程序创建清单文件。清单文件是一个xml文件,其中可以为您的应用程序设置依赖关系。你可能不知道,但自从有关Delphi 2007,如果你启用了主题,你的应用程序已经有一个清单。这里是德尔福2010:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    type="win32"
    name="CodeGear RAD Studio"
    version="14.0.3615.26342" 
    processorArchitecture="*"/>
  <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>

现在我不知道你是否可以添加到这个,你每个应用程序只能有一个清单文件,我通常只是完全替换它。因为我想要的主题启用我开始与这个文件,并添加我的依赖。在你的情况下,你需要添加一个依赖关系skype4com.dll这里是我需要添加

<assemblyIdentity 
  name="Skype4COM.X" 
  version="1.0.36.0" 
  type="win32" 
  processorArchitecture="x86">
</assemblyIdentity>

注意我实际上添加了一个依赖项到Assembly Skye4COM.X而不是dll本身。不要混淆2,虽然一个dll可以是一个程序集一个程序集不一定是dll。这将变得清楚当我们设置装配清单/

您的清单文件现在变为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    type="win32"
    name="CodeGear RAD Studio"
    version="14.0.3615.26342" 
    processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity 
        name="Skype4COM.X" 
        version="1.0.36.0" 
        type="win32" 
        processorArchitecture="x86">
      </assemblyIdentity>
</dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

使用与可执行文件相同的名称保存此文件,但使用.manifest后缀。例如SkypeClient.exe.manifest

下一步是在您的应用程序中嵌入此清单。您需要使用以下文本创建资源文件(rc文件):

#define RT_MANIFEST 24 
#define APP_MANIFEST 1

APP_MANIFEST RT_MANIFEST SkypeClient.exe.manifest

将此文件添加到您的应用程序并构建。如果你仍然有主题启用,你会得到一个重复的资源警告,只是从你的dpr文件删除{$ R * .res}。您还应该在项目文件中看到这一点:

{$R 'SkypeClient.manifest.res' 'SkypeClient.manifest.rc'}

如果您现在尝试并运行应用程序,您将收到以下错误消息:

Unable to create process: The
application has Failed to start
because its side-by-side configuration
is incorrect. Please see the
application event log or use the
command-line sxstrace.exe tool for
more detail.

我们现在需要为程序集添加清单(Skype4COM.X)。创建一个名为Skype4COM.X.manifest的文件。我们需要在清单文件中描述程序集:

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

  <assemblyIdentity 
    name="Skype4COM.X" 
    version="1.0.36.0" 
    type="win32"
    processorArchitecture="x86">
  </assemblyIdentity>

  <file name="Skype4COM.dll">
    <typelib
      tlbid="{03282B5D-B38F-469D-849A-09B0A7F4881B}"
      version="1.0"
      helpdir=""
      flags="hasdiskimage"/>
  </file>
</assembly>

现在将应用程序的dll和程序集清单放在同一个文件夹中并运行!

如果你再遇到错误,你需要使用SxSTrace来调试。这在Vista以上可用。首先启动跟踪:

SxSTrace trace -logfile:sxsTrace.etl

运行你的程序,然后按回车键在轨迹上完成它。现在解析跟踪:

SxSTrace parse -logfile:SxSTrace.etl -outfile:SxStrace.txt

您应该在SxSTrace.txt中有一个完整的整个过程的日志

原文链接:https://www.f2er.com/delphi/103610.html

猜你在找的Delphi相关文章