加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 免注册COM/DLL?

发布时间:2020-12-15 10:19:48 所属栏目:大数据 来源:网络整理
导读:我的程序使用Skype4COM.dll(Skype API的包装器)。 我使用Delphi 2010 – 有没有办法确保我的程序总是使用Skype4COM.dll,我会运送它?事情是,有不同版本的Skype4COM,如果我注册我的超过某人elses,他们的应用程序可能不再工作了。 通常我使用RegSvr32在人
我的程序使用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中有一个完整的整个过程的日志

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读