none
VS2008SP1,C# Invoke C++,the .exe does not run with external manifest RRS feed

  • 问题

  • If Using embedd manifest,CSharpClient_42.exe run ok.

    If using external manifest, build it ok, but the .exe file does not run.

    run CSharpClient_42.exe, the results pop-up dialog box, showing that the application is configured incorrectly, the application failed to start, re-installing the application may be to correct the problem.

    If deleted "<assemblyIdentity name="ManagedClassWrapper.dll" version="" />" in CSharpClient_42.exe.manifest, then CSharpClient_42.exe run ok.

    CSharpClient_42.exe.manifest(which VS2008 auto generat):

    <?xml version="1.0" encoding="utf-8"?>
    <assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <assemblyIdentity name="CSharpClient_42.exe" version="1.0.0.0" processorArchitecture="x86" type="win32" />
      <dependency>
        <dependentAssembly asmv2:dependencyType="preRequisite">
          <assemblyIdentity name="Microsoft.VC90.CRT" version="9.0.21022.8" publicKeyToken="1fc8b3b9a1e18e3b" processorArchitecture="x86" type="win32" />
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly asmv2:dependencyType="install" asmv2:codebase="ManagedClassWrapper.dll.manifest" asmv2:size="650">
          <assemblyIdentity name="ManagedClassWrapper.dll" version="" />   note: If deleted the line, CSharpClient_42.exe run ok.
          <hash xmlns="urn:schemas-microsoft-com:asm.v2">
            <dsig:Transforms>
              <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
            </dsig:Transforms>
            <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
            <dsig:DigestValue>fe0WS21Bx0HaRyTis40iLDlHrpw=</dsig:DigestValue>
          </hash>
        </dependentAssembly>
      </dependency>
    </assembly>

    Could you please help me? Thanks

    Download the source code packet(some time need Over the wall):
    https://mega.co.nz/#!scECxIJa!8865SnjOCLQk69-B6WH5WxrRQ1o38-uA3CoWWb685TY



    2015年1月29日 16:15

全部回复

  • 你好:

    有没有试一下给assemblyIdentity节点设置完整的属性?比如下面这样的

    <dependency>
    	<dependentAssembly>
    	  <assemblyIdentity
    		  type="win32"
    		  name="Microsoft.Windows.Common-Controls"
    		  version="6.0.0.0"
    		  processorArchitecture="*"
    		  publicKeyToken="6595b64144ccf1df"
    		  language="*"
    		/>
    	</dependentAssembly>
    </dependency>

    有可能是某些属性缺失所引起的。

    另外在中文论坛可以用中文发帖,最好将问题描述的清晰一点,让别人能够很容易理解你并重现你的问题。谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年2月2日 3:13
    版主
  • Caillen Zhong你好,谢谢你的恢复,我尝试过给assemblyIdentity节点设置完整的属性,也不行。

    似乎不是这方便的问题,我给出的CSharpClient_42.exe.manifest是VS2008SP1自动生成的,不是我自己编制的。

    应当是vs2008的问题,虽然我没有测试,估计VS2010等其他版本也存在同样的问题,因为这种C#&C++的混合应用做的人很少(很多人压根就认为C#调用C++/C的代码是扯淡),微软测试再不充分,很多BUG没有暴露出来。

    对于C#的C++interop,我还发现了几个其他问题,比如如果被调用的非托管代码使用Lib库并通过它调用DLL,则使用LoadLibrary()函数后不能使用FreeLibrary()函数, 即使在工程属性中设置了允许unload DLL。




    2015年2月2日 13:41
  • 这是为了使用一个基于usb的pc to pc(usb to usb)高速透明传输API(见:http://blog.csdn.net/zzkjliu/article/details/8110718)时碰到的问题,很长时间仍然没有解决,在微软社区都解决不了估计其他的地方就更不行了,看来只能用嵌入式清单文件了。

    2015年5月10日 4:53