我正在努力使用我尝试在 ms axapta 2009 中使用的 .net activeX。
在我编译它的本地机器上使用这个组件,它工作得很好。它可以作为activeX元素添加到表单上,方法和事件列在axapta-activeX-explorer中,我可以毫无问题地与之交互。
但尝试将 dll 分发给其他客户端并没有按预期工作。通过 regasm /codebase /tlb 注册 dll 工作正常 - 收到消息,注册成功。在选择要添加到 ax 中的 activeX 元素时,也会列出该组件,但既没有列出函数也没有列出属性。并启动表单会导致错误消息 - activeX component CLSID ... not found on system, not installed。classID 确实是.net 中定义的那个。
奇怪的事情发生了,看看任务管理器。activeX 组件本身只是与 com 应用程序交互的包装器。当启动不工作和_not_installed_的ax-form时!activeX-thing,taskmanager 显示 com-application 的新进程,由 activeX 实例化:/
我尝试过的事情:
- 使用不同版本的 regasm,例如 \Windows\Microsoft.NET\Framework\v2.0.50727 ;C:\Windows\Microsoft.NET\Framework64\v2.0.50727
- 在 .net 中使用新的 GUID,然后从注册表中删除旧的 GUID
- 编译,使用不同版本的 .net 框架
- 通过 regasm、regasm /codebase、regasm /codebase /tlb 进行注册,使用 visual-studio-setup
- 以管理员身份通过命令行运行注册
- 以管理员身份运行安装程序
- 在客户端机器上以管理员身份运行 ax
- 将 dll 移动到不同的文件夹,然后进行新注册( windows/system32; ax/client/bin )
- 安装到 GAC ( gacutil /i )
- Visual Studio 中的不同项目选项(COM-Visibility;注册 COM-Interop;不同的 targetPlatform)
希望事实是,在启用 COM-Interop 注册选项的 Visual Studio 中编译所做的不仅仅是 regasm-registration,我使用 registry-monitor-microsoft-tool 来记录编译期间发生的注册表活动。
此外,使用这些日志在目标客户端上创建所有注册表项也不起作用。
任何提示或帮助将不胜感激!这件事已经阻止了我好几天:(