2011-03-29 127 views
1

我有一个ASP Classic应用程序引用了一些VB6 COM对象。其中一个VB6 COM OBJECTS引用另一个第三方.Net DLL。如何在没有gacutil的情况下注册64位DLL

第三方.Net DLL需要在Windows Server 2008 R2 x64机器上注册。

我已经使用PowerShell(参考:http://weblogs.asp.net/adweigert/archive/2008/10/31/powershell-install-gac-gacutil-for-powershell.aspx)发现脚本注册在GAC中的DLL没有GACUTIL

现在我需要注册程序集。我在本地开发机器(x86)上同时使用了GACUTIL和REGASM。但是当我尝试在测试服务器上获取DLL时,我遇到了问题。

第一个问题:NO GACUTIL

没有在服务器上没有GACUTIL,我得到了周围使用脚本上面提到的。我知道它可以使用SDK安装,但我不想“污染”环境。

第二期:REGASM CAN NOT FIND ASSEMBLY

32位.Net框架没有找到DLL下的REGASM。错误报告:“RegAsm:错误RA0000:无法找到输入程序集'C:\ Windows \ System32 \ xxxxx.dll'或其依赖项之一。”

所以我使用了RegAsm的64位变体,并且工作。

我担心的是,这是一个误判,因为它没有被32位RegAsm注册,所以ASP经典程序没有找到该程序集。

我运行我的应用程序我在事件日志中收到错误:“ActiveX组件无法创建对象”。一般来说,发生这种情况是因为它找不到要创建的对象,这意味着托管对象的DLL未正确注册。

所以我现在要做的是找出是否有一个替代方法使用的PowerShell注册程序集在32位范围内的REGASM。

有没有人知道这是可能的,以及脚本会是什么使它正确?

回答

1

我发现我被放置。在注册的测试机器上的错误文件夹中的网络DLL。

在Windows 64位操作系统上,您有System32和SysWOW64文件夹。我将DLL放在System32文件夹中,它应该放在SysWOW64文件夹中。

我从RegAsm获得的错误(“RegAsm:错误RA0000:找不到输入程序集'C:\ Windows \ System32 \ xxxxx.dll'或它的一个依赖项。”)应该让我点击但我错过了它。

基本上32位RegAsm找不到我的DLL,但64位RegAsm可以找到我的文件,并通过注册与64位RegAsm程序集我将该DLL放入64位范围。我需要它在32位范围内。

我将DLL表单System32移到SysWOW64,32位RegAsm找到了DLL并在32位范围内注册它。

现在我的VB6 COM对象可以找到.Net DLL,它可以在出错“ActiveX组件不能创建对象”的情况下工作。

说了这么多,我还没有找到一个图书馆或功能,将没有实际使用RegAsm RegAsm同样的工作。

如果有人发现这个神话般的野兽,请回答这个问题。提前致谢。

0

不确定,但是您的麻烦似乎来自UAC Virtualisationthis article can also help)的副作用,它存在于Vista中并且在此处仍然有效。一个好处是,文件系统和注册表的系统部分现在不受用户访问的限制,但假定旧的(32位)程序继续工作,系统使他们相信他们在这些部分上写入,但实际上他将它们重定向到用户地方。 查看注册表中的“HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node”。

我最近遇到的问题是我的MSI是用32位库管理程序构建的,所以在64位机器上安装时调用这些库使得UAC虚拟化将我的注册表项安装到Wow6432Node中。 This Internet article帮助我解决问题。我使用Orca将Installutillib.dll从32位替换为64位。

我希望它能帮助

JP

+0

感谢您的信息...我正在调查它。 – 2011-03-30 06:58:15

+0

嗨JP,请阅读我的回答,以获取更多信息,了解最终的问题。感谢您的帮助和有趣的阅读。肯定会保持UAC虚拟化。 – 2011-03-30 08:03:27

相关问题