问题
我在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; …
我正在为我们的产品创建一个MSI.我希望该产品能够并排安装.这样我就可以先安装1.0.0,然后再安装1.0.1,这样就可以安装两个版本了.
我正在使用WiX创建msi,并想知道如何在Wix中完成这项工作?例如
问候,Martijn
TL; DR是否所有生成的注册表项都regsvr32
需要出现在SxS reg-free-COM清单中,反之亦然?
我正在尝试获得免注册的COM用于第三方组件.
读 了 关于主题,我发现有提到的几个要素,即可以放入一个清单:
从文档中,我们可以将以下标记添加到清单中以描述COM组件:
assemblyIdentity
- 据我所知,这真的只是描述了"抽象集会 "comClass
- 描述COM类(IID接口).看来,这总是需要的.typelib
- 什么时候?comInterfaceExternalProxyStub
- 什么时候?comInterfaceProxyStub
- 什么时候?从其他文档HKEY_LOCAL_MACHINE\SOFTWARE\Classes
我们可以看到COM注册表项有几个类别:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CLSID}
我假设大致相当于comClass
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{IID}
将对应于任何一个 comInterface[External]ProxyStub
,但我真的不知道何时使用哪个(或两者)typelib
清单条目?使用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属性应该是版本独立的属性.
那么,放在这里的是什么?当客户端没有请求特定版本时,它是否重要?
当我运行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
我正面临一个非常模糊的问题,而我正试图在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启动器中的错误/问题(或者他们称之为功能).
有没有人有类似的问题?任何人都可以对上述事项有所了解吗?非常感激.
到目前为止,我尝试过以下方法:
Runtime.getRuntime().exec(). DID NOT WORK
Runtime.getRuntime.exec()
ProcessBuilder
.不工作我有一个ac#类库项目,它使用在系统上注册的COM dll.我现在想要将COM dll部署为并排程序集,因此我不必注册它,也不必干扰可能使用不同版本的dll的其他应用程序.
我已经使用add new item菜单将app.manifest添加到c#项目中,但我不确定下一步该做什么.在项目属性/应用程序/图标和清单中,清除了清单下拉列表.我不知道怎么过去.我添加了一个清单文件,为什么它不在下拉列表中?
我有一个适用于C++应用程序的COM DLL的清单,我想我保持原样.现在我需要知道如何为c#项目编辑app.manifest.我将首先添加一个已知良好的依赖元素.但我需要一个关于如何设置它的教程,我不认为它覆盖在任何地方.
我正在使用VS2008
我正在使用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) 我正在尝试使用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) 在尝试将Debug安装集安装到测试计算机时,我今天第一次遇到了并排程序集.我最终管理了它,但留下了几个问题:
我不是在谈论从C#调用VBA COM ......反过来说!
我想要做的是在MS Access中使用VBA调用C#库而不注册DLL.我一直在玩并排互操作一段时间没有成功,我终于想到一个mdb.manifest可能不是exe.manifest的可接受的替代品(可能很明显,我知道,但我我试图保持乐观.
我的问题:是否有可能让VBA加载并排的COM组件?
或者,是否有另一种方法在Access中使用未注册的C#库?
(在您提出问题之前,我的理由是:我绝对无法访问我的客户端的Windows注册表 - 这就是为什么它首先在Access中编写.而且,我需要在一个实现相同的功能. C#应用程序很快,而不是做两次).
side-by-side ×10
.net ×3
manifest ×3
c++ ×2
com ×2
regfreecom ×2
vba ×2
visual-c++ ×2
assemblies ×1
c# ×1
com-interop ×1
dll ×1
java ×1
sxs ×1
wix ×1