问题标签 [winsxs]

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

c++ - 如何应对 Vista 和 7 中有关 winxs 合并模块的安装错误 1920?

当我尝试安装我的 msi 包时,仅在 Vista 和 7 中出现错误。“错误 1920。服务 ... (...) 无法启动。验证您是否有足够的权限来启动系统服务”

如果我使用 C++ 9 CRT Winsxs MSM 合并模块构建我的设置,我会在 Vista 或 7 中收到此错误

如果我使用 C 和 C++ 7 运行时库,则不会出现此问题,但我必须使用旧版本的 MS Visual Studio 构建我的 exe。

有谁知道我该如何应对?

0 投票
0 回答
217 浏览

dll - 如何将合并模块替换为?

我在 vista 和 7 上安装我的项目时遇到了问题,我之前在这里提到过。

如何应对 Vista 和 7 中有关 winxs 合并模块的安装错误 1920?

我看到那个问题的帖子可能与我的类似,并且有一个解决方案作者尝试过。 comctl32.msm(合并模块)在 Vista 上失败

我想将我的 .dll 文件替换为 vista 或 7 中的 winsxs 文件夹,我可以这样做吗?如果我可以怎么办?

问候,

土木馆

0 投票
1 回答
45019 浏览

windows-7 - 为什么我没有 Microsoft.VC80.MFC 文件?

有一台安装了 VS2005 的全新 Win7 机器。我试图启动一个 MyApp.exe,它是用 Manifest.bin 中的清单构建的:

...

...

结果是错误消息“应用程序无法启动,因为它的并排配置不正确......

事件查看器详细告诉我原因:

“c:\Xxx\MyApp.exe”的激活上下文生成失败。相关程序集 Microsoft.VC80.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053" 找不到。请使用 sxstrace.exe 进行详细诊断。

所以我浏览了winsxs文件夹,确实所有“4053文件夹”都不见了。然后我编辑 Manifest.bin 并将 4053 替换为 4927。错误在不同版本中再次出现。然后我发现我得到了 msvcr80.dll 的“4927 文件夹”,但没有得到 mfc80.dll 的“4927 文件夹”。

两个问题:

- 为什么 mfc80.dll 没有“4927 文件夹”?

- 如何获取所有“4053 文件夹”?

谢谢和BR-马蒂

0 投票
2 回答
202 浏览

vmware - 在 VMWare 上测试安装

我创建了一个 InstallShield 单可执行安装,其中包括一些用于 VS2005 依赖项的合并模块,这些模块位于 WinSxS 中,例如 VC80.CRT。我远程工作,当我们的测试人员在 XP 机器上运行安装时,它运行良好。我还验证了当在缺少我需要的 VC80.CRT 版本的 XP 机器上运行时,安装确实成功安装了它。但是,当我们的测试人员在 VMWare 映像 (XP) 上运行安装时,不会安装合并模块。

我对VMWare一无所知。有人可以提供一个“嗯,呃!” 对此的回答类型?我很想能够告诉他们我们不能指望它在 VMWare 映像上安装合并模块。或者,有什么方法可以让合并模块在 VMWare 下正确安装?

谢谢!

0 投票
4 回答
1351 浏览

c++ - 并排疯狂 - 在同一台计算机上运行二进制文件

这是我的配置:

  • 计算机 A - Windows 7、MS Visual Studio 2005 为 Win7 兼容性打了补丁 (8.0.50727.867)
  • 计算机 B - 已安装 Windows XP SP2、MS Visual Studio 2005 (8.0.50727.42)

我的项目有一些外部依赖项(预构建的 DLL——在A上构建或从 Internet 下载)、几个从源代码构建的 DLL 和一个可执行文件。我主要在A上开发,那里一切都很好。在某些时候,我尝试在计算机B上构建我的项目,将预构建的 DLL 复制到输出文件夹。一切都很好,但试图启动我的应用程序我得到了

应用程序未能正确初始化 (0xc0150002)....

事件日志包含其中两个:

无法找到依赖程序集 Microsoft.VC80.CRT 并且上次错误是 引用的程序集未安装在您的系统上。

加上稍微有趣的

为 some.dll 生成激活上下文失败。参考错误信息:操作成功完成。

在这一点上,我正在尝试我的 Google-Fu,但徒劳无功 - 几乎所有点击都是关于在安装 Visual Studio 的机器上运行二进制文件。然而,就我而言,可执行文件无法在它们构建的计算机上运行。

下一步是尝试依赖walker,它让我更加困惑-我从同一个盒子上的源代码构建的DLL无法找到MSVCR80.DLLMSVCP80.DLL但是对于这两个DLL,可执行文件似乎没问题,即当我使用依赖walker打开可执行文件时表明MSVC?80.DLL可以找到 s,但是当我打开我的一个 DLL 时,它说找不到。这就是我完全不知道该怎么做的地方,所以我问你,亲爱的stackoverflow :)

我承认我对整个并排的事情有点模糊,所以对该主题的一般阅读也将受到赞赏。

0 投票
2 回答
2106 浏览

windows - 如何使用 WinSxS 清单重定向到旧版本的 DLL?

假设我有一个使用 MSHTML 的应用程序。安装 IE9 beta 会更新 MSHTML,这会破坏我的应用程序。我发现 IE8 dll 的副本仍然存在于 WinSxS 文件夹中,所以也许我可以在不重新编译程序的情况下以某种方式使用它们?WinSxS 能做到吗?

