问题标签 [dcom]

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 投票
1 回答
1226 浏览

c# - 无法从用 c#(Windows 2003 服务器)编写的 Windows 服务访问 DCOM 对象,但可以在作为控制台应用程序托管时访问该对象

我用 C# 编写了一个应用程序,它通过 DCOM 对象(对象名称是 Toolkit 对象)写入会计系统。当此应用程序在 Windows 2003 中作为 Windows 服务托管时,该服务无法打开 DCOM 对象,尽管运行该服务的用户身份具有所有必要的访问权限。

当我使用控制台应用程序托管相同的应用程序时,它工作正常。

我尝试通过 DCOMCNFG 调整对 DCOM 对象的访问权限,但似乎没有任何效果。

0 投票
2 回答
372 浏览

c++ - 为什么我的 DCOM 客户端会锁定对 SendMessage 的调用?

在 XP 上运行。我有一个调用 calls 的客户端CoInitializeEx(NULL, COINIT_MULTITHREADED),加载一个(本地)DCOM 对象,并附加一个事件接口,以便 DCOM 对象可以发回事件。客户端看起来很像记事本,带有一个覆盖客户端区域以显示事件消息的多行文本框。以下是创建锁定的调用:

  • 客户端调用p->DoStuff()DCOM 对象。
  • DCOM 对象c->DoStuffEvent()在处理时调用客户端DoStuff()
  • 客户端向子文本框发送一条EM_REPLACESEL消息,让它显示“事情正在发生”

客户端冻结在SendMessage(EM_REPLACESEL). 客户端的调用p->DoStuff()在主线程上SendMessage(EM_REPLACESEL)完成,而在不同的线程上完成。我确定这与问题有关。

有人可以解释导致锁定的原因以及我如何解决它吗?客户端和 DCOM 对象由我在 MSVC/ATL 中编码,因此我可以根据需要修改它们。

0 投票
2 回答
1918 浏览

dcom - OPC与DCOM的关系

我试图掌握 OPC 和 DCOM 之间的联系。我在这里看过所有四个教程,我想我对什么是 OPC 有很好的感觉,但是在其中一个教程(第三个 35 秒)中,叙述者指出 OPC 基于 DCOM,但我不了解两者之间的真正联系。我的困惑来自我的教授提出的一个问题,他问“您将如何以及在何处部署 OPC 而不是 DCOM,反之亦然”。他的问题使两者看起来不像我的研究表明的那样联系在一起。我不是在寻找任何人来回答我教授的问题,我只是想知道 OPC 和 DCOM 之间的关系,然后我可以弄清楚其余的。具体来说,我想知道:1.)一个总是基于另一个 2。

0 投票
4 回答
2095 浏览

vb6 - 除非用户登录,否则 VB6 应用程序不会按计划任务执行

我将非常感谢对此的一些帮助!这可能是一个棘手的问题。:)

问题

  • 我有一个设置为计划任务的 VB6 应用程序。它每次都会启动,但是CreateObject()如果用户未登录到计算机,则在执行时会失败。
  • 我正在寻找可能导致这种情况的信息。我的主要怀疑是某些 Windows API 失败了。

关键点

  • 在 Windows 2000、2003、2008 和 Vista 上确认的行为。
  • 应用程序在预定时间以用户 X 身份执行,由 Windows 任务计划程序执行。
  • 它每次都执行。申请开始了!
    • 如果用户 X 通过 RDP 登录,它会完美运行。(注意,用户不需要连接,只需登录)
    • 如果用户 X 未登录到计算机,则应用程序将失败。

故障点

  • CreateObject()使用实例化也是应用程序一部分的 DCOM 对象时应用程序失败。
  • DCOM 对象在启动时声明 .dll 引用(全局/在 .bas 文件之上)并运行一个小型启动函数。失败必须在启动期间,可能在 .dll 声明之一中。

想法

经过一番谷歌搜索后,我最初的怀疑是针对 MAPI。从我可以看到 MAPI 要求用户登录。该应用程序具有 MAPI 引用。但即使删除了所有 MAPI 引用,它仍然无法正常工作。

如果用户登录有什么区别?注册表映射?环境?Explorer.exe 正在运行。

当应用程序以用户身份执行时,用户没有登录吗?

什么信息会有帮助?

  • 一个明确的答案真的很棒。
  • 任何关于任何 VB6 功能/Windows API 的信息都可能会根据用户是否登录而有所不同,这肯定会有所帮助。
  • 类似的经历可能会引导我走向正确的方向。
  • 关于调试的提示。
0 投票
1 回答
546 浏览

asp.net - Activate COM object using website doesn't work in Windows 2003 server

I have been trying really hard to activate and launch a COM object using an ASP.NET web application. The aspx website has a code-behind file that has a reference to this COM object (which is an actual application - a CAD software). When required, the VB code creates (or launches) the application.

The complete set-up works in a Win-XP (32-bit) environment both under debugging using visual studio and when the website is accessed by an outside user (through IIS server in XP). But the same application doesn't get activated when it is hosted onto the Win-2003 (32-bit) IIS server. I get "Object reference not set to an instance of an object" error.

The way I have setup in Win-XP was to grant ASP user and Internet guest user permissions to the COM object in the DCOM Config and since the windows firewall is enabled, I add the exe file (associated with the COM object) to the exception list. For the case of Win-2003 server, I add the Network Service permission to the COM object. But the setup doesn't seem to work at all.

