64位COM(ActiveX)服务器

64位COM(ActiveX)服务器,com,activex,64-bit,Com,Activex,64 Bit,我有activex服务器exe,它可以在32位操作系统上正常构建和注册。我想通过将项目升级到VisualStudio2010并将平台更改为X64(显然不起作用)来制作64位版本的exe 应用程序本身可以工作,但我看不到它在运行后注册 That.exe /RegServer 如果您能就activex从32迁移到x64提供有用的建议,我将不胜感激 正在处理/RegServer参数的代码如下: if(lstrcmpi(lpszToken, _T("RegServer")) == 0) {

我有activex服务器exe,它可以在32位操作系统上正常构建和注册。我想通过将项目升级到VisualStudio2010并将平台更改为X64(显然不起作用)来制作64位版本的exe

应用程序本身可以工作,但我看不到它在运行后注册

That.exe /RegServer
如果您能就activex从32迁移到x64提供有用的建议,我将不胜感激

正在处理/RegServer参数的代码如下:

if(lstrcmpi(lpszToken, _T("RegServer")) == 0)
  {
   _Module.UpdateRegistryFromResource(IDR_OUTDISKSARG, TRUE);
   nRet = _Module.RegisterServer(TRUE);
   bRun = false;
   break;
  }
32位activex对我来说是不可用的,因为我必须在x64.NET进程中加载它

  • 运行该.exe/RegServer时,是否在管理员命令提示符下执行此操作?如果不是,那可能就是它不起作用的原因

  • 如果您这样做了,但它仍然不工作,请尝试调试它,以查看它对注册表的影响。e、 g.使用Process Monitor,甚至Visual Studio调试器(记住确保调试器以管理员身份运行应用程序)


  • 假设进程有足够的权限写入注册表,您必须通过从提升的命令提示符运行它来处理,这可能只会将COM注册表项添加到64位进程可以看到的注册表视图中

    32位COM客户端获得注册表的不同视图HKLM\Software\Wow6432Node。它不会在那里找到注册表项。查看SDK文档中的RegCreateKeyEx()。请注意底部的链接和关于KEY_WOW64_32KEY选项的讨论。在线文章


    32位客户端访问64位进程外COM服务器在其他方面是一种非常受支持的方案,但有一些注意事项。类似于构建和注册32位和64位代理/存根DLL。

    请具体说明如何确定它未注册?您是否在运行RegServer命令时运行了Process Monitor/RegMon以查看触动了哪些注册表项?它不显示在注册表中,我使用了64位版本的RegDllView.exe来查看我在系统上注册了哪些组件。我还试图通过互操作程序集从NetAssembly加载它,该程序集清楚地表明它未注册。工具在这里可用:感谢您的响应。在操作系统上以管理员注册组件的身份运行。非常感谢你们。不过,我想再问一个问题。我有一个安装项目,它正在对同一个activeX进行同样的注册。此安装程序(或任何其他希望这样做的进程)是否需要从管理员帐户运行它?安装程序将需要管理员,是的。尽管如此,安装程序几乎总是触发UAC提示符;你通常不得不想方设法阻止它的发生。