标签: side-by-side

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

问题

我在Windows XP Professional版本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企业版Service Pack 2.当我尝试运行它时,它失败并出现此错误,

C:\foo.exe
The application has failed to start because the application configuration is incorrect.
Reinstalling the application may fix the problem.
Run Code Online (Sandbox Code Playgroud)

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

事件ID:32; 资料来源:SideBySide

Dependent Assembly Microsoft.VC80.CRT could not be found and Last Error was
The referenced assembly is not installed on your system.
Run Code Online (Sandbox Code Playgroud)

事件ID:59; 资料来源:SideBySide

Resolve Partial Assembly failed for Microsoft.VC80.CRT.
Reference error message: The referenced assembly is not installed on your system.
Run Code Online (Sandbox Code Playgroud)

事件ID:59; …

c++ side-by-side visual-c++

41
推荐指数
1
解决办法
10万
查看次数

WiX项目允许并排安装

我正在为我们的产品创建一个MSI.我希望该产品能够并排安装.这样我就可以先安装1.0.0,然后再安装1.0.1,这样就可以安装两个版本了.

我正在使用WiX创建msi,并想知道如何在Wix中完成这项工作?例如

  • 我是否需要为所有组件创建新的Guids
  • 我如何将版本信息添加到wix或我应该完全重命名我的产品?
  • 如何创建项目以便在wix项目中发布新版本需要最少的更改

问候,Martijn

windows-installer wix side-by-side

15
推荐指数
1
解决办法
3877
查看次数

清单中需要哪些标签才能免费注册COM?

TL; DR是否所有生成的注册表项都regsvr32需要出现在SxS reg-free-COM清单中,反之亦然?


我正在尝试获得免注册的COM用于第三方组件.

关于主题,我发现有提到的几个要素,即可以放入一个清单:

从文档中,我们可以将以下标记添加到清单中以描述COM组件:

  • assemblyIdentity- 据我所知,这真的只是描述了"抽象集会 "
  • comClass - 描述COM类(IID接口).看来,这总是需要的.
  • typelib - 什么时候?
  • comInterfaceExternalProxyStub - 什么时候?
  • comInterfaceProxyStub - 什么时候?

从其他文档HKEY_LOCAL_MACHINE\SOFTWARE\Classes我们可以看到COM注册表项有几个类别:

使用regsvr42来提取我试图注册的dll会产生一个只包含comClass条目,没有typelib或ProxyStub条目的清单.(我交叉检查写的密钥,有问题的DLL pdm.dll,MS的Process Debug Manager只写那些密钥,也就是说,注册表中没有明显的类型库或代理存根信息.)

如果注册表只包含与此相关的信息,comClass则表示此信息在SxS清单中是足够的,或者清单中是否需要其他信息?


另外,我注意到注册表包含a VersionIndependentProgId和a ProgId,其末尾附加了版本号.清单只有一个ProgId条目,文档说明:

progid:与COM组件关联的与版本相关的编程标识符.ProgID的格式是 <vendor>.<component>.<version>.

但文档也说明了这一点

comClass元素可以有<progid>...</progid>子元素,其中列出的版本有关的ProgID.

并且他们说 progid属性应该是版本独立的属性.

那么,放在这里的是什么?当客户端没有请求特定版本时,它是否重要?

c++ com manifest side-by-side regfreecom

15
推荐指数
1
解决办法
2279
查看次数

Visual Studio 2012并排配置不正确

当我运行Visual Studio 2012 Professional时,我得到一个并排配置错误消息.

信息:

"C:\ Program Files\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe

应用程序无法启动,因为它的并排配置不正确.请参阅应用程序事件日志或使用commande-line sxstrace.exe工具获取更多详细信息."

事件簿:

""C:\ Program Files\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"的激活上下文生成失败.依赖程序集coloader80.dll,processorArchitecture ="X86",类型="win32",版本="1.0.无法找到0.0".请使用sxstrace.exe进行详细诊断."

sxstrace.exe: http ://pastebin.com/qgS3Sx8c

我已经安装了vcredist_x86

我正在运行Windows 7 Professional

side-by-side visual-studio visual-studio-2012

12
推荐指数
1
解决办法
2万
查看次数

Java SxS(并排)配置

我正面临一个非常模糊的问题,而我正试图在Windows中运行一个Java应用程序,并排(SxS).

我已经完成了创建java.exe.config和java.exe.manifest文件的所有准备工作,这些文件与JRE位于同一个文件夹中.

当我从命令行调用它时(通过启动.bat文件),应用程序正常运行..bat文件使用SxS配置的Java(这是我运行应用程序的框中唯一的一个)

但是,当我尝试从另一个Java进程(使用Runtime.getRuntime.exec())内部调用它时,或者ProcessBuilder它似乎完全忽略了SxS配置,并且子Java进程抱怨它无法找到COM库,这就是我必须执行SxS的原因.我必须补充说,父Java流程也是由为SxS配置的Java.exe启动的.因此,我认为" Runtime.getRuntime(), ProcessBuilder()"会给我Java SxS加载环境.

使用一些Windows工具(procexp.exe,procmon.exe)进行进一步调试我发现以下内容:当我从.bat文件启动应用程序时,.manifest文件通常由crss.exe读取(因为它应该是).但是,当Java生成另一个进程时,根本不考虑.manifest文件.我能想到的一个可能的问题是,启动进程的Java.exe的当前目录与java.exe.manifest文件所在的目录不同.

我唯一能想到的是java启动器中的错误/问题(或者他们称之为功能).

有没有人有类似的问题?任何人都可以对上述事项有所了解吗?非常感激.

