问题标签 [side-by-side]

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

com - 使用 COM 服务器的并排错误,安装了 C++ 可再发行组件

我有一个尴尬的情况,我有一个必须在 x64 应用程序中使用的 32 位库。为了解决这个问题,我创建了一个 COM 服务器应用程序来处理 32 位和 64 位进程之间的通信。

一切都内置在 Windows 7 上的 VS2005 版本8.0.50727.867中。我注意到的一件事是我的版本与 SP1 的 redist 版本 ( ) 不匹配8.0.50727.762。我认为这是由于 VS2005 的 Vista 更新,因为我找不到更高版本的 redist。

它适用于我的开发机器,但不适用于我的 Win7 x64 机器。因此,错误是:

“C:\Program Files\ScanScope\Controller\ACBarOmniServer.exe”的激活上下文生成失败。相关程序集 Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195" 找不到。请使用 sxstrace.exe 进行详细诊断。

在此之前,我已经安装了 VS2005 C++ 可再发行包。我尝试再次安装它,没有运气。我翻遍了我的 Winsxs 文件夹,果然,这个版本不见了。

当我从这里运行 redist 安装程序时,我会在我的 sxs 文件夹中获得以下版本的 CRT:

  • 8.0.50727.42
  • 8.0.50727.762
  • 8.0.50727.4053
  • 8.0.50727.4940

当然,我需要版本8.0.50727.6195

我已经设置了所有我可以静态链接的东西(即 /MT,静态链接到 MFC,没有链接到 ATL),但其他的东西取决于 C 运行时的动态版本。

我使用 sxstrace 没有运气。我开始跟踪,启动我的程序,得到错误,结束跟踪,然后将其解析到不同的文件中。解析后的文件完全是空的。

一件有趣的事情要注意;当我在 Win7 机器上运行 redist 安装程序时,它会在一两秒内完成并消失。现在,我确实看到它安装在添加/删除程序中,并且确实将文件夹添加到 sxs 文件夹中,但这让我觉得很奇怪。

如果有人对此帮助有任何经验,将不胜感激。如果您需要我遗漏的任何信息,请告诉我。

0 投票
1 回答
496 浏览

.net - 如何从 WPF 中的电话线获取来电显示?

我试过 Tapi3 in WPF,但它给了我以下错误:

无法加载文件或程序集“ITapi3.dll”或其依赖项之一。应用程序无法启动,因为它的并排配置不正确。

0 投票
7 回答
99814 浏览

c++ - 当我在一台机器上开发 EXE 并在另一台机器上运行时,为什么安装 vcredist_x86.exe 不能修复 SideBySide 错误?

问题

我在 Windows XP Professional Version 2002 Service Pack 3 上使用 Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) 编写了一个名为“Foo”的 C++ 项目。我将该项目构建到 Foo.exe 中。然后,我将文件 Foo.exe 复制到 Windows Server 2003 Enterprise Edition Service Pack 2。当我尝试运行它时,它失败并出现此错误,

在事件查看器 > 系统中,记录了三个事件。

事件 ID:32;资料来源:并排

事件 ID:59;资料来源:并排

事件 ID:59;资料来源:并排

安装 Microsoft Visual C++ 2005 Redistributable 没有修复它

  1. 从http://www.microsoft.com/download/en/details.aspx?id=3387下载了 vcredist_x86.exe
  2. 安装它。安装程序创建了一个名为C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.

从“添加或删除程序”中找到该软件的版本是“8.0.50727.42”。

在尝试运行 C:\foo\foo.exe 时,我遇到了与上述相同的错误。

安装 Microsoft Visual C++ 2005 SP1 Redistributable 没有修复它

  1. 从http://www.microsoft.com/download/en/details.aspx?id=5638下载 vcredist_x86.exe
  2. 安装它。安装程序创建了一个名为: 的文件夹C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700

从“添加或删除程序”中找到该软件的版本是“8.0.56336”。

在尝试运行 C:\foo\foo.exe 时,我遇到了与上述相同的错误。

从同一台机器(我正在运行 EXE)复制 CRT DLL 和清单并没有解决它。

  1. 我复制 了msvcm80.dll,从 msvcp80.dll到。msvcr80.dllC:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acdC:\foo
  2. 接下来,我将其复制并重 C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.manifest 命名C:\fooMicrosoft.VC80.CRT.manifest.

清单文件的第四行如下所示:

这次我尝试运行 C:\foo\foo.exe 时,它​​不起作用。我再次使用 DLLC:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700和相应的清单文件重复了这件事。它也没有帮助。我得到了同样的错误。

在这两种情况下,我在事件查看器 > 系统中都遇到了以下错误。

事件 ID:34;资料来源:并排

事件 ID:58;资料来源:并排

事件 ID:59;资料来源:并排

从 Windows XP 机器(我在其中构建 EXE)复制 CRT DLL 和清单并没有修复它。

  1. 我将msvcm80.dll,msvcp80.dllmsvcr80.dllC:\winnt\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700Windows XP 机器(我开发和构建 foo.exe)复制到C:\fooWindows Server 2003(我试图运行 foo.exe)。
  2. 接下来,我将其复制并重 C:\winnt\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest 命名C:\fooMicrosoft.VC80.CRT.manifest.

