问题标签 [sxs]

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 回答
264 浏览

.net - 并排在 dll 中

我有以下情况:

  • 用 C# 开发的可执行文件链接一个托管 DLL,该 DLL 调用另一个第三方 DLL(并排加载)。exe 不直接使用第三方 DLL 中的任何对象。

组件之间的关系是:

EXE -->> myDLL >> 3rdPartyDLL

我想只在 myDLL.manifest(用 mt.exe 编译)中设置第 3 方 DLL 的引用,如下所示:myDLL.manifest

但是当我启动 EXE 时它会引发异常,因为它没有找到 3partyDLL。仅当我还将对 3rdPartyDLL 的依赖项插入到 EXE.manifest 中时,它才有效。

但在这种情况下,每次第三方DLL 更改版本(也用于小修复)时,我都需要重新编译 EXE 以将清单嵌入其中。

我试图深入寻找一些具有这种情况的实际示例,但我没有找到任何东西。有没有关于它的参考或实际例子?

0 投票
1 回答
398 浏览

c++ - SxS 清单中的程序集标识名称

我有两个关于激活上下文 API 和 SxS 清单的问题。它们看起来很简单,但我仍然无法为它们找到任何好的答案。

我有两个文件名为 foo.dll 和 bar.dll 的 dll 库,它们都带有嵌入式清单,foo 取决于 bar。有没有办法为这两个分配文件名以外的 assemblyIdentity 名称?例如,如果我希望 bar.dll 的程序集标识为CompanyName.Subsection.bar?如果我像这样更改它的身份-尝试加载 foo.dll 时出现错误"Dependent Assembly CompanyName.Subsection.bar,type="win32",version="0.1.2.3" could not be found"。当然,如果我将名称程序集标识指定为文件名 ( <assemblyIdentity name="bar"),一切正常,但有没有办法使用这些带点的名称?

foo.dll

bar.dll

0 投票
0 回答
102 浏览

c# - 如何在启动时不崩溃的情况下捕获并排 (SxS) 清单加载错误?

