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

c++ - 检测构建机器上引入的新依赖项

我们尽量不要求我们的用户拥有所有最新的 Microsoft 补丁。我们的一些客户对这些 Windows 机器使用高度受控的环境 - 通常在应用更新之前涉及繁琐的审批程序,有时,这些机器会远离他们的 LAN。我们尝试指定最小的 Windows Service Pack,然后在我们的安装程序包中提供所需的任何其他内容。

我们目前的做法是仅在有动机进行手动更新时才更新构建机器 - 并希望我们不要忽视应用程序依赖项的新引入版本。不幸的是,有时 Windows/Microsoft 更新会在后期开发阶段在我们的构建机器上运行,并且会在没有立即检测到的情况下引入新的依赖项。

您是否有关于更好地处理此问题的实践和策略的建议,可能包括自动检测新引入的版本依赖项,尤其是对于 Visual Studio 本机 C++ 和 .NET 项目?

0 投票
1 回答
173 浏览

c++ - 应用程序无法从 WinSxS 加载 Win32 程序集

我有一个 Win32 程序集(我的 .NET 代码上的 C++/CLI 包装器),它应该安装在 WinSxS 中,并且应该由使用 API 的客户端应用程序从该位置引用。我对如何在 WinSxS 中安装 Win32 程序集进行了一些研究,最终能够通过使用 mainfest 和目录文件来完成它。

现在的问题是我无法使用我为测试目的创建的控制台应用程序中的程序集。我<dependency>在 exe 清单中添加了一个部分来引用程序集(如下所示),但它不起作用。

exe 失败并显示错误消息:程序无法启动,因为您的计算机中缺少 MyAssembly.dll。尝试重新安装程序以解决此问题。

在检查 Procmon 时,似乎 exe 仅在 exe 位置和 Path 环境变量中指定的所有位置中搜索 dll。当我将 dll 的 WinSxS 位置放在 Path 变量中并执行应用程序时,它工作正常。我想知道在生成导致问题的 exe 清单时是否缺少任何其他项目设置。想法?

0 投票
1 回答
508 浏览

c# - 强制应用忽略本地程序集并使用 SxS,反之亦然

我有一个以两种方式部署的应用程序,由管理员亲自使用 WiX 安装程序,或者由没有提升权限的用户使用单击一次安装程序。它依赖于一组旨在以 SxS 方式部署的 3rd 方 dll。但是,由于需要提升权限才能安装到 winSxS,因此单击一次安装需要将文件本地安装到应用程序的 bin 目录中。这在 WiX 安装中也是可能的,并且不会导致任何问题,但是有一个问题......

其他使用同一组 dll 的第 3(或第 4)方应用程序将它们安装到 winSxS 中,当我们的应用程序加载时,它会访问本地版本和 winSxS 中的版本。对于 SxS dll 从非托管资源 dll 加载的资源,这会导致一些奇怪的 UI 损坏。

使事情复杂化的是,来自第 3 方的共享 SxS 集中的所有 dll 都嵌入了一个清单,该清单直接指定了对 SxS 集的依赖。

我尝试将对 SxS 集的依赖添加到应用程序清单中,但问题仍然存在,即访问了两个版本:

但顶无济于事。

我的问题是这样的:

如果机器上没有安装其他应用程序并且 dll 在应用程序 bin 目录中,是否有办法继续成功运行应用程序,同时如果另一个应用程序将 dll 安装到 winSxS 中也可以成功运行。换句话说,我是否可以强制应用程序仅从 winSxS 加载或在本地加载,无论是否存在 dll 都存在于 winSxS 中。

额外信息

应用程序使用 dllImport 访问 dll:

并且 dll 具有嵌入式清单:

SxS 清单如下所示:

有4种情况:

  1. 应用程序没有清单,未安装 SxS -> 应用程序在本地加载 dll(如果存在),否则失败
  2. 应用程序有清单,未安装 SxS -> 应用程序在本地加载 dll,如果存在,否则失败
  3. 应用程序没有清单,存在 SxS ->

    A. 应用程序在本地加载 dll(如果存在),然后 dll 加载来自 SxS 损坏的依赖项

    B.没有本地dll,app失败

  4. 应用程序有清单,存在 SxS ->

    A. 应用程序在本地加载 dll(如果存在),然后 dll 加载来自 SxS 损坏的依赖项

    B. 没有本地 dll,从 SxS 加载应用程序一切正常