清单文件的第四行如下所示:

现在尝试运行 C:\foo\foo.exe 时,我遇到了上一节中提到的相同错误。

从 Visual Studio 文件夹复制 CRT DLL 和清单修复了它。

  1. 从Windows XP 机器(我开发和构建 foo.exe)复制到Windows Server msvcm80.dll2003机器(我试图运行它)。msvcp80.dllmsvcr80.dllMicrosoft.VC80.CRT.manifestC:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRTC:\foo

清单文件的第四行如下所示:

这次我可以运行 C:\foo\foo.exe 没有任何问题。

问题

我期望按照第二种方法中的描述安装“Microsoft Visual C++ 2005 SP1 Redistributable”(vcredist_x86.exe)可以修复它。但它没有。从开发机器的文件夹中复制 DLL 和清单文件C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT修复了它。为什么会这样?

构建选项

以防万一,它可以帮助您回答我的问题。这是我从 Visual Studio 项目属性中获取的编译器和链接器选项:

配置属性 > C/C++ > 命令行:

/O2 /GL /D "_MBCS" /FD /EHsc /MD /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt

配置属性 > 链接器 > 命令行:

/OUT:"C:\MixedBag\Release\Foo.exe" /NOLOGO /MANIFEST /MANIFESTFILE:"Release\Foo.exe.intermediate.manifest" /DEBUG /PDB:"c:\MixedBag\release\Foo.pdb" /OPT:REF /OPT:ICF /LTCG /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

0 投票
1 回答
167 浏览

.net - 如何在 .net 4 进程 (SxS) 中强制在 .net 2.0 下执行托管代码

在一些文章中,人们提到“显式运行 sxs”。真的有可能吗?我已阅读有关该主题的几篇文章:http:
//msdn.microsoft.com/en-us/magazine/ee819091.aspx
http://blogs.msdn.com/b/dotnet/archive/2009/06/03 /in-process-side-by-side-part1.aspx
http://msdn.microsoft.com/en-us/library/ee518876.aspx

但目前尚不清楚是否可以强制在 .net 4 进程的旧 .net 版本下执行一段托管代码。

到目前为止,似乎只有 COM 组件需要较旧的 .net,因此 .net 4 clr 将自动启动 SxS 执行。有人可以阐明这个问题吗?

0 投票
0 回答
391 浏览

.net - 使用合并模块部署应用程序 - 并排程序集

我有一个内置于 VS2010 的 WPF 应用程序,但引用了一个内置于 VS2008 的 C++/CLI 库。C++/CLI 库使用 VC90 版本的 CRT 模块(MSVCM90.dll、MSVCP90.dll、MSVCR90.dll) - 项目属性告诉我“使用标准 Windows 库”、“不使用 ATL”和“通用语言”运行时支持 (/clr)”。

在我的开发机器上,一切都正确构建;CRT 模块是从它们在 %WINDIR%/WinSxS 中的位置加载的,每个人都很高兴。但是,当部署到我的没有开发软件的测试机器上时,应用程序似乎找不到这些模块(基于 Dependency Walker 告诉我的内容)。

我已将必要的合并模块添加到我的设置项目中,并且它们安装在与我的开发机器完全相同的位置。只是,在运行应用程序时找不到它们。该应用程序只是在启动时失败,并显示“Windows 正在检查问题的解决方案......”(然后什么也没有退出)。

我错过了什么?

我还尝试在安装项目中添加 VC++ 2010 可再发行组件,以及 .NET Framework 3.5 SP1 客户端配置文件,但它们似乎没有做任何事情。

我尝试在测试机器上运行 sxstrace.exe,但除了显示 exe 正在运行的第一部分之外,我没有得到任何信息。

0 投票
2 回答
2351 浏览

.net - RegFree COM 从 C# 工作,而不是从 VBA 工作

我目前正试图让无需注册的 COM 使用 Excel 作为客户端,使用 .NET dll 作为服务器。目前,我只是试图让概念验证工作,但遇到了麻烦。

显然,当我使用 Excel 时,我不能简单地使用与可执行文件一起存在的客户端清单,所以我正在使用Microsoft.Windows.ActCtx( link )

我将客户端清单、程序集清单和 dll 都放在同一个位置。

不幸的是,在 C# 中起作用的东西似乎在 Excel / VBA 中不起作用,我对原因感到困惑。虽然 C# 测试客户端运行良好,但 VBA 给出了80070002错误,消息Method 'CreateObject' of object 'IActCtx' failed

COMTestObject我有一个 .NET dll (COMTestService.dll) 向 COM ( / ) 公开单个类/接口ICOMTestObject,如下所示:

客户端清单(COMTestService_Client.manifest):

程序集清单 (COMTestService.manifest):

VBA 客户端代码:

C# 客户端代码:

编辑