I am not sure what I am missing and how to get the application to launch. Any help will be greatly appreciated.

0 投票
1 回答
1013 浏览

c# - 如何在对 C# .NET 3.5 服务器进行 DCOM 调用时可靠地检查客户端身份?

我有一个旧的 Win32 C++ DCOM 服务器,我正在重写它以使用 C# .NET 3.5。客户端应用程序位于远程 Windows XP 机器上,并且也是用 C++ 编写的。这些客户端必须保持不变,因此我必须在新的 .NET 对象上实现接口。

这已经完成,并且在接口的实现方面正在成功地工作,并且所有的调用都正确地从旧客户端到新的 .NET 对象。

但是,我在从 DCOM 客户端获取调用用户的身份时遇到问题。为了尝试识别发起 DCOM 调用的用户,我在服务器上有以下代码...

当我得到该CallingUser属性时,前几次返回的值是正确的,并且识别出正确的用户名,但是,在 3 或 4 个不同的用户成功拨打电话后(而且情况各不相同,所以我不能更具体),其他用户似乎被识别为之前拨打过电话的用户。

我注意到前几个用户在他们自己的线程上处理他们的 DCOM 调用(也就是说,来自特定客户端的所有调用都由单个唯一线程处理),然后后续用户由相同的线程处理较早的用户,并且在调用 之后CoImpersonateClient()CurrentPrincipal匹配该线程的初始用户。

为了显示:

用户 Tom 进行由线程 1 处理的 DCOM 调用(CurrentPrincipal正确识别 Tom)

用户 Dick 进行由线程 2 处理的 DCOM 调用(CurrentPrincipal正确识别 Dick)

用户 Harry 进行由线程 3 处理的 DCOM 调用(CurrentPrincipal正确识别 Harry)

用户 Bob 进行由线程 3 处理的 DCOM 调用(CurrentPrincipal错误地将他识别为 Harry)

正如您在此图中所见,来自客户端 Harry 和 Bob 的调用正在线程 3 上处理,并且服务器将调用客户端识别为 Harry。

有什么我做错了吗?以这种方式使用模拟是否有任何警告或限制?有没有更好或不同的方法可以可靠地实现我想要做的事情?

所有帮助将不胜感激。

0 投票
1 回答
155 浏览

iis - 在 CruiseControl.net 中构建 VB6 应用程序的 DCOM 问题

我可以成功地构建一个依赖于构建机器上的几个 DCOM 设置的 VB6 应用程序,没问题。

然而。我第二次尝试运行相同的构建过程时,它失败了,因为 DCOM 和/或 IIS 锁定了我正在尝试重建的输出文件。

目前,如果我登录到构建机器并重置 iis(使用 iisreset 或其他方式),这会释放这些输出文件上的锁定,从而使构建成功完成。

显然,我不想登录构建机器,当然也不想继续重置 IIS - 还有其他方法吗?

谢谢。

0 投票
0 回答
3276 浏览

c# - 使用 COM 互操作在 C# 中编写虚拟磁盘服务 API

我想在 C# 中编写一个小型实用程序/类库,它可以枚举与 Windows 7 上的卷 C 关联的磁盘上的主分区。我想修改该磁盘上任何一个主分区的活动标志。我想从托管代码(C#)中“使用”这个库。据我了解,我需要使用http://msdn.microsoft.com/en-us/library/bb986750(v=VS.85).aspx中描述的虚拟磁盘服务。

对于 Windows 2008 的这个 API,似乎有一个类似于“主要互操作程序集”的东西:Windows.Storage.Vds.dll(参见http://blogs.msdn.com/taylorb/archive/2008/09/19/using- the-virtual-disk-service-vds-from-powershell-to-mount-and-use-vhd-s.aspx)。我在 Windows 7 上找不到这个。它存在吗?如果是这样,我如何获得它?我找不到它,所以我想它不是公开的。

下一步是使用 tlbimp生成此代码,但 VDS 不会导出类型库。这是真的?我找不到它。

剩下的就是直接在 C++ 中“手动”完成 COM 的工作,就像上面的例子一样。这些例子是有效的,但实际上是难以理解的。同样,我可以使用http://msdn.microsoft.com/en-us/library/aa645736(VS.71).aspx中描述的技术从 midl 手动创建客户端程序集。但我没有足够的 COM/COM Interop/VDS 以合理的方式做到这一点。

令我震惊的是,VDS dcom 客户端 api 虚拟无法使用,因此每个人最终都编写了 diskpart.exe 脚本。我当然错了。

0 投票
2 回答
9498 浏览

deployment - 使用命令行部署 COM+ 应用程序

我需要将我的 COM dll 部署为 COM+ 应用程序。我曾经从组件服务管理器 (dcomcnfg.exe) 执行此操作。但我的要求是从命令行部署它。有没有命令可以做到这一点?

更新:以及如何卸载相同?

谢谢。

0 投票
2 回答
461 浏览

com - 托管可执行文件作为服务运行时,COM 调用不起作用

我们有一个托管 COM 服务器的可执行文件,例如x.exe. COM 对象在调用站点上实例化如下:

这一切works fine when x runs as an regular application

我们有一个x.exe so that it runs as a service在windows下封装的工具。在这种情况下,我们永远不会在 x.exe 中收到 COM 调用(通过日志记录验证)。这是奇怪的部分:通过记录调用站点,我可以看出 COM 对象已成功实例化,并且对接口函数的调用也不会产生错误(SUCEEDED(hres)是真的)。

有任何想法吗?