【问题标题】:vb6 and vb .net interop on vista 64 versus windows 7vista 64 与 windows 7 上的 vb6 和 vb .net 互操作
【发布时间】:2010-02-18 22:43:44
【问题描述】:

我已经编写了一个 .net dll,我可以从 vb6 成功调用它。部署到 xp、vista 32 和 vista 64 盒子一直在工作。它不适用于 Windows 7 64 位。我无法在最终用户机器上运行regasm.exe /codebase name.dll,因为他们不是管理员。

目前我的应用部署在“c:\Program Files (x86)\application name”目录下。

【问题讨论】:

  • 在没有管理员权限的情况下如何安装它?
  • 初始安装有管理员权限。我需要能够在没有管理员权限的情况下更新它。
  • 你想更新什么?如果没有管理员权限,您将无法更新 Program Files 中的 DLL。 (除非您修改 ACL)
  • 我设置了文件夹权限,以便用户可以更新 dll。

标签: .net deployment vb6 uac dll


【解决方案1】:

我正在使用免注册 COM 访问 .NET 互操作程序集。

基本上,首先您必须使用mt.exe 创建程序集清单,并可以选择使用sn.exe 重新签署强名称,就像这样

mt.exe -managedassemblyname:{Your_DLL} -nodependency -out:{Your_DLL}.manifest
mt.exe -manifest {Your_DLL}.manifest -outputresource:%{Your_DLL};1
sn -Ra {Your_DLL} {Your_PFX}

然后像这样在你的应用程序清单中引用这个程序集清单

<dependency>
    <dependentAssembly>
        <assemblyIdentity name="{Your_DLL}" version="1.0.0.0" publicKeyToken="hash_here" processorArchitecture="x86" />
    </dependentAssembly>
</dependency>

其中assemblyIdentity 与 {Your_DLL} 的程序集清单中的 assemblyIdentity 匹配。

在客户端计算机上,VB6 可执行文件和 .NET dll 必须位于同一文件夹中。无需 regasm,也无需 GAC 注册。

我正在使用UMMM 工具来自动化清单创建过程,但如果是一次性设置,您可以手动完成。

【讨论】:

  • 我同意 Reg free comm 是处理此问题的最佳方式。我们遇到了一些问题。这仍然是我的长期目标。我将尝试使用 UMMM 工具。
  • 我能够使用上面列出的 mt 和 sn 命令来让 reg free comm 工作。感谢您的帮助!
【解决方案2】:

【讨论】:

  • 感谢您的回复。它可以在 Windows 7 64 位上运行吗?我用 HKCU\Software\Classes\Wow6432Node 替换了 HKLM。这适用于 vista 64 但不适用于 windows 7 .... 我怀疑 Wow6432Node 问题。
  • 感谢 SLaks 的帮助。我读到 Wow6432Node 是运行所必需的,因为 vb6 应用程序是 32 位的。我会删除它并试一试。
  • 我对 Wow6432Node 做了一把斧头,它开始在 win7 64 位上运行。感谢您的帮助!
  • 以防万一有人感兴趣,我构建了一个小型 powershell 脚本,该脚本在构建中自动运行。 VMIS 是程序的名称。 VMISLIB.dll 是 .net dll 的名称。
  • #这仅适用于 64 位机器,因为 x86 文件路径 #run regasm 并创建初始文件 cd "\Program Files (x86)\VIS" & 'C:\Program Files ( x86)\VMIS\RegAsm' /regfile /codebase VMISLIB.dll #为 32 位机器创建文件 $file1 = "C:\Program Files (x86)\VMIS\VMISLIB.reg" $file2 = "C:\Program Files ( x86)\VMIS\VMISLIBdeploy.reg" $match = "HKEY_CLASSES_ROOT" $replacement = "HKEY_CURRENT_USER\Software\Classes" $content = 获取内容 $file1 $content = $content -creplace $match,$replacement $content |设置内容 $file2
【解决方案3】:

部署需要管理员权限。 应该在这种情况下会失败。

【讨论】:

  • 它可以在没有管理员权限的情况下在 Vista 和 XP 上运行。我想更新现有的 dll ...
猜你喜欢
  • 1970-01-01
  • 2011-07-02
  • 2012-02-20
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 2011-09-10
  • 2010-11-05
  • 1970-01-01
相关资源
最近更新 更多