情节变厚了...只是为了好玩,我编写了一个快速的 COM 可见的 REGISTERED 辅助类来在 C# 中创建对象,然后使用类似于public object CreateObject(string manifestPath, string typeName)Now 的方法将其传回,从 C# exe 调用它有效很好,但从 VBA 调用它失败(80070002 再次,消息:系统找不到指定的文件。)。现在我更迷茫了……

在此先感谢您的帮助,如果我需要提供更多信息,请告诉我,我很乐意提供帮助!

0 投票
1 回答
871 浏览

c++ - VS2005 和 VS2008 的并排清单问题

我有一个在 VS2008 中构建的 C++ 项目。该项目还链接到使用 VS2005 构建的库(DLL + Import lib),从而加载 VS2005 调试 CRT 库(一切都是调试构建)。

当试图运行这个内置于 VS2008 的可执行文件时,由于 VS2005 DLL 没有找到调试 CRT 库,即使我安装了带有 SP1 的 VS2005,我也会在加载时出错。我也检查了 Windows 更新,所以我不确定我还能做些什么。

我该如何诊断这个问题?我查看了 Windows 中的事件查看器,发现它找不到调试 VC80 CRT 库,但这就是我所知道的。我猜这里的某个地方存在版本不匹配,我只是不知道如何解决它,因为我对这个清单/并排的东西不太了解。

我正在构建的操作系统是 Windows XP 32 位。我安装了 VS2008 SP1 和 VS2005 SP1(所以所有调试清单/CRT dll 都应该可用)

0 投票
1 回答
2649 浏览

.net - 由于缺少 Microsoft.VC80.CRT v8.0.50727.6195 导致应用程序崩溃

我编写了一个 C# 应用程序来从火线相机中获取图像。我已经安装了相机供应商的 SDK,其中包括火线驱动程序和 SDK dll (.NET)。SDK dll 在安装过程中部署在 GAC 中。

我在应用程序中引用的 SDK dll 依赖于 Microsoft.VC80.CRT v8.0.50727.6195。我将清单文件和 dll msvcr80.dll、msvcm80.dll 和 msvcp80.dll 复制到与我的应用程序相同的文件夹中,我尝试运行我的应用程序,但 .NET 运行时仍然无法找到 VCRT dll,我的应用程序正在崩溃。

我收到以下异常:“无法加载文件或程序集‘CameraSDK.dll’或其依赖项之一。应用程序无法启动,因为它的并排配置不正确。请查看应用程序事件日志或使用命令行 sxstrace.exe 工具了解更多详细信息。(来自 HRESULT 的异常:0x800736B1)。

我搜索了一下,发现我需要安装 Microsoft Visual C++ 2005 Service Pack 1 才能获得 VCRT v8.0.50727.6195。我下载并尝试安装 VCRedist 但它没有安装 dll。我的机器有 VS2008 和 VS2010,我认为 VCRedist 安装程序在我的机器上找到了一个最新版本,它跳过了安装。

如何让我的应用程序在本地目录中查找依赖的 dll?任何帮助表示赞赏。谢谢。

0 投票
1 回答
1029 浏览

c++ - 我可以修改并排程序集搜索顺序吗?

我有一个 Windows、C++ 软件项目(使用 Visual Studio 2005、SP1 构建),它具有以下(简化的)文件布局:

binutils目录中都有各种可执行文件。这些可执行文件中的每一个都依赖于我们存储在bin中的并行程序集(C++ 运行时 DLL),但出于各种原因,我们将它们隔离到这些单独的文件夹中(例如,utils文件夹中的 exe 是补充工具到我们的主要应用程序,并且不经常运行)。这种文件组织的直接结果是,utils文件夹中的应用程序无法在尚未安装适当的并行程序集的系统上运行(它们失败并显示通常的“系统无法执行指定的程序”错误信息)。

我的问题:有没有办法告诉utils文件夹中的应用程序明确地在..\bin文件夹中查找适当的并排程序集?Microsoft的Assembly Searching Sequence文章没有提到这是否可能。有没有一种聪明的方法可以解决这些应用程序的运行时要求?

我看到的潜在选择:

  1. 将并行程序集的副本放入utils文件夹中。这可以在运行时完成(以防止我们的应用程序安装包膨胀),但看起来有点脏。
  2. 静态链接运行时 DLL。我不想这样做!
  3. 让最终用户安装通常的可再发行包。我也不想这样做。
0 投票
1 回答
11596 浏览

c# - 尝试为 SxS C#.NET COM DLL 调用 CoCreateInstance 时出现 HRESULT 0x80070002 (FILE_NOT_FOUND)

我正在尝试从本机 COM 客户端中的 C#.NET DLL 创建一个 COM 对象。这是 C#.NET 代码

如果我告诉 Visual Studio 为 COM 互操作注册它并调用 CoCreateInstance,它会按预期工作。

现在我想使用相同的 DLL 作为免费注册的并行 COM。我将依赖项添加到我的应用程序清单

并创建一个文件 NetTestCom.X.manifest

现在,当我尝试调用 CoCreateInstance 时,我得到 HRESULT 0x80070002。应用程序、DLL 和清单都在同一个目录中。