問題タブ [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.
com - COM サーバーを使用したサイド バイ サイド エラー、C++ 再頒布可能パッケージがインストールされている
x64 アプリケーションで使用する必要がある 32 ビット ライブラリがあるという厄介な状況があります。この問題を解決するために、32 ビット プロセスと 64 ビット プロセス間の通信を処理する COM サーバー アプリケーションを作成しました。
すべてが Windows 7 バージョン 上の VS2005 に組み込まれています8.0.50727.867
。私が気づいたことの 1 つは、私のバージョンが SP1 再配布バージョン ( 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 インストーラーを実行すると、次のバージョンの CRT が sxs フォルダーに取得されます。
- 8.0.50727.42
- 8.0.50727.762
- 8.0.50727.4053
- 8.0.50727.4940
もちろん、 version が必要8.0.50727.6195
です。
静的にリンクできるものはすべて設定しました (つまり、/MT、MFC への静的リンク、ATL へのリンクなし) が、C ランタイムの動的バージョンに依存するものがあります。
sxstrace を使用しましたが、うまくいきませんでした。トレースを開始し、プログラムを起動し、エラーを取得してトレースを終了し、別のファイルに解析します。解析されたファイルは完全に空です。
注目すべき興味深い点が 1 つあります。Win7ボックスでredistインストーラーを実行すると、文字通り1〜2秒で完了し、消えます。現在、プログラムの追加と削除にインストールされているのを確認し、sxs フォルダーにフォルダーを追加しますが、これは奇妙に感じました。
誰かがこのヘルプの経験があれば、大歓迎です。私が省略した情報が必要な場合は、お知らせください。
.net - WPFの電話回線から発信者IDを取得するにはどうすればよいですか?
で Tapi3 を試しましたWPF
が、次のエラーが表示されます。
ファイルまたはアセンブリ 'ITapi3.dll' またはその依存関係の 1 つを読み込めませんでした。サイド バイ サイド構成が正しくないため、アプリケーションを開始できませんでした。
c++ - あるマシンで 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 Enterprise Edition Service Pack 2 にコピーしました。実行しようとすると、次のエラーで失敗しました。
[イベント ビューア] > [システム] で、3 つのイベントがログに記録されました。
イベント ID: 32; ソース: サイドバイサイド
イベント ID: 59; ソース: サイドバイサイド
イベント ID: 59; ソース: サイドバイサイド
Microsoft Visual C++ 2005 Redistributable をインストールしても修正されませんでした
- http://www.microsoft.com/download/en/details.aspx?id=3387から vcredist_x86.exe をダウンロード
- インストールしました。インストーラーによって、 というフォルダーが作成されました
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 をインストールしても修正されませんでした
- http://www.microsoft.com/download/en/details.aspx?id=5638から vcredist_x86.exe をダウンロード
- インストールしました。インストーラーは次のフォルダーを作成しました:
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 とマニフェストをコピーしても、問題は解決しませんでした。
msvcm80.dll
、msvcp80.dll
およびmsvcr80.dll
からC:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
にコピーしましたC:\foo
。- 次に、 にコピー
C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.manifest
しC:\foo
て名前を に変更しましたMicrosoft.VC80.CRT.manifest
。
マニフェスト ファイルの 4 行目は次のようになります。
今回 C:\foo\foo.exe を実行してみたところ、うまくいきませんでした。C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
DLLと対応するマニフェスト ファイルを使用して、このことをもう一度繰り返しました。それも役に立ちませんでした。同じエラーが発生しました。
どちらの場合も、[イベント ビューアー] > [システム] で次のエラーが表示されました。
イベント ID: 34; ソース: サイドバイサイド
イベント ID: 58; ソース: サイドバイサイド
イベント ID: 59; ソース: サイドバイサイド
Windows XP マシン (EXE をビルドした場所) から CRT DLL とマニフェストをコピーしても、問題は解決しませんでした。
- およびWindows XP マシン ( foo.exe
msvcm80.dll
を開発およびビルドした場所) からWindows Server 2003 (foo.exe を実行しようとしている場所) にコピーしました。msvcp80.dll
msvcr80.dll
C:\winnt\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
C:\foo
- 次に、 にコピー
C:\winnt\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest
しC:\foo
て名前を に変更しましたMicrosoft.VC80.CRT.manifest
。
マニフェスト ファイルの 4 行目は次のようになります。
C:\foo\foo.exe を実行しようとすると、前のセクションで説明したのと同じエラーが発生しました。
CRT DLL とマニフェストを Visual Studio フォルダーからコピーすると修正されました。
msvcm80.dll
、およびWindows XP マシン (foo.exe を開発およびビルドした場所) からWindowsmsvcp80.dll
Server 2003 マシン (実行しようとしている場所) にコピーしました。msvcr80.dll
Microsoft.VC80.CRT.manifest
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
C:\foo
マニフェスト ファイルの 4 行目は次のようになります。
今回は問題なく C:\foo\foo.exe を実行できました。
質問
2 番目の方法で説明されているように、「Microsoft Visual C++ 2005 SP1 Redistributable」(vcredist_x86.exe) をインストールすると、問題が解決することを期待していました。しかし、そうではありませんでした。C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
開発マシンのフォルダーからDLLとマニフェストファイルをコピーすると修正されました。なぜそうなったのですか?
ビルド オプション
場合によっては、私の質問に答えるのに役立ちます。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
.net - .net 4 プロセス (SxS) で .net 2.0 の下で実行されるマネージド コードを強制する方法
一部の記事では、「explicit run sxs」について言及されています。それは実際に可能ですか?このトピックに関するいくつかの記事を読みました: http :
//msdn.microsoft.com/en-us/magazine/ee819091.aspx
/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 実行を開始します。誰かがこの質問に光を当てることができますか?
.net - マージ モジュールを使用したアプリケーションのデプロイ - サイド バイ サイド アセンブリ
VS2010 でビルドされた WPF アプリケーションがありますが、VS2008 でビルドされた C++/CLI ライブラリを参照しています。C++/CLI ライブラリは、CRT モジュール (MSVCM90.dll、MSVCP90.dll、MSVCR90.dll) の VC90 バージョンを使用します。プロジェクト プロパティには、「標準 Windows ライブラリの使用」、「ATL を使用しない」、および「共通言語ランタイム サポート (/clr)".
私の開発マシンでは、すべて正しくビルドされます。CRT モジュールは %WINDIR%/WinSxS の場所から読み込まれ、全員が満足しています。ただし、開発ソフトウェアを搭載していないテスト マシンにデプロイすると、アプリケーションはこれらのモジュールを見つけられないように見えます (Dependency Walker が教えてくれたことによると)。
必要なマージ モジュールをセットアップ プロジェクトに追加しましたが、それらは開発マシンとまったく同じ場所にインストールされています。アプリケーションの実行時にのみ、それらは見つかりません。アプリケーションは、起動時に「Windows が問題の解決策を確認しています...」というメッセージが表示されて失敗するだけです (その後、何もせずに終了します)。
私は何が欠けていますか?
また、セットアップ プロジェクトに VC++ 2010 再頒布可能パッケージと .NET Framework 3.5 SP1 クライアント プロファイルを追加しようとしましたが、何もしていないようです。
テスト マシンで sxstrace.exe を実行しようとしましたが、exe が実行されていることを示す最初のセクション以外の情報は得られません。
.net - VBA からではなく、C# から動作する RegFree COM
私は現在、Excel をクライアントとして、.NET dll をサーバーとして、登録不要の COM を動作させようとしています。現在、概念実証を機能させようとしているだけですが、問題が発生しています。
明らかに、私はExcelを使用しているため、実行可能ファイルと一緒にクライアントマニフェストを単純に使用することはできないため、Microsoft.Windows.ActCtx
(リンク)を使用しています
クライアント マニフェスト、アセンブリ マニフェスト、および dll はすべて同じ場所にあります。
残念ながら、C# で機能するものは Excel / VBA では機能しないようで、その理由がわかりません。C# テスト クライアントは完全に動作しますが、VBA では80070002エラーが発生し、メッセージMethod 'CreateObject' of object 'IActCtx' failed が表示されます。
COMTestObject
次のように、単一のクラス/インターフェイスを COM ( / ) に公開する .NET dll (COMTestService.dll) がありICOMTestObject
ます。
クライアント マニフェスト (COMTestService_Client.manifest):
アセンブリ マニフェスト (COMTestService.manifest):
VBA クライアント コード:
C# クライアント コード:
編集
プロットが厚くなります...ちょっとした楽しみとして、C# でオブジェクトを作成するための簡単な COM 可視の REGISTERED ヘルパー クラスを作成し、次にpublic object CreateObject(string manifestPath, string typeName)
、C# exe からこれを呼び出すという行に沿ったメソッドを使用してそれを返します。問題はありませんが、VBA からの呼び出しは失敗します (80070002 再び、メッセージ: The system cannot find the file specified. )。今、私はさらに混乱しています...
ご協力いただきありがとうございます。さらに情報を提供する必要がある場合はお知らせください。喜んで対応させていただきます。
c++ - VS2005 および VS2008 でのサイド バイ サイド マニフェストの問題
私はVS2008で構築しているC++プロジェクトを持っています。このプロジェクトは、VS2005 を使用してビルドされたライブラリ (DLL + インポート ライブラリ) にもリンクし、VS2005 デバッグ CRT ライブラリをロードします (すべてがデバッグ ビルドです)。
VS2008 でビルドされたこの実行可能ファイルを実行しようとすると、VS2005 が SP1 と共にインストールされていても、VS2005 DLL がデバッグ CRT ライブラリを見つけられないため、ロード時にエラーが発生します。Windows の更新プログラムもチェックしたので、これ以上何ができるかわかりません。
この問題を診断するにはどうすればよいですか? Windows のイベント ビューアーを調べたところ、デバッグ用の VC80 CRT ライブラリが見つからないことに気付きましたが、私が知っているのはそれだけです。ここのどこかにバージョンの不一致があると思います。このマニフェスト/サイドバイサイドのものについてあまり知らないので、それを修正する方法がわかりません。
私が構築しているOSはWindows XP 32ビットです。VS2008 SP1 と VS2005 SP1 がインストールされています (したがって、すべてのデバッグ マニフェスト/CRT dll が利用できるはずです)。
.net - Microsoft.VC80.CRT v8.0.50727.6195 がないためにアプリがクラッシュする
FireWire カメラから画像を取得する C# アプリケーションを作成しました。FireWire ドライバーと SDK dll (.NET) を含むカメラ ベンダーの SDK をインストールしました。SDK dll は、インストール中に GAC に展開されます。
アプリケーションで参照した SDK dll は、Microsoft.VC80.CRT v8.0.50727.6195 に依存しています。マニフェスト ファイルと dll の msvcr80.dll、msvcm80.dll、msvcp80.dll をアプリケーションと同じフォルダにコピーし、アプリケーションを実行しようとしましたが、それでも .NET ランタイムが VCRT dll を見つけることができず、アプリケーションがクラッシュします。
次の例外が発生します: 「ファイルまたはアセンブリ 'CameraSDK.dll' またはその依存関係の 1 つを読み込めませんでした。サイド バイ サイド構成が正しくないため、アプリケーションを開始できませんでした。アプリケーション イベント ログを参照するか、詳細については、コマンドライン sxstrace.exe ツールを参照してください (HRESULT からの例外: 0x800736B1)。"
Google で調べたところ、VCRT v8.0.50727.6195 を入手するには、Microsoft Visual C++ 2005 Service Pack 1 をインストールする必要があることがわかりました。VCRedist をダウンロードしてインストールしようとしましたが、dll がインストールされませんでした。私のマシンには VS2008 と VS2010 の両方があり、VCRedist インストーラーが私のマシンで最新バージョンを検出し、インストールをスキップしたと思います。
アプリケーションがローカル ディレクトリで依存する dll を検索するようにするにはどうすればよいですか? どんな助けでも大歓迎です。ありがとう。
c++ - side-by-side アセンブリ検索シーケンスを変更できますか?
次の (単純化された) ファイル レイアウトを持つ Windows、C++ ソフトウェア プロジェクト (Visual Studio 2005、SP1 でビルド) があります。
binディレクトリとutilsディレクトリの両方に存在するさまざまな実行可能ファイルがあります。これらの実行可能ファイルはそれぞれ、binに格納されているサイド バイ サイド アセンブリ (C++ ランタイム DLL) に依存していますが、さまざまな理由からこれらの個別のフォルダーに分離しています (たとえば、utilsフォルダー内の exe は補助ツールです)。頻繁に実行されることはありません)。このファイル構成の直接的な結果として、utilsフォルダー内のアプリは、適切な side-by-side アセンブリがインストールされていないシステムでは実行できません (通常、「システムは指定されたプログラムを実行できません」というメッセージで失敗します)。エラーメッセージ)。
私の質問: utilsフォルダー内のアプリに、..\bin
フォルダー内で適切なサイド バイ サイド アセンブリを明示的に検索するように指示する方法はありますか? MicrosoftのAssembly Searching Sequenceの記事では、これが可能かどうかについては言及されていません。これらのアプリケーションのこのランタイム要件を解決できる賢い方法はありますか?
私が見る潜在的なオプション:
- side-by-side アセンブリのコピーをutilsフォルダーに配置します。これは実行時に行うこともできますが (アプリケーションのインストール パッケージが肥大化するのを防ぐため)、少し面倒です。
- ランタイム DLL を静的にリンクします。やりたくない!
- エンド ユーザーに、通常の再配布可能パッケージをインストールしてもらいます。これもやらないほうがいいです。
c# - SxS C#.NET COM DLLに対してCoCreateInstanceを呼び出そうとすると、HRESULT 0x80070002(FILE_NOT_FOUND)
ネイティブCOMクライアントのC#.NETDLLからCOMオブジェクトを作成しようとしています。これはC#.NETコードです
Visual StudioにCOM相互運用機能に登録し、CoCreateInstanceを呼び出すように指示すると、期待どおりに機能します。
ここで、登録のないSide-by-SideCOMと同じDLLを使用したいと思います。アプリケーションマニフェストに依存関係を追加します
NetTestCom.X.manifestファイルを作成します
CoCreateInstanceを呼び出そうとすると、HRESULT0x80070002が表示されます。アプリケーション、DLL、およびマニフェストはすべて同じディレクトリにあります。