- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试使用免注册 COM 来运行一个相当复杂的方案。
这并不是说它不起作用,而是我遇到了一种令人困惑的情况,似乎我应该直接在应用程序上下文中激活程序集依赖项的 list ,而不是让应用程序上下文指向依赖项组装。
用example project MS themselves publish来解释是相当容易的。 :
通常,您有一个应用程序、一个应用程序 list 、一个(服务器)dll 及其程序集 list 。这些对应什么the example gives :
dependentAssembly
的SideBySide.X)
现在,一种标准情况是将客户端应用程序 list 嵌入到客户端可执行文件中,然后使用 DLL 及其外部 list 文件。
现在,如果出于某种原因在编译时无法得知正确的应用程序 list ,您可以在运行时通过 Activation Context API 加载 list 文件。 .
这就是令人困惑的地方:
根据本文,客户端应用程序现在直接将其激活上下文切换到程序集 list :
If you look at the _tmain function in client.cpp ... a new section of code that initializes the activation context as follows:
actCtx.lpSource = "SideBySide.X.manifest";
我对此进行了交叉检查,它还可以动态加载包含来自 client.exe.manifest
的信息的文件,即仅引用 SideBySide.X,然后继续此操作激活上下文 - 当我们将正确的应用程序 list 嵌入到可执行文件中时,它也对应于正在使用的 ActCtx。
也就是说,actCtx.lpSource = "client.exe.manifest";
也可以工作。
TL;DR 直接激活应用程序代码中“包含”程序集 list 的激活上下文(如果有)意味着什么.
从文件加载 list 时应该这样做吗?(如果是这样,为什么我们不能在编译时已知的情况下直接将程序集 list 嵌入到可执行文件中.)
<小时/>注意:(这确实应该是对 @Eric Brown 答案的评论,但它变得相当冗长)
linked article很好地解释了两种 RT_MANIFEST
资源类型,但对于 regFreeCOm,它留下了一些 Unresolved 问题。我将引用一些令我震惊的引言:
ISOLATIONAWARE_MANIFEST_RESOURCE_ID is used primarily for DLLs. It should be used if the dll wants private dependencies other than the process default. ... the NT library loader checks to see if the dll has a resource of type RT_MANIFEST, ID ISOLATIONAWARE_MANIFEST_RESOURCE_ID. If it does, the loader calls CreateActCtx with the resource, and use the generated activation context to probe the dll's static dependencies.
我理解这意味着 RT_MANIFEST/2 的唯一点是让静态 DLL依赖加载器找到正确的用于解决DLL依赖关系的资源。 (不是 COM 依赖项,请参见下文。)
Sometimes, you want to use the activation context outside of probing the dll's static dependencies. You can define macro ISOLATION_AWARE_ENABLED when you compile the module.
When ISOLATION_AWARE_ENABLED is defined, Windows re-defines certain APIs. For example LoadLibraryExW is redefined to IsolationAwareLoadLibraryExW.
... Not all APIs affected by activation context are wrapped. For example, ..., and neither is any of the COM APIs.
所以,总结一下:我认为 RT_MANIFEST 机制主要与 regFreeCOM 正交,因为 COM 根本不关心它的激活上下文来自哪里,并且没有针对 regFreeCOM 的内置帮助。隔离意识。
最佳答案
是的,这就是应该如何完成的,并且您可以将程序集 list 嵌入到可执行文件中(即资源部分)。这就是 RT_MANIFEST资源类型用于。有two default types of manifest resources
ID CREATEPROCESS_MANIFEST_RESOURCE_ID
(1),在流程创建期间使用,ID ISOLATIONAWARE_MANIFEST_RESOURCE_ID
(2)、DLL加载时使用。 有几个用途(主要围绕单击一次部署)说明了使用 RT_MANIFEST 在附属 DLL 中嵌入免注册 COM list 的能力。特别是,如果 DLL 具有 CREATEPROCESS_MANIFEST_RESOURCE_ID,则也将使用该 list 。
这里有一个例子似乎是一件好事。
给定
如果 sidebyside.dll 具有 ID 为 1 (CREATEPROCESS_MANIFEST_RESOURCE_ID) 的 RT_MANIFEST 资源,其中包含相应的免注册 COM 条目,并且 client.exe 具有 ID 为 1 且具有 <file>
的 RT_MANIFEST 资源。入口为sidebyside.dll,那么Win32将自动处理免注册COM管理。
Part 8 of the example article强烈暗示了这一点,而且我已经在许多内部项目中看到了这一点。
关于winapi - 将程序集 list 直接加载到应用程序上下文中是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19381348/
出现以下错误 Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable D
在调试应用程序时出现以下错误。 The CLR has been unable to transition from COM context 0x3b2d70 to COM context 0x3b2
在 GAE Go 中,为了记录,我们需要使用 appengine.NewContext(r) 创建一个新的上下文,它返回 context.Context。 如何使用此上下文在请求范围内设置/获取变量?
我想使用 Puppeteer 从放置在页面上 iframe 内的选择器中获取数据,该页面在与其父框架域不同的域上运行。因此,我不是任何域的所有者 - 无法使用 frame.postMessage。 试
我正在尝试获取可用的应用程序上下文并想切换到 webview 上下文,但 appium 仅获取 Navive App。 应用程序还启用了 WebView。 Appium 版本:1.10.1 Chrom
这个问题在这里已经有了答案: How to fix this nullOk error when using the flutter_svg package? (7 个回答) 7 个月前关闭。 当我尝
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
这是代码 obj = { a: 'some value'; m: function(){ alert(this.a); } } obj.m(); 结果是'som
我正在尝试做类似的事情 $(".className").click(function() { $(this).(".anotherClass").css("z-index","1");
var User = { Name: "Some Name", Age: 26, Show: function() { alert("Age= "+this.Age)}; }; fun
我目前正在使用我见过的常见 Context 模式,它允许子组件通过传递修饰函数来更新父组件的状态(即 Provider)通过共享的 Context。 我遇到的问题是,修改函数只引用原始状态,不引用最新
有没有办法让 React Context类型安全与流类型? 例如: Button.contextTypes = { color: React.PropTypes.string }; 最佳答案 不幸
我想知道是否有一种方法可以为不同的功能使用不同的上下文类。 我希望有一个功能使用 MinkExtensions 进行浏览器测试,另一个功能使用和 HTTP 客户端(如 Guzzle)进行 API 测试
我有这个配置文件 apiVersion: v1 clusters: - cluster: server: [REDACTED] // IP of my cluster name: stag
我在实现非抢先式调度时遇到了用于初始化TCB的代码。 typedef struct TCB_t { struct TCB_t *next; struct TCB_t
我想将一个函数设置为数组中每个元素的属性,但使用不同的参数调用它。我想我会使用匿名函数来解决它: for ( var i = 0; i < object_count; i++ ) { obje
这个问题已经有答案了: How to access the correct `this` inside a callback (15 个回答) 已关闭 7 年前。 我正在做一些练习,但我在管道方法中丢
我正在尝试通过 Java 和 Android Studio 学习和制作 Android 应用程序。我对Java的了解程度是两年前几个小时的youtube学习和大学基础类(class)。不过我确实知道如
我在(这个)上遇到了问题。错误ImageView无法应用。我在 fragment 类中执行此代码。 ViewFlipper v_flipper; @Nullable @Override public
我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖性的情况下创建它(不是对 Windows,也不是某些包[SDL,SFML,GLUT])?只允许使用没有外部库的库,就像
我是一名优秀的程序员,十分优秀!