我有一个 C++ 应用程序,它使用托管 (C#) 库中包含的控件。

使用无注册表 COM 互操作(SxS 激活)激活控件。

如果托管库丢失,应用程序会立即关闭,并显示一个通用且无用的对话框:

(“无法启动程序 X”、“此应用程序无法启动……等等……等等”)

我想做的是捕捉错误并向用户展示我自己的(希望更有帮助)消息。更好的是,我希望允许应用程序继续加载并禁用实际使用托管库及其控件的少数对话框(只有一小部分主应用程序使用此库)。

不幸的是,SxS 加载程序的错误似乎发生在我的任何代码处理它之前。

我可以捕捉并处理这些错误吗?如果是这样,怎么做?

谢谢!

0 投票
3 回答
37918 浏览

powershell - Sources\SxS”文件夹从哪里获得?

在 PowerShell 中运行此命令时出现错误:

Install-WindowsFeature :在指定服务器上添加或删除功能的请求失败。一个或多个角色、角色服务或功能的安装失败。找不到源文件。

我读过的每篇文章和博客都说需要指定该路径。如何获得对该文件夹的引用?

0 投票
2 回答
449 浏览

vb6 - TABCTL32.ocx 的 VB6 RegFreeCom SideBySide SxS 清单测试

最近几年,我在一些 VB6 程序中添加了配置表单。选项卡控件非常方便地为要管理的各种配置分组不同的类别。

我的开发 PC 是一台运行 Windows XP(32 位)Service Pack 3 的虚拟 PC。我正在使用 Visual Basic 6.0 (SP6) 进行编程。

事实证明,其他用户的 PC,不用于 VB6 编程开发和较新版本的 Windows,并不能立即理解如何处理这个“新奇的”选项卡控件。

tabctl32.ocx 是一个 ActiveX 控件模块,其中包含用于选项卡式对话框控件的 SSTab 控件。像 tabctl32.ocx 这样的非系统进程源自您安装在系统上的软件。

vb6 "regfreecom" 为 ocx 文件自动创建清单

最近,我被提醒,在过去的几年里,我制定了一个处理这个问题的过程:

  1. 创建一个简单的小程序,目的是执行相关控制。
  2. 提供所需的清单和资源文件。
  3. 编译、构建和测试程序。
  4. 构建并使用 NSIS 文件来创建 SxS 安装文件,以便在任何目标 PC 上进行测试。
  5. 使用您的原始 VB6 程序,将您的新清单文件和更改合并到其资源文件中,并继续其构建和测试。

  1. 创建一个小型测试简单程序:

    • 打开VB6【新标准EXE】
    • 在项目属性列表中提供名称:(例如:zTABCTL32)
    • 打开工具箱
    • 项目 > 组件 > [浏览]:TABCTL32.ocx [打开] [确定]
    • 单击刚刚添加到工具箱底部的项目(例如:SSTab)
    • 将 SSTab 添加到表单
    • 在表单属性列表中提供名称:(例如:frmTABCTL32)
    • 在表单属性列表中提供一个标题:(例如:TABCTL32)
    • 保存您的表单和项目(操纵和/或创建适当的文件夹)
    • 设置项目 zTABCTL32 属性 [General] > Startup Object: [Sub Main] > [ OK ]
    • 添加到项目:main_zTABCTL32.bas - (Sub Main - frmTABCTL32.show)
    • 编辑 main_zTABCTL32.bas Sub Main() 以确保正确的表单名称在 .Show 命令中
    • 添加到项目:Module1.bas -(声明)
    • 添加到项目:ReadWritePathFile.bas(读取/写入路径/文件的实用程序)
    • 将代码添加到表单 (frmzTABCTL32)
    • 运行[开始完全编译]

main_zTABCTL32.bas - 子主 - frmzTABCTL32.show ...



Module1.bas - 表单调整大小和图标操作



ReadWritePathFile.bas(读取/写入路径/文件的实用程序)



将代码添加到表单 (frmzTABCTL32)



  1. 提供所需的清单和资源文件。

关闭 VB6 zTABCTL32 项目从项目中删除 zTABCTL32.RES

UMMM.ini

  • 此 .ini 文件位于 Identity 行之后,包含一个依赖文件列表。它们列在 .vbp 文件中(例如: Object={BDC217C8-ED16-11CD-956C-0000C04E4C0A}#1.1#0; TABCTL32.OCX )。

  • 您还可以在 VB6 菜单 > 项目 > 组件...

  • 在该组件表单上,您可以选择[x] Selected Items Only更轻松地查看列表。

  • 突出显示列表中的每个组件将显示如下:(e.g.: Location C:\ ... \TABCTL32.OCX )

  • 在 .ini 文件中,我指定了依赖文件的路径,因为它没有存储在本地 Project 文件夹中。



UMMM.bat



有没有办法在 Program.exe.manifest 的 UMMM(无人参与的 Make My Manifest)创建中指定 File Name=?


zTABCTL32.exe.manifest我用记事本编辑了结果并更改了:

从: <file name="..\..\..\..\WINDOWS\system32\TABCTL32.ocx">
到: <file name="Dependencies\TABCTL32.ocx">



MT.bat - 这不适合我吗?
我的参考是:https ://docs.microsoft.com/en-us/windows/win32/sbscs/mt-exe



资源文件没有创建?我不知道 [#] Resource_ID (1) 是什么?



相反,我使用 ManifestCreatorv2.0.3



  1. 编译、构建和测试程序。

    • 在 VB6 zTABCTL32 项目中,开始完全编译:运行正常
    • 在 VB6 zTABCTL32 项目中,文件 -> 制作新的可执行文件:
    • 保存项目

在其项目文件夹中运行 zTABCTL32.exe
[Run-Error 7 out of memory?]


  1. 构建并使用 NSIS 文件来创建 SxS 安装文件,以便在任何目标 PC 上进行测试。

安装在 WinXP(32) 上运行正常
安装在 Win7(64)上运行正常
在 Win10(64) 上安装运行正常


  1. 使用您的原始 VB6 程序,将您的新清单文件和更改合并到其资源文件中,并继续其构建和测试。
0 投票
1 回答
132 浏览

dependencies - 有没有办法在 Program.exe.manifest 的 UMMM(无人参与的 Make My Manifest)创建中指定 File Name=?

有没有办法在<File Name=... >创建 Program.exe.manifest 时调整 UMMM.ini 文件和/或 UMMM.bat 文件以在 \Dependencies 子目录中指定?

回复:vb6“regfreecom”为 ocx 文件自动创建清单

回复:针对 TABCTL32.ocx 的 VB6 RegFreeCom SideBySide SxS 清单测试

使用 UMMM.ini 文件,例如:

和一个 UMMM.bat 文件,如:

然后编辑生成的 .exe 清单文件:

从:<file name="..\..\..\..\WINDOWS\system32\TABCTL32.ocx">
到:<file name="Dependencies\TABCTL32.ocx">


是的, https://github.com/wqweto/UMMM/issues/16中的讨论是在同一个球场。
我确实调整了 UMMM.vbp 以重定向SysWOW64System32.
但这就是我想去的地方。也许如果我有耐心,他们会想出一个解决方案。

这是运行良好的最终 Program.exe.manifest:

我的努力是小规模的,而不是生产。


wqw,谢谢大家的努力。

我很尴尬地说,一开始我并没有按照字面意思理解你的指示。
这是 .ini 文件(有效!):

这是 .bat 文件:

这是相应文件夹中生成的清单文件:

这一切都做到了!谢谢你。

0 投票
0 回答
113 浏览

winapi - Windows 似乎无法识别外部清单

我正在为我编写的一个非常简单的程序使用外部清单,program.exe. program.exe.1.manifest我在同一目录中有一个外部清单。这些是内容:

现在,简单程序只需调用LoadLibraryW(L"payload.dll"). 位于payload.dll系统Windows目录中,但是,我正在尝试从桌面上payload.dll调用的文件夹中加载一个版本。source这在我将清单直接嵌入程序时有效,但在它是外部清单时无效。为什么外部清单不起作用?

0 投票
0 回答
115 浏览

c# - STA->MTA 的 COM 注册免费 (SxS) 和代理存根

我正在尝试从 C#(作为插件)使用我的 C++ COM API(加载在 C++ 应用程序中)而无需任何注册。 我按照本教程中的步骤进行操作

所以我所做的是:

  1. 在启动时从我的 C++ 应用程序创建激活上下文。我将我的 COM API 清单文件传递给 CreateActCtx 并通过 ActivateActCtx 启用它
  2. 我的 C# 插件由我的 C++ 应用程序加载(在自定义 AppDomain 内)
  3. 在我的 C# 插件中,我正在尝试 3 种不同的场景。
  • 第一个是在应用程序主线程内创建 COM 对象 --> 这是有效的

  • 第二种是在一个单独的 STA 线程中创建 COM 对象并转换 COM 对象 --> 这是有效的

  • 最后一种情况是在一个单独的MTA线程中创建 COM 对象并强制转换 COM 对象。在这里我有一个问题。我能够创建一个对象,但我无法投射它。我收到了异常,例如:

所以下面,代码是我用来测试的代码

另一个奇怪的行为是如果我取消注释我的 STA 测试。两个测试都可以!所以我不知道会发生什么。看来我有一些没有正确初始化的东西。

你知道发生了什么或我应该检查什么吗?为什么 STA <--> MTA 机制似乎没有加载comInterfaceExternalProxyStub配置?

在此先感谢您的帮助 ;)