首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Windows7上使用VB6的Reg Free Com

在Windows7上使用VB6的Reg Free Com
EN

Stack Overflow用户
提问于 2010-12-31 01:59:46
回答 8查看 3.3K关注 0票数 16

我有一些从VB6代码中使用的.NET代码。我总是在XP机器上通过创建一个列出相关.NET程序集的VB6.exe.manifest文件来开发它。

例如,假设我的两个.NET程序集是Some.Assembly.A.dll和Some.Assembly.B.dll,下面是VB6.EXE.manifest的样子(我使用下面的version=1.1.0.0,因为这是我在.NET AssemblyVersion中AssemblyInfo.cs中设置的版本):

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
   manifestVersion="1.0">
  <assemblyIdentity
              type = "win32"
              name = "client"
              version = "1.1.0.0" />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
                  type="win32"
                  name="Some.Assembly.A"
                  version="1.1.0.0" />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
                  type="win32"
                  name="Some.Assembly.B"
                  version="1.1.0.0" />
    </dependentAssembly>
  </dependency>
</assembly>

然后,除了同一目录中的DLL之外,我还有程序集和它们自己的清单文件。这里有一个“Some.Assembly.A.dll.manifest”的例子:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
  manifestVersion="1.0">
  <assemblyIdentity
      type="win32"
      name="Some.Assembly.A"
      version="1.1.0.0" />
  <clrClass
      clsid="{F1234567-1234-1234-1234-123456789012}"
      progid="Some.Assembly.A.Class1"
      threadingModel="Both"
      name="Some.Assembly.A.Class1" >
  </clrClass>
  <file name = "Some.Assembly.A.dll" />
</assembly>

我还在引用的DLL上运行tlbexp来创建TLB文件,这就是我在VB6项目文件中引用的内容。

我想转到Windows7 64位计算机。使用相同的方法,当我点击在WIN7机器上实例化.NET对象的VB6代码时,我得到

"ActiveX组件无法创建对象。“

在XP上,它成功了。如果我故意拼写VB6.EXE.manifest中的依赖程序集-在XP上我会得到

“此应用程序无法启动,因为应用程序配置不正确。重新安装此应用程序可能会解决此问题。”

在WIN7上,VB6只是加载。就像它忽略了WIN7上的清单一样,所以我不能在WIN7上使用REG FREE方法加载我的.NET对象。如果我regasm动态链接库,一切都会正常工作。

关于如何在WIN7 (64位)上使VB6与reg free com一起工作有什么想法吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-02-25 00:16:10

您是否尝试过在WinXP兼容模式下简单地安装和运行VB6?

票数 1
EN

Stack Overflow用户

发布于 2011-01-10 17:35:33

如果您正在为win7机器重新编译vb6.exe或以其他方式处理它,您应该知道一些较新的开发工具会自动嵌入清单,因此您可能想要检查一下(一种快速的方法是在VS中打开可执行文件,并查找id为1的资源RT_MANIFEST )。如果有嵌入的清单,外部清单将被忽略,这可能就是为什么当您编辑外部manfiest时,什么都不会发生,其内容也会被忽略。

除了Erno所说的sxstrace (您能发布从sxstrace获得的结果吗?),如果清单嵌入其中,请确保更新VB6.exe的时间戳,否则更新VB6.exe.manifest。Vista + Win7缓存清单的内容,关闭根清单的时间戳,因此您的本地编辑可能不会被拾取。如果sxstrace给出空白结果,请更新时间戳,然后重试。

票数 1
EN

Stack Overflow用户

发布于 2011-01-28 05:48:44

首先浮现在脑海中的是值得尝试对.net代码进行签名。可能隐式地在需要签名程序集引用的win7 64位上应用了某种更高级别的安全性。

此外,您可以尝试通过以下方式来缩小问题的范围(没有特定的顺序)

  • 标记要以管理员身份运行的程序并重试。
  • 标记要在"xp/win2k兼容模式“下运行的程序
  • dependencywalker中运行它(它有一个模拟程序加载的选项,并将记录错误)

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4565000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档