问题标签 [component-services]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
429 浏览

asp-classic - 在经典 ASP 应用程序中调试通过 VBScript 调用的 VB6 ActiveX DLL

Whelp,我尽可能地避免它,但终于到了对一些古老的 VB6 代码进行一些更改的时候了。我是一名刚毕业的大学毕业生,所以我希望远离这段几乎和我一样古老的代码。

DLL 在 VB6 的本地安装中编译并通过组件服务进行部署。然后,该组件由 VBScript 在 Windows 2003 Server 上运行的 Classic ASP 应用程序中调用。

我已经尝试了使用 VB6 调试器调试此代码的所有方法,但我无法让它工作。我已将 DLL 编译到组件服务将其部署到的相同位置(非系统驱动器上的随机文件夹),并将二进制兼容性设置为同一个 DLL。每个类文件都将实例设置为 MultiUse,并将 MTSTransactionMode 设置为“1 - NoTransactions”。该组件工作正常,直到我附加调试器,然后在尝试实例化对象时得到“ActiveX 组件无法创建对象”。如果我分离调试器,它会再次工作。

我注意到,当我附加调试器时,在组件服务中,DLL 位置更改为 C:\Program Files\Microsoft Visual Studio\VB98\VB6DEBUG.DLL,我认为这只是 VB6 拦截对组件的调用。当我分离调试器时,它会变回来。我还应该注意,该组件被配置为使用与我登录的用户帐户不同的特定用户身份,但是每个人都被授予通过用户角色访问该组件的权限。组件激活类型也是“服务器应用程序”,但将其设置为“库激活”似乎没有什么区别。

我也尝试过使用 VC++6 IDE 和 VS2010,但没有运气。我能够在 VS2010 中调试 dllhost.exe 并且能够命中一些断点,但是符号没有正确加载。我尝试使用调试符号编译 DLL 并通过调试设置菜单将它们加载到 VS2010 环境中,但这并没有解决问题。

我也没有发现组件服务 JIT Debugger 很有用。我更希望能够在 VB6 中进行调试。

最让我惊讶的是,这段代码有数千行,并且在没有使用任何调试器的情况下得到了维护。我年轻的、被宠坏的自己还没有准备好接受这段代码不能被调试。

0 投票
2 回答
3662 浏览

registry - 获取“注册 COM+ 应用程序时出错”

我有一个 COM+ 应用程序,我试图通过双击 .msi 文件手动安装它,但它给出错误并且无法安装 COM+ 应用程序。

由于此错误,它也不会在组件服务中创建任何条目。

我也尝试在注册表中搜索,但可以找到任何带有 COM+ 应用程序名称的条目。

我该如何解决这个问题?我需要在我的服务器上安装这个 COM+ 应用程序。

我添加了错误的屏幕截图以供参考。

在此处输入图像描述

0 投票
1 回答
36 浏览

c# - 如何找出 COM+ 锁定 DLL 的根本原因?

我有一个必须安装在 COM+ 中的应用程序。通过 RegSvcs 安装工作正常,但是当我尝试卸载应用程序时,一些 DLL 被锁定并保留在安装文件夹中。请注意,这只发生在我调用 COM+ 应用程序之后;否则卸载运行顺利。

我的应用程序需要全新安装和退出,但我很难确定这些 DLL 被锁定的原因。下面是锁定的第三方 DLL 的屏幕截图;未显示与我的应用程序对应的两个。

我的程序集被标记为非 ComVisible,派生自 ServicedComponent 的单个类暴露给 COM+。我尝试在调用完成后强制进行垃圾收集,但这似乎没有任何区别。所以,一些问题:

  • 是否可以安全地假设这是由于 IDisposable 在某处的不当实施而发生的,还是其他原因?
  • 我是否应该假设每个锁定的 DLL 都存在一个单独的问题,或者是否有可能是单个类的问题导致所有这些 DLL 上的锁定?
  • 有什么建议我可以如何调试这个吗?

任何帮助将不胜感激 - 感觉完全失去了这个。

锁定的 DLL

0 投票
0 回答
18 浏览

c# - Com+ 组件注册状态通过使用 c# 传递机器名称

如何通过使用 c# 传递机器名称来获取机器中注册的 com+ 组件列表。我尝试过使用 comadmincatalog.connect("machine name/ip address")。得到如下异常

组件或包含该组件的应用程序已被禁用

请确认如何解决此问题

0 投票
0 回答
37 浏览

c# - log4net - 作为组件服务调用时出错

我创建了一个 .Net 对象(它是一个由 log4net 和 log4net.Ext.Json 组成的基本记录器)。此 .Net 对象作为 COM+ 应用程序添加到组件服务中,以使其可供某些遗留系统访问。

为了测试这个组件服务,我在 C# 中创建了一个控制台应用程序,它将创建对象的一个​​实例,然后调用我想要的方法LogMessage

执行line 时var COMobject = Activator.CreateInstance(type);,出现此错误:

log4net:错误无法创建对象以设置参数:布局 log4net:错误找不到类型 [log4net.Layout.SerializedLayout,log4net.Ext.Json] System.IO.FileLoadException:无法加载文件或程序集'log4net,版本 = 2.0 .9.0,Culture=neutral,PublicKeyToken=669e0ddf0bb1aa2a' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

我正在使用log4net.Ext.Json,因为我需要以 json 格式编写日志,但是,当我修改我的 log4Net 配置文件以使用默认 appender 时,它按预期工作,所以我的猜测是log4net.Ext.Json. 这是我的 log4Net 配置文件:

我看到这个问题可以通过调用来解决,log4net.Config.XmlConfigurator.Configure();但在我的情况下它不起作用,我也将 log4net 设置为调试模式<log4net debug="true">,但是没有找到解决方案的新线索,我只是得到相同的引用错误。

值得一提的是,我直接在 Visual Studio 中调试了我的 .Net 组件,所有的事情都按预期工作,当对象被称为 COM+ 应用程序时,错误就出现了。