我需要做两个场景:

  1. dll 仅在本地文件夹中(在 SxS 中没有)
  2. 本地文件夹和 SxS 中的 dll

我可以完全控制应用程序清单和 dllImport,因此此处需要的任何修改都在我的控制之下。仅在 SxS 中使用 dll 的情况无关紧要。

0 投票
0 回答
837 浏览

visual-studio - Visual Studio:调试 x64 构建的并排错误

我为 VS 2008 进行了全新安装,并确保在安装过程中检查“x64 编译器和工具”。但是,当我对 exe 进行 x64 调试构建时,在尝试运行时会出现并排错误。事件查看器记录以下内容:

sxstrace 显示以下内容:

我的问题是:

1-“信息:未在 WinSxS 中找到程序集。” 为什么安装程序没有将程序集添加到 WinSxS?

2-该文件可以在该"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\amd64\Microsoft.VC90.DebugCRT"位置找到。为什么安装程序在此处不使用它时将其安装在此处?

3-我设法通过从上述位置获取文件并将其放在可执行文件旁边来使程序正常工作。但是解决这种情况的正确方法是什么?

4-这是谁的问题?这是不正确的VS设置吗?

感谢您的关注。

0 投票
2 回答
1333 浏览

wix - 无法从 MSI 安装程序安装托管 DLL 程序集 - 错误 1935 HRESULT=0x800736FD

我正在构建一个托管 DLL,该 DLL 与适当签名的目录一起捆绑在 MSI 中。MSI 安装失败,报告程序集名称、处理器架构等。使用详细日志记录运行 MSIEXEC,显示如下:

MSI (s) (64:DC) [14:31:33:754]:程序集错误:HRESULT 无法转换为相应的 Win32 错误代码。MSI (s) (64:DC) [14:31:33:785]:注意:1:1935 2:{1ADE2A83-E905-4F35-9DD8-61F512CA50E8} 3:0x800736FD 4:IAssemblyCacheItem 5:提交 6:BLAHBLAH, version="10.0.62601.0",type="win32",processorArchitecture="x86",publicKeyToken="5f523ae7e6e1b389" MSI (s) (64:DC) [14:31:33:785]: 装配错误 (sxs):请查看位于 -207342408ndir\logs\cbs\cbs.log 的基于组件的服务日志以获取更多诊断信息。MSI (s) (64:DC) [14:31:33:785]: 注意: 1: 2205 2: 3: 错误 MSI (s) (64:DC) [14:31:33:785]: 注意: 1:2228 2:3:错误 4:MessageError哪里选择Error= 1935 MSI (c) (7C:1C) [14:31:33:785]:字体已创建。Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg Error 1935. 安装程序集 'BLAHBLAH,version="10.0.62601.0",type="win32" 时出错,processorArchitecture="x86",publicKeyToken="5f523ae7e6e1b389"'。有关详细信息,请参阅帮助和支持。HRESULT:0x800736FD。组装接口:IAssemblyCacheItem,功能:Commit,组件:{1ADE2A83-E905-4F35-9DD8-61F512CA50E8} MSI (s) (64:DC) [14:31:48:019]:注:1:2205 2:3:错误 MSI (s) (64:DC) [14:31:48:019]: 注意: 1: 2228 2: 3: 错误 4: SELECT MessageFROM ErrorWHEREError= 1709 MSI (s) (64:DC) [14:31:48:019]:产品:BLAHBLAH v10.0.62601.0 -- 错误 1935。安装程序集 'BLAHBLAH,version="10.0. 62601.0",type="win32",processorArchitecture="x86",publicKeyToken="5f523ae7e6e1b389"'。有关详细信息,请参阅帮助和支持。HRESULT:0x800736FD。组装接口:IAssemblyCacheItem,功能:Commit,组件:{1ADE2A83-E905-4F35-9DD8-61F512CA50E8} 动作结束 14:31:48:InstallFinalize。返回值 3。

查看 Windows/Logs/CBS.log,我可以看到:

