为64位操作系统包装32位dll以使用regsvr32.exe

Tim*_*vis 8 c# dllregistration asp-classic

我们目前正在将我们的网站从Windows 2003(32位)转移到Windows 2008(64位)并遇到了问题.

我们的一个网站使用支付网关HSBC CPI,需要注册DLL(regsvr32.exe),然后在经典的asp网站内使用此DLL.问题是DLL是一个32位DLL,因此它不会注册到Windows 2008操作系统.

有没有办法可以将这个32位dll包装在ac#.net项目中,这样它的方法就可以暴露出来并可以在操作系统中注册?

任何帮助将非常感谢.

lak*_*tak 6

您可以使用c:\​​ Windows\SysWOW64文件夹中的regsvr32.exe注册DLL.

但是,由于您无法混合64/32位代码,因此您必须创建在x86中运行的C#服务(请参阅项目属性,平台目标),然后您可以通过WCF从x64 Web应用程序中使用该服务.

更简单的选择是向汇丰银行询问x64 dll.


小智 6

如果要注册使用VC++或Visual Basic 6.0创建的32位COM dll,则必须按照以下步骤操作,而不对代码进行任何更改.它也不需要进行任何编译,也不必在WOW模式下运行IIS.几年前我遇到过这个问题,我解决了这个问题,对我来说这很好.

场景:

我假设您有一个供应商提供的第三方32位COM DLL.该DLL在32位操作系统上运行良好,当您转移到x64环境时,即使您尝试通过regsv32注册它也无法正常工作.

还让我假设DLL的名称是"ASXUpload.DLL".我将在下面提供的解决方案中使用此名称.

请按照以下步骤操作:

  1. 首先,如果您已经在x64操作系统中注册了DLL,请取消注册DLL.要做到这一点,只需在运行命令"regsvr32/u"中输入以下内容,例如"regsvr32/u C:\ MyDLL\ASXUpload.DLL".如果您已从x64操作系统取消注册DLL,则无需运行此步骤.

  2. 还要确保您没有将DLL保存在Windows文件夹中,该文件夹通常是C:\ Windows.对于此示例,我将DLL保存在以下文件夹C:\ MyDLL中.

  3. 现在我们需要使用Microsoft的组件服务添加COM +组件.要启动组件服务,请转到"控制面板"/"管理工具"/"组件服务".进入组件服务后,深入查看计算机,然后深入查看"我的电脑",再选择"COM +应用程 然后右键单击COM + Applications并选择"新建" - >"应用程序".

  4. 在"欢迎使用COM应用程序安装向导"屏幕中,单击"下一步>".

  5. 单击"创建空应用程序"按钮.

  6. 输入名称.由于我的DLL名称是ASXUpload.dll所以我输入了名称为"ASXUpload".当询问"库或服务器"时,选择"服务器".

  7. 单击"下一步>"按钮,然后选择"此用户".

  8. 输入用户或单击"浏览"以选择用户.单击"浏览"更安全,以确保使用正确的域和拼写.输入密码并确认密码.警告,如果需要,请务必包含域/用户名.单击"完成".(注意:我们建议使用"此用户",否则,必须有人登录到服务器才能运行DLL.).在我的情况下,我选择了域管理员帐户.您还可以添加服务帐户.如果您不确定,请咨询您的系统管理员.

  9. 现在将出现"添加应用程序角色"屏幕.不要添加任何内容只需单击"下一步>"按钮即可.

  10. 现在出现"将用户添加到角色"屏幕.不要添加任何内容只需单击"下一步>"按钮即可.

  11. 现在您将看到在组件服务 - >计算机 - >我的电脑 - > COM +应用程序 - >下,您将看到新添加的应用程序.在此示例中,应用程序名称将为"ASXUpload".现在,通过单击"+"图标深入查看新添加的应用程序"ASXUpload",您将看到"组件".

  12. 现在右键单击"组件",然后选择"新组件".在"欢迎使用COM应用程序安装向导"屏幕中,单击"下一步>".

  13. 单击"安装新组件",然后选择要注册的DLL.如果是"C:\ MyDLL\ASXUpload.DLL".

  14. 选择DLL后,您将看到它将显示找到的组件.单击"下一步>"按钮继续,最后点击"完成"按钮完成.

  15. 现在是棘手的部分.右键单击您添加的应用程序,您将在组件服务 - >计算机 - >我的电脑 - > COM +应用程序下找到该应用程序.在我的例子中,应用程序名称是"ASXUpload".右键单击应用程序后,选择"属性".应用程序属性窗口将打开.单击"安全"选项卡.在"安全"选项卡中,确保未选中"授权"部分下的"强制执行此应用程序的访问检查"复选框.

在"安全级别"部分下,选择单选按钮"仅在进程级别执行访问检查.安全属性不会包含在对象上下文中.COM +安全调用上下文将不可用."

确保未选中"应用限制策略"选项.

将"模拟级别"设置为"匿名"

  1. 如果要从Web应用程序访问DLL,请确保添加IUSR和IWAM帐户.要执行此操作,请转到COM +应用程序 - >应用程序名称(在这种情况下,它将是ASXUpload) - >角色 - > CreateOwner - >用户.右键单击"用户",然后添加Internet Information Server使用的IUSR和IWAM帐户.

  2. 还要在保存DLL的文件夹上设置NTFS权限.在这种情况下,我将DLL保存在文件夹C:\ MyDLL中.现在右键单击文件夹"MyDLL"并转到安全选项卡,然后添加IUSR和IWAM帐户.

这就是您需要做的所有事情,您应该能够使用DLL.

我在过去曾在生产环境中工作过的两个不同的组织中使用过这种技术两次,它没有任何问题.首先我在2005年尝试了这个,然后我在2008年再次使用它.

如果您遇到任何问题,请告诉我.