问题标签 [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 投票
5 回答
1131 浏览

windows - 生成小型 Windows 二进制文件

在开发和部署本机 Windows 应用程序时,我经常需要安装运行时才能运行我的二进制文件,或者将库与我的二进制文件静态链接。例如,在使用 Visual Studio 2008 构建“Win32 控制台”项目后,尝试在新的 Windows 7 映像上运行程序会导致:

应用程序无法启动,因为它的并排配置不正确。请查看应用程序事件日志或使用命令行 sxstrace.exe 工具了解更多详细信息。

StackOverflow上的其他帖子中已经提出了类似的问题。

如何开发不需要目标操作系统上尚不存在的运行时的应用程序(即不需要安装可再发行包或私有/共享的并行程序集)?如何避免使用 msvc[mpr]90.dll 而只使用 \windows\system32*.{dll,sys} 中的 Windows API?

我正在考虑从演示场景中出来的代码行,但这通常不可用。

0 投票
1 回答
2079 浏览

winsxs - WinSxS 如何将 DLL 名称解析为 DLL 位置?

如果我将一个模块链接到使用 WinSxS 部署的 mydll.dll,我的模块中的 PE 标头将简单地引用“mydll.dll”。Windows如何在运行时确定,首先这个依赖应该通过WinSxS加载,其次它在什么程序集中?

0 投票
2 回答
3031 浏览

visual-studio - 由于 msvcr90.dll 尝试加载 FlsAlloc 导致的 XP 部署问题

我在 Windows 7 x64 上使用 VS2008 SP1a (9.0.30729.4148) 构建了一个不想在 XP 下启动的应用程序。

消息是The application failed to initialize properly (0x80000003). Click on OK to terminate the application.。我检查depends.exe并发现msvcr90.dll确实尝试FlsAlloc从 KERNEL32.dll 加载 - 而 FlsAlloc 仅从 Vista 开始可用。我确定它没有被应用程序使用。

如何解决问题?

SxS 包已经安装在目标机器上 - 事实上我有 9.0 SxS 的所有 3 个版本(初始版本、sp1 和 sp1+安全补丁)

应用程序是用_BIND_TO_CURRENT_VCLIBS_VERSION=1

我还定义了正确的目标 Windows 版本stdafx.h

清单文件

依赖的结果

在地址 0x00400000 开始“c:\program files\app\app.EXE”(进程 0xA0)。成功挂接模块。在地址 0x7C900000 加载“c:\windows\system32\NTDLL.DLL”。成功挂接模块。在地址 0x7C800000 加载“c:\windows\system32\KERNEL32.DLL”。成功挂接模块。在地址 0x785E0000 加载“c:\program files\app\MFC90.DLL”。成功挂接模块。在地址 0x78520000 处加载了“c:\program files\app\MSVCR90.DLL”。成功挂接模块。在地址 0x7E410000 加载“c:\windows\system32\USER32.DLL”。成功挂接模块。在地址 0x77F10000 加载“c:\windows\system32\GDI32.DLL”。成功挂接模块。在地址 0x77F60000 加载“c:\windows\system32\SHLWAPI.DLL”。成功挂接模块。在地址 0x77DD0000 加载“c:\windows\system32\ADVAPI32.DLL”。成功挂接模块。在地址 0x77E70000 加载“c:\windows\system32\RPCRT4.DLL”。成功挂接模块。在地址 0x77FE0000 加载“c:\windows\system32\SECUR32.DLL”。成功挂接模块。在地址 0x77C10000 加载“c:\windows\system32\MSVCRT.DLL”。成功挂接模块。在地址 0x5D090000 处加载“c:\windows\system32\COMCTL32.DLL”。成功挂接模块。在地址 0x76380000 加载“c:\windows\system32\MSIMG32.DLL”。成功挂接模块。在地址 0x7C9C0000 加载“c:\windows\system32\SHELL32.DLL”。成功挂接模块。在地址 0x77120000 加载“c:\windows\system32\OLEAUT32.DLL”。成功挂接模块。加载“c:

我应该提到我已安装 Windows SDK 7 并将其配置为默认 SDK。

0 投票
0 回答
1396 浏览

visual-studio-2008 - 是否可以使 mt.exe 在 Visual Studio 2008 中正确嵌入清单文件?

我发现mt.exe在 VCPROJ 中运行时无法正确创建清单文件并将其嵌入到可执行文件中。

例如,相同的可执行文件在 Windows 7 上加载良好,但在 Windows XP 上加载失败。清单已嵌入且正确。

它失败的地方在里面crtlib.c

这让我去了http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/2d6af19a-6ead-4c00-a896-871a28c5f7f1

我花了很多时间寻找可能的原因和解决方案我修改了项目设置以在 exe 文件之外生成清单。现在它适用于两个系统。

以下是调试版本的示例。

禁用嵌入:

这是启用嵌入的:

如果将它们进行比较,第二个添加了通用控件(我不知道从哪里开始),并且它与 requestedExecutionLevel 标记的语法略有不同。

现在的问题是是否可以使 mt.exe 正确嵌入清单以及如何?

0 投票
1 回答
1231 浏览

windows-7 - 关于如何在 Hyper-V 上使用 Windows 2008 R2 服务器节省空间的想法?

这个问题我很久以前就有了,但还是很困扰。

我使用一些运行 Windows 2008 服务器的虚拟机,主要是演示虚拟机和测试机。由于大多数开发人员都使用它们,因此我宁愿不在这里和那里进行单独的设置,而是维护导出的 VM 和硬盘驱动器映像的目录。

由于并行程序集和 Windows 更新,每台服务器在并行文件夹 (winsxs) 和 Windows 更新中的开销约为 6 - 12 Gig。

假设我有 50 个导出的 VM(及其映像),每个都有大约 3 Gigs 的有效负载数据(操作系统、程序、数据)和大约 12 Gigs 的共享开销,对于所有这些 VM,这几乎是相同的。然后我浪费了 2/3 的存储空间(总共大约 600 Gigs),更不用说当开发人员想要下载新的 VM 快照时在网络上推送这些冗余数据的网络开销。

因此,我正在考虑一种跨多个 VMS 合并 winsxs 文件夹的方法。理想情况下,我想提出一些共享驱动器或其他东西。我什至愿意为此指定一个物理设备。

我意识到 Windows 服务器有最低要求,这些文件不能被删除(http://social.technet.microsoft.com/Forums/en-US/itprovistasetup/thread/9411dbaa-69ac-43a1-8915-749670cec8c3)。

我还找到了关于移动 winsxs 文件夹的帖子,但它似乎不是一个可靠的解决方案。

这听起来甚至遥不可及吗?跨 VM 整合资源的最佳实践是什么?

感谢全能的 stackoverflow 大师的及时关注;-)

0 投票
1 回答
591 浏览

c++ - 当清单使用 762 时,C++ 应用程序是否可能使用 CRT 4053?

我的应用程序是在具有清单 762 的开发 PC 上编译的:

但是,在运行时,在另一台 PC 上,应用程序使用文件的 4053 版本。c:\windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_e6967989\MSVCR80.DLL

在执行我的应用程序的某个地方,我收到一个指向 msvcr80.dll 的运行时错误。我怀疑这个问题可能是因为应用程序在运行时使用了构建期间未使用的 DLL。

如果我检查发布 PC 的 WinSxS 文件夹,我有 CRT 的 762 和 4053 版本。为什么应用程序使用 4053 而不是清单中使用的那个?

谢谢。

0 投票
1 回答
578 浏览

visual-studio-2008 - Windows 更新会破坏 dll?

我正在编译一个使用多个 DLL 并使用 VS2008 编译的项目。最近在我的计算机上编译的 Windows 更新 DLL 停止在其他计算机上工作。

经过一番调查,结果发现它将我正在编译的 CRT 可再发行库从版本“9.0.21022.8”更新到版本“9.0.30729.4148”

从我正在编译的 EXE 的清单文件中可以看出这一点。它包含以下内容:

这意味着它想同时使用两个不同版本的 CRT。我现在正在编译的代码需要第二个版本,而几周前编译的旧 dll 需要第一个版本。

在部署应用程序的计算机中,这成为一个问题,因为它们从名为Microsoft.VC90.CRT而不是从 WinSXS 的本地文件夹中获取 CRT dll。此文件夹不能包含两个不同版本的 dll。

这个问题是否有已知的解决方案,或者我是否需要开始使用新的 CRT 编译所有其他 DLL?

0 投票
4 回答
15627 浏览

crt - 如何在没有完整的 Visual Studio 2005 的情况下安装 VC80CRT 调试运行时?

我无法运行调试 sdk 应用程序,因为它需要 CRT 的 VC 8 和 VC 9 版本。但它只需要Visual Studio 2008 for plugin dev,这正是我所需要的。

如何将 2005 年的调试运行时安装到 Windows7 机器上?我无法弄清楚如何让它们在本地运行应用程序,也无法在没有受信任的安装程序的情况下将任何内容复制到 winSxS 文件夹中。

0 投票
3 回答
1939 浏览

c++ - 如何从 C:\Windows\winsxs 中删除一个文件夹?

我已安装:Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)

并获得以下文件夹:x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91 x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4926_none_508ed732bcbc05

我已经卸载了重新分发包,但他们继续在那里。

我想删除它们,因为我想在不安装任何东西的情况下测试我的程序(在另一台计算机上构建它时我已经包含了这些 dll)。

那么,如何从 C:\Windows\winsxs 中删除这些文件夹?

提前致谢

0 投票
4 回答
6929 浏览

windows - 如何强制本机应用程序使用较旧的 C 运行时

Visual Studio 2010 安装版本 ...4974 的.pdbs 不可用的 VC9 运行时。如何强制我GME.exe使用较旧的 VC9 运行时?

我试过把它放入GME.exe.config

但是,sxstrace 报告:

在 Windows 7 上添加没有其他有用信息的<publisherPolicy apply="no"/>结果<dependentAssembly>ERROR: Activation Context generation failed.

请注意,这仅用于调试我的本地副本,而不是重新分发,因此我不担心安全更新或发布者策略的其他好处。