问题标签 [out-of-process]
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.
delphi - 如何检测我的 Delphi 应用程序是否已被 Windows 作为进程外 COM 服务器启动?
我正在开发一个 Delphi 应用程序,它可以直接启动,作为桌面应用程序,通过运行应用程序(例如,通过单击资源管理器中的可执行文件)或 - 间接地,作为进程外服务器,通过创建任何在应用程序中实现(并由其注册)的 COM 对象
有没有办法检测我的应用程序是作为进程外 COM 服务器还是作为桌面应用程序启动的?
methods - SLAB,进程外:更改事件源方法的签名会导致不正确的事件记录
我实现了一个用于记录事件的事件源类。在反复更改记录事件的一种方法的签名(参数名称和参数类型)后,不再正确记录事件。例如,当记录事件时,不是使用当前参数名称设置有效负载,而是使用用于该方法的先前版本的参数记录事件。例如:
方法的版本 n:
该方法的版本 n+1:
当调用此方法来记录事件时,将记录它们并使用参数名称 paramName 而不是 newParamName 设置有效负载值。
现在,问题是:如何清除“缓存”,以便系统忘记旧版本的方法,而新方法可以正确记录事件?
LE:我用 PerfView 测试了日志记录。有趣的是,它可以正确读取日志。我用 SemanticLogging-svc.exe 再次测试,日志仍然显示不正确。看起来问题不在于记录事件,而在于阅读它们。
service - SLAB,进程外:将语义日志记录作为服务运行时,我无法查看事件
在将语义日志记录作为控制台运行时,我可以将记录的事件保存在数据库中(使用自定义数据库接收器),但在作为服务运行时我不能这样做。这里有什么问题?
sql - 进程外 OLEDB 提供程序的链接服务器访问被拒绝错误
我有一个用于 OLAP 提供程序的 OLEDB,我正在尝试使用它来设置链接服务器。由于某种原因,我无法将提供程序设置为在进程内运行(通过选中“允许进程内”选项),因为它使用了一些自定义的 .NET 程序集,SQL 服务器似乎无法加载(尽管我已经CREATE ASSEMBLY
成功运行)。当我尝试将其作为进程外链接服务器运行时,出现以下错误:
(请注意,Microsoft MSOLAP 提供程序也会发生相同的错误,如上所示)。
进一步跟踪显示的错误访问被拒绝错误发生在成功执行查询之后的 IColumnsInfo::GetColumnInfo() 调用上。
我尝试根据以下链接设置权限:
http://www.sqlservercentral.com/articles/Linked+Servers/73794/
但那些都行不通。只是想知道是否有其他人遇到过这个问题。
.net - 在没有管理员权限的情况下使用 RegServer 或类似的东西
我有一个程序,其中包括一个托管的 c++ 进程外 com 服务器。现在在安装过程中,它已使用 /RegServer 标志注册。这一切都在其当前的实现中运行良好。
我想做的是在用户空间中注册这个服务器并避免需要管理员权限。
我曾尝试搜索 stackoverflow 和 google,但我只找到了一篇关于 codeproject 的文章,该文章创建了一个第三方实用程序来执行此操作。
http://www.codeproject.com/Articles/3505/RegSvrEx-An-Enchanced-COM-Server-Registration-Util
尽我所能告诉没有办法在用户空间而不是正常的根空间中注册com服务器。这可能吗?有人能指出我的大致方向吗?
c++ - Windows 运行时 (WP 8) 进程外组件和引发/订阅事件
我用自己的后台线程制作了进程外的 WR/WP8 组件。它在内部处理 SIP 堆栈并在后台线程中运行。它是来自 ChatterBox MSDN 示例的修改代码。 https://code.msdn.microsoft.com/windowsapps/ChatterBox-VoIP-sample-app-b1e63b8b
最后几天我添加了代表来从组件中引发事件。在 C++/CX 中是:
C#代码中有事件订阅:
它构建正常。
但是在调试期间我看到异常:
生成代理存根 DLL。我检查了 .h/.c 文件——它们包含一些事件代码。
这个问题可能是什么原因?
c++ - 如何在进程外客户端中获取免注册 COM 对象代理
我不知道是否有一个 API 可以实现这一点,或者我是否必须自己动手。这是我想要完成的。
我有一个应用程序连接到 NT 服务以启动与另一个 COM 服务器的会话。
- 应用程序,客户端。
- 经纪人 NT 服务;(系统帐户上下文)。
- 会话 COM 服务;(系统帐户上下文,将根据需要模拟用户)。
会话服务器将为每个连接到 NT 服务的应用程序实例提供一个运行实例。应用程序可以请求会话服务器加载 COM 库 DLL,并从会话服务器中的那些 DLL 托管对象和服务。DLL 通过免注册激活进行注册。
从会话服务器创建对象并将它们传递回应用程序就可以正常工作,只要它们是 IDispatch 派生的,这是整个系统的要求,因为预计脚本语言可以使用它,这就是请求的接口。C++ 应用程序也可以使用托管在会话服务器中的对象。但是 IDispatch 是一个在 C++ 中处理的过于冗长的接口。
我的问题是这样的:
鉴于托管的 DLL 具有应用程序确实知道的双重自定义接口,并且应用程序可以通过 ITypeInfo 读取有关这些接口的类型信息;如果我可以提供 IDispatch 接口,是否有一个 API 在运行时将创建一个代理来模仿原始自定义接口,该接口还携带 ITypeInfo 信息。所有代理需要调用 IDispatch 接口,但在 C++ 中显示为自定义接口。更理想的解决方案是使用相同的代理,即默认的 OLE 自动化代理,DLL 在其清单中注册。
我无法为 DLL 注册代理/存根,因为多个应用程序可能具有相同的模块,但版本不同,因此使用免注册激活。
etw - 未使用进程外语义日志更新 EventEntry 的架构
我编写了一个自定义 EventSource 类并添加了一个日志方法,如下所示:
我使用 SemanticLogging-svc.exe -c 来启动跟踪事件服务,在执行这个 cmd 之前我还将 SemanticLogging-svc.xml 配置为
然后我开始调用 Test() 方法。flatFileSink 将第一次将事件的正确级别记录为警告。但是,在我将属性中的Test()方法的级别更改为Critical并调用Test()方法后,flatFileSink仍然会将级别记录为Warning。这是完全错误的!我知道这是 EventEntry 的架构,它是 OnNext 方法参数。但是如果我使用进程内监听器,级别可以更新为正确的关键。
那么,如果我使用进程外,为什么级别仍然是旧级别?ETW有什么问题吗?看起来机器中有一些缓存。并且无论是在性能监视器中停止和删除事件跟踪会话,还是重新启动计算机,都无法清除此缓存。我真的很想清除这个缓存,但我不知道怎么做。
而且我知道,如果我更改了 Event Attribute 中的 Version 或将 EventSource Name 更改为另一个,则会为进程外更新级别。但我认为这不是一个好方法,因为我们可能忘记更改版本。
那么,有人可以帮助我吗?
com - C++ Builder:进程外 COM 服务器
可能我错过了一些非常基本的东西,但我还没有找到堆栈溢出/谷歌/等的解决方案。
如果这有什么不同,我需要在 64 位的 C++ Builder (XE7) 中编写一个 COM 服务器。作为第一步,我可以创建一个进程内 COM 服务器,它可以编译、工作并正确注册。但是我需要一个进程外 COM 服务器,而我在转换中迷失了方向。(需要:使用进程外 COM 的外部要求,我无法更改。)
我从文档(http://docwiki.embarcadero.com/RADStudio/Seattle/en/COM_Servers)中了解到:我很可能应该正确设置“线程模型”,并且可能需要进行一些其他修改(http: //docwiki.embarcadero.com/RADStudio/Seattle/en/COM_Object_Wizard),但无论我尝试什么,我都没有从中获得 EXE。
我真的很感激一个例子的指针,或者几个词在哪里有本质的区别,或者我应该更多地研究哪个对话,等等。
vb.net - 进程外 COM 服务器和事件处理
因为我正在制作一个进程外的 VB COM 服务器,以便在客户端 VB 应用程序中使用它,并为应用程序带来稳定性。
以下来自 MSDN 的示例代码链接帮助我制作了 VB COM 服务器,并且我成功地从该 COM 服务器公开了方法、属性和事件。https://code.msdn.microsoft.com/windowsdesktop/VBExeCOMServer-a5b9f49f
我使用以下代码在客户端应用程序中使用了 COM 服务器,它在属性和函数调用中运行良好,但是,当我尝试处理由 COM 服务器公开的事件时,出现编译时错误:
//编译错误!!!TestEvent 不是“对象”的事件
为了解决此编译时错误,我尝试使用以下代码将 Object 类型强制转换为“BaseControllerSimple”类型,但随着该更改,我在运行时遇到异常:
//例外!无法将类型为“System.__ComObject”的 COM 对象转换为类类型“MeridiaAPICOMServer.BaseControllerSimple”。表示 COM 组件的类型的实例不能转换为不表示 COM 组件的类型;但是,只要底层 COM 组件支持对接口的 IID 的 QueryInterface 调用,它们就可以转换为接口。
后来,我尝试在 COM Server 的代码中制作一个接口,并制作了“BaseControllerSimple”类来实现该接口。这是接口和实现它的类的代码片段:
以下是 IBaseControllerSimple 类的代码
定义接口后,我尝试了以下代码:
//异常无法将“System.__ComObject”类型的 COM 对象转换为接口类型“IBaseControllerSimple”。此操作失败,因为 IID 为“{0742DA3D-1CFA-4A3D-A104-35DBECB4EA48}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .
期待解决方案或任何类型的反馈,以帮助我解决处理由 VB COM 服务器公开的事件的问题。提前致谢。