我有在32位操作系统上构建和注册的activex服务器exe。我希望通过将项目升级到Visual Studio 2010并将平台更改为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进程中加载它。
答案 0 :(得分:3)
假设进程有足够的权限写入注册表,您必须通过从提升的命令提示符运行它来处理它,这可能只会将COM注册表项添加到注册表视图中64比特流程可以看到。
32位COM客户端获得注册表的不同视图,HKLM \ Software \ Wow6432Node。它不会在那里找到注册表项。查看SDK文档中的RegCreateKeyEx()。请注意底部的链接以及有关KEY_WOW64_32KEY选项的说明。在线文章is here。
访问64位进程外COM服务器的32位客户端是一个非常好的支持方案,但有一些警告。就像构建和注册32位和64位代理/存根DLL一样。
答案 1 :(得分:0)
运行That.exe / RegServer时,是否从管理员命令提示符处执行了此操作?如果不是这可能是为什么它不起作用。
如果你这样做了但它仍然无效,请尝试调试它以查看它对注册表的操作。例如使用Process Monitor,甚至是Visual Studio调试器(记住确保调试器以管理员身份运行您的应用程序)。