問題タブ [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 投票する
1 に答える
671 参照

visual-studio-2008 - 一部のアプリは、SxSの問題なしにWindows PCで簡単に解凍して実行できるのですか?

Windowsにインストールすると、ファイルシステムとレジストリ全体にデータが拡散するという特定のグループからの一般的な苦情です。一部のアプリには、ファイルを解凍するだけのオプションが用意されているため、削除するだけで「アンインストール」できます。しかし、どのようにしてVisual C ++ Redist、Side-by-Side(SxS)などの醜いものをすべて回避するのでしょうか。

私は少しユーティリティを持っています、そして本当に私は実行されるただ一つの.EXEを配布したいです-それが小さいのでインストーラーを全くまたは解凍さえしません。これは実行可能ですか?

編集: 提案されたように、実行時に静的な依存関係(/MDではなく/MT)を使用してビルドしてみました。私は次のものを手に入れました(明確にするために中央部分は切り捨てられています):

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

windows - 「同じ名前の 2 つのアセンブリ」を解決する方法

CRT のバージョン 8.0.50727.5592 を使用するアプリケーションがあります。依存ライブラリの 1 つは、バージョン 8.0.50727.762 を使用します。バージョン 8.0.50727.4940 がインストールされているマシンでアプリケーションを実行すると、「サイド バイ サイド構成が正しくありません」というエラーが表示されます。sxstrace を使用すると、次の結果が得られます。

私には、バージョン 762 への依存がバージョン 4940 に「アップグレード」されているように見えますが、5592 への依存は明らかにそうではありません。

CRT のバージョン 5592 を含む "Microsoft.VC80.CRT" フォルダーをアプリケーション フォルダーにコピーしました (つまり、アセンブリをプライベート アセンブリとしてデプロイします)。sxstrace が言うところ、最後に認識されるようです:

残念ながら、何らかの理由で、バージョン 762 への参照が解決されると、これは見られません。バージョン 762 への参照が、アプリケーションと共に配布されているバージョン 5592 を指すように強制するにはどうすればよいですか?

問題だと思うことについて私は間違っていますか?

ご協力いただきありがとうございます!

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

com - レジストリフリーCOMをデバッグする方法は?

いくつかのサードパーティのCOMコンポーネントをラップするという厄介な状況があります。実際には、1つのCOMコンポーネントと複数の.NETアセンブリです。.NETアセンブリは、同じサードパーティの内部COMコンポーネントに依存します。COM DLLを登録すると、コードは正常に機能します(現在、C#からテストしています)。そうしないと失敗します。それをデバッグするための最良の方法は何ですか?

COMコンポーネントへの参照を追加し、Isolated = trueを設定して、結果のcomClass要素をマニフェストから自分のSxSマニフェストに抽出することにより、SxSマニフェストを生成しました。また、Interop.XXX.dllファイルを作成しているようです:それは何のためですか?

エラーメッセージの例:

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

windows - アンインストールしたDLLをSxSキャッシュから削除する方法

私はVS2008を持っていました。VS2010にアップグレードし、VS2008をアンインストールしました。

自分のマシンで実行するテストがありますが、ビルドラボのマシンにロードできません。デバッグを行った後、テスト実行可能ファイルがまだmsvcr90d.dll(VC ++ 2008デバッグランタイムライブラリ)に依存していることに気付きました。VS 2008をアンインストールしましたが、そのランタイムDLLがサイドバイサイドキャッシュ(%windir%/ winsxs)にまだ存在するため、テストは私のマシンで機能します。ビルドラボマシンにはDLLがないため、そこにロードされません。

VS 2008をアンインストールすると、すべてのランタイムDLLがサイドバイサイドキャッシュから削除されるべきではありませんか?

これらの古いDLLをサイドバイサイドキャッシュから手動で削除する方法はありますか?まだ古い依存関係がある可能性のある他の場所を簡単に検出できるようにしたいと思います。

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

installshield - Shield-Mergeモジュールの依存関係の問題をインストールします。DLLが登録されていません

私の問題:

2つのマージモジュールを作成しました。それらをAおよびBと呼びましょう。マージモジュールBはAに依存しています。Aはaaa.dllをウィンドウに並べてインストールします。Bには、インストール中に登録され、aaa.dllに依存するbbb.dllが含まれています。補足として、マージモジュールAはInstallshield 2012で作成され、マージモジュールBはVisualStudio2010ウィザードを使用して作成されました。

両方のマージモジュールをインストールするインストールシールドプロジェクトがあります。[アプリケーションデータ]->[再配布可能ファイル]に移動し、インストールにBを追加します。これにより、Aが自動的にチェックオフされます。[Organization]-> [Setup Design]に移動し、Bを含む機能を展開すると、[B]をクリックします。Bに関する情報が表示されたウィンドウが表示されます。そこに、Aを正しくリストする[Dependencies]見出しがあります。

プロジェクトをビルドして、クリーンなVMにインストールしようとしています。インストール中に、bbb.dllの登録に失敗したというエラーが表示されます。無視してキャンセルします。この時点で、マシンのwinsxsを調べたところ、aaa.dllが適切なフォルダーに存在しないことがわかりました。むしろ、winsxs \InstallTemp\サブフォルダーに存在します。次に、エラーポップアップで[無視]をクリックすると、インストールはそれ以上エラーなしで続行されます。次に、完了後、bbb.dllを手動で正常に登録でき、aaa.dllは適切なwinsxsサブフォルダーに存在します。

私の質問は、マージモジュールAを完全に終了させ、aaa.dllを正しい場所に配置して、すべてが正しくインストールされるようにするにはどうすればよいですか?

私が試したこと:

  1. InstallShieldプロジェクトのOrganization->SetupDesignで複数の機能を作成してみました。そこで、3つの機能を作成しました。上部の機能1にはAが含まれています。機能2にはAが含まれ、次にBが含まれています。最後に機能3にはAが再び含まれています。3つの機能すべてを必須にしました。これにより、機能全体のインストールが完了し、aaa.dllが正しい横に並んだ場所に配置されることを期待していました。しかし、そのような運はありません。(順序が逆になっている場合に備えて、3つの機能を作成しました)
  2. 問題は、aaa.dllが時間内または適切な場所にインストールされていないことだと確信しています。これをテストするために、最初にマージモジュールAをインストールしたインストールシールドインストーラーを使用してaaa.dllをインストールしようとしました。次に、メインインストーラーを実行すると、すべてが機能しました。

テキストの壁と不適切な文法\スペルでごめんなさい。本当にイライラするので、誰か他の人が最終的にこの問題に遭遇した場合に備えて、自分で問題を見つけたら投稿します。

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

c# - DLL が他の SXS-DLL に依存しているため、pinvoke が失敗する

問題: A.dll が別の SXS-lib (私の場合は MSVCR90.DLL) に依存している場合、p/invoke を使用して DLL A.dll から関数を呼び出す方法は?

pinvoke を使用して DLL 内で関数を呼び出したいと思います。pinvoke 自体は、他のライブラリでは問題なく動作します。アンマネージ C++ から DLL 内の関数を呼び出すことも正常に機能します。

問題は、DLL が一部の SXS フォルダに存在する MSVCR90.DLL への参照を持っていることです。

C++ で LoadLibrary を使用すると、前述のようにライブラリを使用できます。C# を使用して、ライブラリをロードする方法がわかりません。コンピュータに MSVCR90.DLL が見つからないというエラーが常に表示されます。

ライブラリのロードは次のようになります。

関数を呼び出すとsample、次のエラーのみが表示されます: HRESULT: 0x8007007E は、ライブラリが見つからなかったことを示しています。実際、ライブラリは SXS ディレクトリにさまざまなバージョンで存在します。

Dependency Walker (依存) を使用してみましたが、これまでのところ、適切なバージョンのライブラリを見つけることもできませんでした。

次のエントリを含むライブラリに付属するマニフェストもあります。

次のステートメントがマニフェストに含まれています。

要求されたバージョンは私のマシンに存在します。私はそのライブラリの新しいバージョンを出荷する VS 2010 を使用していますが、それは問題にはならないはずです。

同様の問題について議論している多くのスレッドを見つけました。依存関係の問題があることはわかっていますが、解決策がどこにも見つかりませんでした。不足している依存関係はわかっています。マニフェストがありますが、C# でも同じようにする必要がありますか? アンマネージ C++ だけではありませんか?

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

c# - C++ と C# の間のサイド バイ サイド依存関係

FireBreath Framework を使用してブラウザ プラグインを作成しています。ほとんどのロジックは C# で記述されており、ブラウザから呼び出すために C++ ラッパーを作成しました。ブラウザーは、C# プロジェクトで実際のロジックを呼び出す「プロキシ」マネージ C++ コードを呼び出す C++ ネイティブ コードを呼び出します。

だから私は3つのdllを持っています:

  • Managed C++ に依存する head ネイティブ C++ dll。
  • C# に依存するマネージ C++。
  • メイン ロジックを含む C# dll。

ユーザー ディレクトリにインストールされた 3 つの dll すべて (c:\Users\\AppData\Roaming\MyCompany\MyApp\1.0.0.0)

問題は、ブラウザーが C# dll をロードしないことです。Side by Side マニフェストを使用して依存関係を宣言します。

アセンブリを宣言する別のマニフェスト ファイルを作成しようとしました。

この依存関係へのリンクをヘッド dll (ネイティブ C++) に追加しました。

また、ヘッド dll (ネイティブ C++) で直接依存関係を宣言しようとしました。

#pragma ディレクティブを使用して依存 dll をリンクしようとしました:

Dependency Walker を使用して依存関係を確認したところ、Managed C++ と C# の間に存在しない依存関係が確認されました。

プラグインは head dll (ネイティブ C++) にアクセスでき、Managed C++ もロードしますが、Managed C++ が C# dll を呼び出すと、プラグインが失敗し、C# アセンブリが見つかりません。

C# dll をブラウザ アプリケーション (firefox.exe または chrome.exe) と同じディレクトリに配置すると、動作します。

Managed C++ と C# の間で Side By Side 依存関係が機能しないようです。

プラグインに依存する dll をロードするにはどうすればよいですか?

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

com - 別のディレクトリのdllを使用したCOMサイドバイサイドアセンブリ?

答えはノーだと確信していますが、念のために:

適切なSxSマニフェストを持つスタンドアロンexeの場合、相対パスを使用してCOM DLLを参照したり、現在のディレクトリではないディレクトリからそれらをロードしたりすることはできますか?

共通フォルダーをルートとして使用して、さまざまなパッケージ(つまり、zipファイル)をデプロイするグリッド環境で動作しています。いくつかのアプリは、共通の場所から共通のCOM Api(DLLマニフェストを含む)を参照したいと考えています。ただし、グリッド環境はサンドボックス化されているため、Windows SxSディレクトリにインストールすることはできません。また、帯域外でインストールすることもできません(つまり、グリッドによって展開されません)。

.. \ SomeCommonDir \ COM.dllまたはC:\ Program Files \ SomeCommonDir \ COM.DLLからCOM.DLLをロードすると言う希望はありますか?

すべてがプライベートアセンブリとして正常に機能します。

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

.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 実行を開始します。誰かがこの質問に光を当てることができますか?

0 投票する
0 に答える
241 参照

c# - pinvoke と sxs を試みています。コンテキストは無視され、最初の dll が使用されます

アンマネージ dll の 2 つの異なるバージョンと、それぞれのマニフェストがあります。私の C# コードでは、アクティベーション コンテキストを使用して、使用するコンテキストを制御しています。次に、P Invoke を使用して実際の呼び出しを行います。アクティベーション コンテキストの作成とアクティベーションが成功したようです。ただし、コンテキストは無視されているようで、最初に呼び出された dll が両方で使用されます。

P Invoke は SxS で使用できますか? それとも、これを間違って設定しましたか?

C# コードの C 関数の私の定義は次のとおりです。

私のマニフェストには、追加したアセンブリ ID と、Visual Studio 2010 が生成した trustInfo だけが含まれています。

ご協力ありがとうございました。

-ニック