我已经搜索了很长时间,但无法弄清楚如何重定向加载程序以使用 IE8 MSHTML(在 WinSXS 中)而不是 IE9(在 %SYSTEMROOT%\system32 中)。任何想法/示例将不胜感激。

0 投票
2 回答
2643 浏览

c++ - 调试 COM 免费注册 (c++)

我构建了一个使用两个 COM 服务器 dll 的 COM 客户端应用程序;我希望这个应用程序在没有 COM 注册的情况下运行 - 即:winsxs / .manifests

当我尝试从我的客户端应用程序创建我的 COM 对象的实例时,我收到一个(...几乎预期的...)“类未注册”消息。

我以前已经成功过这种配置,但我不知道为什么这个配置会失败。


这里还有一些细节:

  • 我拥有的模块:
    • 一个依赖于 2 个 COM 服务器(dll1.dll 和 dll2.dll)的 MFC 客户端
    • dll1.dll COM 服务器依赖于 dll2.dll
    • dll2.dll 没有 COM 依赖

我拥有的 COM 对象:

  • 在 dll1.dll(.idl 语言)中

-

-

  • 在 dll2.dll 中

-

-

  • 客户电话

-

-

  • client.exe.2.manifest

-

-


在 sxs 激活上下文生成过程中我没有错误: - windows 日志中没有错误(应该意味着我的清单语法是正确的) - sxstrace 没有检测到错误(日志以“信息:激活上下文生成成功。”消息结尾并且不包含错误或可疑消息;此外,我看到我的清单已正确加载)

任何想法?

有没有办法用 sxstrace 更深入地调试 sxs?例如,获取实际注册的 com 或 clr 类的列表???

提前谢谢你

0 投票
2 回答
3529 浏览

winapi - GetFileVersionInfo() 返回错误文件的版本信息

我有一个应用程序需要检查各种系统 EXE 和 DLL 的版本以确定它们是否易受攻击。这是一个本机 C++ 应用程序,它在其清单中不提供任何特定的 WinSxS 链接。在 Windows 7 上,当我在绝对路径(例如“c:\windows\system32\taskeng.exe”)上调用 GetFileVersionInfo 时,我收到“C:\Windows\winsxs\x86_microsoft-windows-taskscheduler-engine_31bf3856ad364e35_6. 1.7600.16385_none_e582a352202e02c8\taskeng.exe"

因此,澄清一下,Windows Explorer 报告的版本 c:\windows\system32\taskeng.exe 是 6.1.7600.16699。GetFileVersionInfo() 报告的 c:\windows\system32\taskeng.exe 版本为 6.1.7600.16385。

如何强制我的应用程序不通过 WinSxS 重定向其文件?

0 投票
1 回答
814 浏览

visual-studio-2010 - Visual Studio 如何在 C++ 项目的清单文件中创建程序集引用?

我有一台新安装的开发机器,装有 Windows 7 和 Visual Studio 2010,Service Pack 1。

在我们的解决方案中,我们有一个由多个应用程序使用的 C++ DLL。

在发布配置中,一切正常,但在调试配置中,当我尝试运行其中一个应用程序时,我收到应用程序无法正确启动的错误对话框。

我发现这是我们 C++ DLL 中 SxS 配置的问题。由于某种原因,DLL 的清单包含以下参考:

而且我的机器上没有安装 VC90 运行时库的调试版本。

由于我们之前遇到过一些类似的问题,因此我们始终确保我们使用的外部库是使用我们用于开发的相同 VS 版本编译的。

但看起来某处有对 VC90 DebugCRT 的引用。我试图在我们的外部库上使用 Dependency Walker 和 PeStudio 来解决这个问题,但我在任何地方都找不到对 VC90 DebugCRT Dll 的任何引用。

实际上,我通过在我们的 Dll 的链接器设置中禁用清单文件的生成来解决这些问题。因此,VC90 DebugCRT 实际上并不是应用程序运行所必需的,但无论如何都会以某种方式拉入。

我现在只是想知道 VS 在构建过程中如何确定要包含在清单文件中的引用以及如何诊断该引用的来源?

0 投票
3 回答
2454 浏览

winapi - 从 32 位进程打开 %SystemRoot%\system32\calc.exe 会重定向到另一个文件。哪个,为什么以及如何?

我目前正在用 C++ 编写一些测试代码,这些代码会混淆 PE 文件以了解其文件格式结构。我的项目设置为编译为 64 位。在我的代码中,我打开 %SystemRoot%\system32\calc.exe 并读取 IMAGE_DOS_HEADER 和 IMAGE_NT_HEADERS 结构。同时,我在 Notepad++ 中使用十六进制编辑器插件打开了相同的 calc.exe。我将代码读取的值与 Notepad++ 进行了比较,发现它们不同。我将 calc.exe 从 System32 复制到 C:\Temp\calc.exe,现在值匹配。

Notepad++ 似乎是一个 32 位应用程序(尚未检查 PE 文件,但由于它默认安装到 Program Files (x86),因此这似乎是一个安全的假设)。

这是 WinSxS 在工作吗?或者还有什么原因造成的?哪个文件实际上被提供给打开 %SystemRoot%\system32\calc.exe 的 32 位应用程序?

只是好奇。提前感谢您对此有所了解。