0

假设我在两个不同 exe 应用程序的两个不同 bin 文件夹中有相同的 .net 托管 dll(相同版本,相同代码)。如果我使用 RegSvcs.exe /appname:app1 pathtodll1/example.dll 和 RegSvcs.exe /appname:app2 pathtodll2/example.dll 将两个 dll 注册到 COM+ 中。我可以假设一个 exe 将始终运行 app1 com+,而另一个 exe 将运行 app2 com+?

我的意思是,如果我能够在注册时更改应用程序名称,我看不到 exe 客户端应用程序(顺便说一句,托管应用程序)如何解决在请求 dll 时应该运行哪个 COM+ 应用程序...

他们是否使用注册表 CodeBase 属性来确定应用程序名称?

编辑:看来我无法第二次注册。然后我有另一个问题......当app2运行并询问example.dll服务时,哪个dll真的上传到app1.exe旁边的那个还是app2.exe中的那个?我真的需要在 app2 bin 文件夹中复制 example.dll 吗?

如果我在混合中添加第三个非 com+ dll (second.dll),这将被两个 exe 和 example.dll 引用,哪个 second.dll 将被加载到 app2.exe 应用程序域中?

4

1 回答 1

0

加载器选择哪个dll似乎与组件服务无关。从.net 的角度来看,COM+ 只是一个设置存储。因此,当一个给定的 dll 像往常一样在应用程序域中加载时,它会询问 COM+ 存储本身(即具有相同版本和接口的 dll)是否存在于那里。如果它存在,那么它会读取它的 COM+ 设置。如果不是,我认为它会尝试在 COM+ 中自动注册(使用默认的 COM+ 设置)。

于 2012-10-17T16:47:21.253 回答