2014-10-30 14:31:33,Info CSI 0000000c 执行 1 个操作;1 未锁定/解锁并遵循:安装 (5):标志:0 tlc:[BLAHBLAH,版本 = 10.0.62601.0,pA = PROCESSOR_ARCHITECTURE_INTEL (0),文化中立,VersionScope 中立,PublicKeyToken = {l:8 b:5f523ae7e6e1b389 },类型 = [l:10{5}]"win32",TypeName 中性,PublicKey 中性]) ref:(flgs:00000000 guid:{27dec61e-b43c-4ac8-88db-e209a8242d90} 名称:[l:0]" " ncdata: [l:62{31}]"C:\Windows\system32\msiexec.exe") 指纹:[l:128{64}]"c303b9f117203669bdfdbf904a7f1d45e4767da45615a08eff196fb02d093399" 2014-10-30 14:31:3 错误0000000d@2014/10/30:14:31:33.488 (F) d:\win7sp1_gdr\base\wcp\library\catalog.cpp(263): Error c000038a [Error,Facility=(system),

我看到很多报告指出 HRESULT 0x800736FD 是一个内部错误,并建议运行 Windows 系统更新准备工具。我已经这样做了,但没有什么不同。

这里有一个报告有人遇到同样的问题但没有回应:

https://social.msdn.microsoft.com/forums/windowsdesktop/en-us/5938da72-16a4-46ef-9151-986b4bd6a60b/need-help-in-installing-dll-into-winsxs

我认为托管 DLL 没有任何问题,因为我可以使用 gacutil 手动将其安装到 GAC 中。

这让我发疯。

0 投票
1 回答
1143 浏览

python - 如何在 Python 中从 SXS 加载 C DLL?

这通常通过在与可执行文件一起驻留的清单文件中指定 DLL 依赖项来完成。但是,我不知道如何在 Python 中完成此操作。加载 DLL 不是问题,但要在 SXS 中找到合适的 DLL 来加载才是问题所在。

是否有指定在哪里可以找到 DLL 的标准程序?对于这个例子,我们假设它住在这里:

我真的需要手动搜索c:\windows\winsxs目录以按名称查找我的 DLL,然后检查父目录以查看它是否包含正确的版本?

我只是没有做足够的 Python 项目来了解完成此任务的适当方法。

0 投票
1 回答
162 浏览

windows - 我需要分发哪些文件来替代 MS Visual C++ 2005 ATL 合并模块?

目前我正在分发一个包含三个合并模块的软件产品:

一些客户使用不喜欢这些 MSM 文件的打包技术(我认为是因为他们在写入 WinSxS 时遇到了技术问题)。我可以直接将 dll 文件分发到我的应用程序的 Program Files 文件夹中吗?如果可以,我需要哪些 dll?它只是 atl80.dll 吗?

0 投票
1 回答
1989 浏览

visual-studio-2013 - VS 2013 启动时出错

所以我重新安装了几次Visual Studio 2013,每次我尝试启动它时都会收到这个错误

我运行了 SXStrace 调试,这是输出文件

可能是什么问题呢?不知道要提供什么其他信息...我也尝试运行sfc /scannow但没有任何改变

0 投票
1 回答
785 浏览

c++ - msvcr90.dll 依赖项无法在 windows 8.1 上找到

我正在尝试在 Windows 8.1 64 位机器上构建一个 VC++(VS 2008)OCX(32 位)项目。OCX 构建正常,但在尝试使用 regsvr32 注册时未加载。使用 Dependency Walker 检查二进制文件将 MSVCR90.DLL 显示为缺失的依赖项之一。但是我可以看到这个 dll 在 C:\windows\winSxs 区域下的相应文件夹中可用。无法弄清楚为什么 WinSxS 无法找到 DLL。

报告为缺失的其他依赖项是

  1. API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL
  2. API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL
  3. API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL
  4. API-MS-WIN-CORE-SHUTDOWN-L1-1-1.DLL
  5. EXT-MS-WIN-NTUSER-UICONTEXT-EXT-L1-1-0.DLL
  6. IESHIMS.DLL

知道可能出了什么问题吗?

提前致谢..

0 投票
1 回答
641 浏览

visual-studio - Visual Studio 2012 Debug .exe 需要 Microsoft.VC90.DebugCRT

当我构建调试配置时,.exe 无法启动。

它报告

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

我使用了 sxstrace.exe 工具。它报告以下错误:

错误:无法解析引用 Microsoft.VC90.DebugCRT、processorArchitecture="amd64"、publicKeyToken="1fc8b3b9a1e18e3b"、type="win32"、version="9.0.21022.8"。

我已经阅读了很多与这些并排错误相关的帖子。我尝试安装 Visual Studio 2008 可再发行包,希望将丢失的调试 .dll 安装在 C:\Windows\winsxs 中。然而,我看到

应用程序的调试版本和各种 Visual C++ DLL 不可再分发。

https://msdn.microsoft.com/en-us/library/8kche8ah%28v=vs.110%29.aspx

我该如何解决这个问题?