0

MSMQ を使用して Visual C++ 2008 で開発しています。Windows Vista では、アプリケーションは C:\Windows\winsxs>cd x86_microsoft-windows-msmq-runtime-core_31bf3856ad364e35_6 にある mqrt.dll を見つけることができません。0.6002.18005_none_574cf1cdb624ee17\mqrt.dll.

WinSxS のマニフェストの説明は次のとおりです。

<assembly xmlns="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0" description="MSMQ core runtime component." displayName="MSMQ Core runtime component" company="Microsoft" copyright="Copyright (c) Microsoft Corporation. All Rights Reserved." creationTimeStamp="2005-03-11T01:47:18" lastUpdateTimeStamp="2005-03-11T01:48:59">
  <assemblyIdentity name="Microsoft-Windows-msmq-runtime-core" version="6.0.6002.18005" processorArchitecture="x86" language="neutral" buildType="release" publicKeyToken="31bf3856ad364e35" versionScope="nonSxS" />

#pragma コメントをヘッダー ファイルに追加しました。

#pragma comment(linker, "\"/manifestdependency:name='Microsoft-Windows-msmq-runtime-core' version='6.0.6002.18005' processorArchitecture='x86' publicKeyToken='31bf3856ad364e35' language='neutral'\"")

マニフェストは、mt.exe を使用して exe に埋め込まれます。しかし、うまくいきません。sxstrace のエラー メッセージは次のとおりです。

INFO: Resolving reference Microsoft-Windows-msmq-runtime-core,processorArchitecture="x86",publicKeyToken="31bf3856ad364e35",version="6.0.6002.18005".
    INFO: Resolving reference for ProcessorArchitecture x86.
        INFO: Resolving reference for culture Neutral.
            INFO: Applying Binding Policy.
                INFO: No publisher policy found.
                INFO: No binding policy redirect found.
            INFO: Begin assembly probing.
                INFO: Did not find the assembly in WinSxS.
                INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft-Windows-msmq-runtime-core\6.0.6002.18005__31bf3856ad364e35\Microsoft-Windows-msmq-runtime-core.DLL.
                INFO: Attempt to probe manifest at c:\qt\datamon\bin\Microsoft-Windows-msmq-runtime-core.DLL.
                INFO: Attempt to probe manifest at c:\qt\datamon\bin\Microsoft-Windows-msmq-runtime-core.MANIFEST.
                INFO: Attempt to probe manifest at c:\qt\datamon\bin\Microsoft-Windows-msmq-runtime-core\Microsoft-Windows-msmq-runtime-core.DLL.
                INFO: Attempt to probe manifest at c:\qt\datamon\bin\Microsoft-Windows-msmq-runtime-core\Microsoft-Windows-msmq-runtime-core.MANIFEST.
                INFO: Did not find manifest for culture Neutral.
            INFO: End assembly probing.
    ERROR: Cannot resolve reference Microsoft-Windows-msmq-runtime-core,processorArchitecture="x86",publicKeyToken="31bf3856ad364e35",version="6.0.6002.18005".
ERROR: Activation Context generation failed.

次のプラグマを試しましたが、WinSxS は msmq を解決しようとさえしません (おそらく versionScope 属性のため):

#pragma comment(linker, "\"/manifestdependency:name='Microsoft-Windows-msmq-runtime-core' version='6.0.6002.18005' processorArchitecture='x86' publicKeyToken='31bf3856ad364e35' language='neutral' buildType='release' versionScope='nonSxS'\"")

使用する正しいプラグマは何ですか?

4

1 に答える 1

0

アセンブリが見つからなかった理由が本当にわかりません。このような問題が発生したとき、SysInternals (現在は microsoft.com でホストされています) からProcess Monitorを入手し、WinSxS ストアへのすべてのファイル アクセスを監視しました。

iirc、マニフェスト プローブは、アプリケーション プロセスとは別のプロセスによって行われた/行われたため、独自の EXE の名前でフィルタリングしないでください。

とにかく、それが探していたフォルダーは、私の場合に存在していたフォルダーとは明らかに異なっていたため、調査するための確実な手段が得られました。

于 2009-12-29T07:33:26.683 に答える