問題タブ [sxs]

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.

0 投票する
8 に答える
9469 参照

windows - Windows での dll のビルドとデプロイ: SxS、マニフェスト、その他すべて

VS 2005 以降、MS ランタイムに対して単純に dll をビルドし、それらを一緒にデプロイすることはできないことがわかりました ( http://www.ddj.com/windows/184406482 )。マニフェスト、SxS、および co に深く混乱しています。MSDN のドキュメントは、循環参照があり、非常に貧弱です。特に、私はどちらかというと Unix 派なので、これらはすべて有益ではありません。私の中心的な問題は、msvc9 または msvc8 に対して dll をリンクすることです。これらのランタイムは再配布可能ではないため、そのような dll をリンクしてデプロイする手順は何ですか? 特に、マニフェストはどのように生成されますか (mt.exe は必要ありません。コンパイラ間で移植可能なものが必要です)、マニフェストはどのように埋め込まれ、使用されますか? Side by side assembly とはどういう意味ですか?

基本的に、MS 専門用語以外の仕様はどこで見つけることができますか?

回答してくださった皆様、本当に参考になりました、ありがとうございます

0 投票する
6 に答える
3051 参照

c++ - Boost を追加すると、デバッグ ビルドが「非 D」MSVC ランタイム DLL に依存するようになります

何とか回避できるかもしれない厄介な問題がありますが、一方で、このようなものは本当にここにとどまっているように見えるので、むしろそれを乗り越えて何が起こっているのかを正確に理解したいと思っています.

ストーリーは次のとおりです。私は正常に動作する単純な OpenGL アプリを持っています。コンパイル、リンク、または実行に大きな問題はありません。ここで、より集中的な計算の一部をワーカー スレッドに移動して、GUI の応答性をさらに高めることを試みることにしました (もちろん、Boost.Thread を使用します)。

つまり、.cpp ファイルの先頭に次のフラグメントを追加すると:

、その後、デバッグ ビルドを起動しようとすると、「MSVCP90.dll が見つからなかったため、このアプリケーションは開始できませんでした」というメッセージが表示され始めます。(リリースモードは正常に動作します。)

Dependency Walker を使用して実行可能ファイルを見ると、この DLL も見つかりません (これは私が予想していることだと思います)。次の関数を呼び出せるようにするために探していることがわかります。

次に、 のすべてのインスタンスを変換し、代わりにマクロを使用しようとしminましmaxたが、役に立たなかったため、それらへのすべての参照を見つけることができなかった可能性があります。(ソースコードを入手できない外部ライブラリをいくつか使用しています。しかし、これができたとしても、それが正しい方法だとは思いません。)

それで、私の質問は、おそらく次のとおりです。

  1. デバッグ ビルドで作業しているにもかかわらず、非デバッグ DLL を探すのはなぜですか?
  2. 問題を解決する正しい方法は何ですか? それとも、手早く汚れたものですか?

Visual Studio 2008 のごく普通のインストールでこれを最初に使用しました。次に、Feature Pack と SP1 をインストールしようとしましたが、どちらも役に立ちませんでした。もちろんリビルドも何度か試みました。

Boost (v1.36.0) 用にビルド済みのバイナリを使用しています。このプロジェクトで Boost を使用するのはこれが初めてではありませんが、別のソースに基づくパーツを使用するのは初めてかもしれません。

インクリメンタル リンクを無効にしても役に立ちません。プログラムが OpenGL であるという事実も関連していないようです — 同じ 3 行のコードを単純なコンソール プログラムに追加すると、同様の問題が発生しました (ただし、MSVCR90.dll と について不平を言ってい_mkdirました。後者のboost::create_directory場合、問題は解決しました!!)。この 3 行を削除または追加するだけで、プログラムが正常に実行されるか、まったく実行されなくなります。

私は Side-by-Side を理解しているとは言えません (これが関連しているかどうかさえわかりませんが、今のところはそれが私が想定していることです)。アプリをビルド、デバッグ、デプロイ...


編集 1:とにかく問題を再現する簡素化された例を作成しようとしているときに、問題がSpread Toolkitに関係していることを発見しました。(ただし、Boost のリンクを開始する前は、これはありませんでした。)

問題を再現できる最小限のプログラムを思いつきました。これは、A.cpp と B.cpp の 2 つのコンパイル ユニットで構成されます。

A.cpp:

B.cpp:

いくつかの観察:

  1. SP_joinA.cppの行をコメントアウトすると、問題はなくなります。
  2. B.cpp の 1 行をコメント アウトすると、問題は解決します。
  3. B.cpp の 1 行を A.cpp の最初または最後に移動またはコピーすると、問題は解決します。

(シナリオ 2 と 3 では、 を呼び出すとプログラムSP_joinがクラッシュしますが、これは単にメールボックスが有効でないためです...これは当面の問題とは関係ありません。)

さらに、Spread のコア ライブラリがリンクされています。私のシステムにはそのライブラリのデバッグ ビルドがないため、これは私の質問 #1 に対する答えの一部であることは間違いありません。

現在、別の環境で問題を再現できるようにする方法を考え出そうとしています。(実際に敷地外で再現できたらビックリしますが…)


編集 2:わかりました。これで、WinXP32 + VS2008 + Boost 1.36.0 のほぼバニラのインストールで問題を再現できるパッケージができました (まだBoostPro Computing からビルド済みのバイナリです)。

犯人は確かにSpread libであり、私のビルドにはMSVC 6用のかなり古いバージョンのSTLPortが必要です! それにもかかわらず、私はまだ症状が比較的面白いと感じています. また、上記のシナリオ 1 ~ 3 を含め、実際に問題を再現できるかどうかをお知らせいただければ幸いです。パッケージは非常に小さく、必要なすべての部品が含まれている必要があります。

結局のところ、この例では Boost Filesystem ライブラリを使用しているため、Boost.Thread とは特に関係がありませんでした。さらに、以前のように P ではなく、MSVCR90.dll について不平を言うようになりました。

0 投票する
1 に答える
1329 参照

installation - SxS インストールと WiX

フレームワークであるプロジェクトのインストールと展開を処理する方法を理解しようとしています。通常、開発者はフレームワークをインストールしてから、.Net アプリケーションで dll を参照します。

フレームワークには 2 つのレベルがあります。

  1. 多数のネイティブ C++ dll
  2. ネイティブ dll を参照する一部の C++\CLI および C# アセンブリ (すべて dll)

.Net アセンブリを GAC に配置し、ネイティブ アセンブリを WinSxS フォルダーにインストールするインストーラーを提供したいと考えています。これまでのところ、SxS アセンブリのインストールに関する情報はあまり見つかりませんでした。MSIを使用して実行できることは知っていますが、WiXまたは他のインストーラーツールを使用して実行する方法を誰かが知っているかどうか疑問に思っていました.

これは、Visual Studio セットアップ プロジェクトを使用して行うことはできないと思います。

0 投票する
3 に答える
548 参照

winapi - Pktextract.exeはどこにインストールされていますか?

Visual Studio 2008と、WindowsServer2008および.NETFramework3.5用のWindowsSDKがインストールされています。これが最新のプラットフォームSDKだと思います。

SxSにインストールする署名付きdllをビルドしようとしています。すべてのチュートリアルで、SDKの一部であるpktextract.exeというツールを使用するように説明されていますが、ツールが見つからないようです。makecert、mt、makecatなどの他のすべてのツールが存在します。

最新バージョンのSDKで、pktextractは他のツールに置き換えられましたか?

助けてくれてありがとう。

0 投票する
1 に答える
1017 参照

sxs - ネイティブ SxS dll のポリシー リダイレクト ファイルを作成する方法は?

あるネイティブ アセンブリ バージョンから別のネイティブ アセンブリ バージョンにリダイレクトする SxS ポリシーを作成してインストールする方法を説明している適切なリファレンスはどこにありますか?

Wix インストーラーを使用して、ネイティブ アセンブリの 2 つのバージョンのビルドとインストールに既に成功しています。しかし、ここから先に進む方法がわかりません。私が見つけた情報のほとんどは、マネージ アセンブリと GAC に関するものです。私が探している手順は、マネージ dll の手順と同じですか?

助けてくれてありがとう、ダン

0 投票する
3 に答える
1058 参照

.net - ビルド時に.NET依存関係チェーンの上位にx86を要求する方法

マネージDLLであるp4.netを使用するプロジェクトがいくつかあります。p4.netは、32ビットのアンマネージDLLであるp4dn.dllに依存しています。これはx64システムで問題があるため、p4.netを使用する各プロジェクトに移動し、そのプロセッサタイプをx86に設定する必要がありました。

問題を正しく理解していれば、.NETがexeをロードすると、マニフェストをチェックし、マニフェストがない場合は、プロセッサタイプに最適な処理を実行します。次に、32ビットdllに遭遇すると、barfsします。

p4.netを使用する各プロジェクトに移動し、32ビットとしてマークすることができます。しかし、これらはかなりの数あります。また、人々は新しいものを作り続け、32ビットを設定するのを忘れるでしょう。そして将来、誰かがx64でそれを使おうとすると、この問題が再び発生します。

私の質問はこれです:.NETにp4dn.dllを32ビットとして使用するアプリを自動的にロードさせる方法はありますか?それができない場合、IDEがこれを検出してビルドに失敗する方法はありますか?

または、p4apiまたはp4dn.dllの横に配置できる.manifestファイルを作成して、それらを使用するアプリが32ビットで自動実行されるようにすることは可能ですか?

0 投票する
3 に答える
3991 参照

.net - .NET コンポーネントで登録不要の COM をうまく使っている人はいますか?

最近まで、私たちはネイティブおよび .NET COM コンポーネントに登録不要の COMを喜んで使用していました。しかし、リリース候補からリリースに移行するために .NET アセンブリのバージョン番号を変更しただけで、アプリケーションが Windows XP SP3 (vista ではなく) でランダムにクラッシュし始めるという奇妙な問題に遭遇しました。(マーフィーの法則が嫌いなだけ?)

多くの工数が失われ、歯ぎしりをした結果、この問題は、.NET クラスに関する情報を取得するときにヒープの破損を引き起こすsxs.dll の既知のバグであることがわかりました。問題を解消するホット フィックスがありますが、ホット フィックスは再配布を目的としていません。

登録不要の COM 実装にこのような恐ろしいバグがあることに、私たちは少し困惑しています。登録不要の COM for .NET コンポーネントを使用して成功した人はいますか? この問題をどのように回避しましたか?

0 投票する
2 に答える
2259 参照

windows - アプリケーションごとの構成ファイルbindingRedirectはDLLには適用されません

ver 6のcommctl32.dllにマニフェストの依存関係を含めることで、XPでUXthemeを示す簡単なWin32アプリケーションを作成しました。次に、簡単なWin32 dllを作成し、でビルドしISOLATION_AWARE_ENABLED、Comctl32のバージョン5と6の両方を指定する埋め込みマニフェストでテストしました。 .dll

このメソッドを使用して、exeとdllで異なるバージョンのcomctl32.dllを使用できるようになりました。5を使用するexeとdllバージョン6の両方、およびその逆。

次に、アプリとdllをリセットして、comctlver5マニフェストの依存関係を設定します。そして、アプリケーション構成ファイルを導入しました:

これで、アプリケーションを実行すると、アプリケーションがcommctlv6に明確にリダイレクトされます。XPUXThemeを有効にするとダイアログが明確に表示されます。ただし、dllはリダイレクトされておらず、commctlのテーマのないバージョン5を使用しています。

ドキュメントには、bindingRedirectsを実行するためのdllごとの構成ファイルについての言及はありません。そして、それを作成しようとしても何もしません。

また、アセンブリのあるメジャーバージョンから別のメジャーバージョンにbindingRedirectを実行することはサポートされているシナリオではないことも知っていますが、実際には、メカニズムをテストするための明白な簡単な方法としてcommctl32を使用しています。

dllの依存アセンブリのバージョンをリダイレクトするにはどうすればよいですか?

0 投票する
4 に答える
2042 参照

.net - 登録不要の COM 相互運用機能と依存アセンブリ

大規模な MFC ベースのアプリケーションと少数のマネージ (.NET) アドインとの統合に取り組んでいます。これらのアドインとの通信は、COM 経由で行われます。

これまでは、レジストリを使用して、これらのアドインをアプリケーションで (COM サーバーとして) 利用できるようにしてきました。しかし、現在、これを行うために、登録不要の COM 相互運用機能を使用しようとしています。

これらのアドインは、アプリケーションが実行されているディレクトリとは別のディレクトリ (理想的にはどこでも) に配置できるようにしたいと考えています。しかし、依存アセンブリを解決できないため、サーバー オブジェクトのインスタンス化で問題が発生しているようです。これは、COM サーバー DLL のディレクトリにも存在します。

「昔ながらの」COM 相互運用機能は、ターゲット アセンブリを読み込むときに LoadFrom コンテキストを使用してこれを処理しました。しかし、アクティベーション コンテキスト メカニズムはこれを行っていないようです。

これを機能させる方法を知っている人はいますか?モジュールの SxS マニフェストで依存アセンブリを識別できるかどうか、またはアクティベーション コンテキストを別の方法で作成できるかどうかは明らかではありません。

考えやヒントをありがとう!

ジェフ

0 投票する
1 に答える
1137 参照

qt - QtCreatorの実行中にサイドバイサイドエラーが発生しました

Vista Ultimate(SPなし)では、WindowsBinaryインストーラーを使用してNokiaからQtCreator1.3をインストールしました。実行しようとすると、「サイドバイサイド構成が正しくないため、アプリケーションを起動できませんでした。詳細については、アプリケーションイベントログを参照してください。」というサイドバイサイドエラーが発生しました。

イベントビューアのログには、「 "C:\ Qt \ qtcreator-1.3.0 \ bin \qtcreator.exe"のアクティベーションコンテキストの生成に失敗しました。依存アセンブリMicrosoft.VC90.CRT、processorArchitecture = "x86"、publicKeyToken = "1fc8b3b9a1e18e3b" 、type = "win32"、version="9.0.21022.8"が見つかりませんでした。詳細な診断にはsxstrace.exeを使用してください。 "

実行するとsxstraceでログファイルが返されました。http://cl1p.net/sxstrace/にコンテンツをアップロードしました

さまざまなバージョンのDLLとSxstraceシステム、およびVC90.crtと関係があると思いましたが、どうすればよいかわかりません。それが役に立ったら、私がPCにインストールした他の開発ツールはDev-C ++(およびMingW)だけです。過去にVisualStudioをインストールしましたが、それ以降はアンインストールされています。LimewireやDigsbyなど、VC90.crtマニフェストを備えた他のアプリは正常に実行されています。助けてください?