到目前为止,我尝试过以下方法:

  • 从.bat文件中运行java进程.保护正常工作
  • 使用父Java进程调用java进程 Runtime.getRuntime().exec(). DID NOT WORK
  • Invoked the .bat file from a parent Java process using Runtime.getRuntime().exec()
  • Runtime.getRuntime.exec()
  • ProcessBuilder.不工作
  • 使用ProcessBuilder设置.manifest文件所在的当前目录.不工作

java sxs side-by-side

11
推荐指数
1
解决办法
1474
查看次数

如何将清单添加到.NET DLL?

我有一个ac#类库项目,它使用在系统上注册的COM dll.我现在想要将COM dll部署为并排程序集,因此我不必注册它,也不必干扰可能使用不同版本的dll的其他应用程序.

我已经使用add new item菜单将app.manifest添加到c#项目中,但我不确定下一步该做什么.在项目属性/应用程序/图标和清单中,清除了清单下拉列表.我不知道怎么过去.我添加了一个清单文件,为什么它不在下拉列表中?

我有一个适用于C++应用程序的COM DLL的清单,我想我保持原样.现在我需要知道如何为c#项目编辑app.manifest.我将首先添加一个已知良好的依赖元素.但我需要一个关于如何设置它的教程,我不认为它覆盖在任何地方.

我正在使用VS2008

.net dll manifest side-by-side

10
推荐指数
1
解决办法
2万
查看次数

为VS2008编译的二进制文件需要DebugCRT并行组装,在VS2010中不起作用

我正在使用VS2010处理使用Havok的项目,而最新版本只有VS2008和更早版本的二进制文件.VS生成的嵌入式清单包含以下内容

<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
Run Code Online (Sandbox Code Playgroud)

由于VS显然不再使用从2010开始的并排程序集(源代码),因此我的winsxs目录没有安装调试crt程序集,并且vs可再发行程序包不会安装调试版本.如果我们使用嵌入式清单编译使用Havok的dll,则加载dll的应用程序无法启动.

我运行sxstrace并得到以下内容:

INFO: Begin assembly probing.
INFO: Did not find the assembly in WinSxS.
INFO: Attempt to probe manifest at G:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at D:\Projects\GTS new\bld\Debug\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at D:\Projects\GTS new\bld\Debug\Microsoft.VC90.DebugCRT.MANIFEST.
INFO: Attempt to probe manifest at D:\Projects\GTS new\bld\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.DLL.
INFO: Attempt to probe manifest at D:\Projects\GTS new\bld\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST.
INFO: Did not find manifest for culture Neutral.
INFO: End assembly probing.
ERROR: Cannot resolve reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8".
ERROR: …
Run Code Online (Sandbox Code Playgroud)

manifest side-by-side visual-c++

10
推荐指数
1
解决办法
8742
查看次数

RegFree COM来自C#,不在VBA工作

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

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

我将客户端清单,程序集清单和dll都放在同一位置.

不幸的是,在C#中工作的东西似乎不适用于Excel/VBA,我很难理解.虽然C#测试客户端工作正常,但VBA发出80070002错误,对象'IActCtx'的消息方法'CreateObject'失败.

我有一个.NET DLL(COMTestService.dll)暴露COM(COMTestObject/ ICOMTestObject)的单个类/接口,如下所示:

[ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("EEE50CDF-D8EC-4F38-B986-C231EC45171E")]
public interface ICOMTestObject
{
    [ComVisible(true)]
    string GetString(int number);
}

[ComVisible(true), ClassInterfaceAttribute(ClassInterfaceType.None), ComDefaultInterface(typeof(ICOMTestObject))]
[Guid("6E54611B-8B56-49E0-9415-E59B0774A4BE")]
public class COMTestObject : ICOMTestObject
{
    public COMTestObject()
    {
    }

    public string GetString(int number)
    {
        return string.Format("The number is: {0}", number);
    }
}
Run Code Online (Sandbox Code Playgroud)

客户端清单(COMTestService_Client.manifest):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly 
    manifestVersion="1.0" 
    xmlns="urn:schemas-microsoft-com:asm.v1" >
    <assemblyIdentity
        name="client"
        version="1.0.0.0" />
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                name="COMTestService"
                version="1.0.0.0" 
                processorArchitecture="msil" /> …
Run Code Online (Sandbox Code Playgroud)

.net com vba side-by-side regfreecom

10
推荐指数
1
解决办法
2153
查看次数

什么是并排组件?

在尝试将Debug安装集安装到测试计算机时,我今天第一次遇到了并排程序集.我最终管理了它,但留下了几个问题:

  1. Whare是Side-by-side汇编?
  2. Windows如何以不同于其他程序集的方式处理这些程序集
  3. 依赖于并排组件的应用程序如何处理这些与普通程序集不同的方式
  4. 在什么情况下可能有人想要创建一个并排的程序集?

.net assemblies side-by-side

8
推荐指数
1
解决办法
3859
查看次数

与C#和VBA并排COM互操作

我不是在谈论从C#调用VBA COM ......反过来说!

我想要做的是在MS Access中使用VBA调用C#库而不注册DLL.我一直在玩并排互操作一段时间没有成功,我终于想到一个mdb.manifest可能不是exe.manifest的可接受的替代品(可能很明显,我知道,但我我试图保持乐观.

我的问题:是否有可能让VBA加载并排的COM组件?

或者,是否有另一种方法在Access中使用未注册的C#库?

(在您提出问题之前,我的理由是:我绝对无法访问我的客户端的Windows注册表 - 这就是为什么它首先在Access中编写.而且,我需要在一个实现相同的功能. C#应用程序很快,而不是做两次).

c# vba com-interop side-by-side

7
推荐指数
2
解决办法
5487
查看次数