問題タブ [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.
com - アウト プロセス ActiveX の SideBySide のシミュレーション
クライアント側の比較的複雑なアプリケーション (ActiveX / .net / Delphi / C++ / COM) を適応させて、SxS を使用して、管理者以外の展開と製品の古いバージョンからの分離を実現しています。
プロセスで使用するすべてのライブラリを記述したマニフェスト ファイルを作成することで、.net ui、Delphi ui、およびプロセスで使用する COM サーバーなど、ほぼすべてのプロセス内コンポーネントでこの目標を達成できました。登録は必要ありません。いずれかのコンポーネントのクライアントで (ほぼ)。
そして、大部分がここに来ます: 現時点では、私たちのアプリケーションは (C++ の部分から) プロセス外 ActiveX サーバー (Delphi ActiveX EXE) を呼び出し、それ自体がプロセス外 ActiveX サーバーの別のセット (サードパーティのプラグイン、ここには、Delphi、C++、ActiveX EXE プロセス外であり、インターフェイスを実装している限り、すべてのものがあります)。
私たちが知っているように、SxS はアウト プロセス ActiveX サーバーをサポートしていません。また、これらのオブジェクトをメイン プロセスの proc com サーバーのように使用することはできません。これは、アプリケーションを大幅に書き直す必要があり、最悪の場合、サード パーティのツールやベンダーによって使用される公開 API を壊す必要があるためです。許せないブレイク。
別のプロセスで実行されている Internet Explorer ウィンドウから IHTMLDocument2 を抽出する方法について説明しているこの記事に出くわしました。このアプローチを思いついた理由は次のとおりです。
ActiveX をイン プロセス サーバーとして実行するセカンダリ サテライト アプリケーション/プロセスを作成します。次に、 LresultFromObjectとObjectFromLresultを使用して、ActiveX オブジェクトの参照をサテライト アプリケーションからメイン アプリケーション プロセスに転送します。サテライト アプリケーションには、SxS モードで実行できる独自のマニフェスト ファイルがあります。
この Delphi ActiveX EXE とサード パーティの AciveX EXE プラグインとの間の通信には、同じアプローチが取られます。
com リクエストを .net に変換することにより、.net リモーティングと .net com プロキシ クラスを使用して 2 つのプロセス間の通信チャネルを開くという上記の提案されたソリューションよりも、当面は好まない代替ソリューションがあります。 2 番目のプロセスで com に戻ります。
だからここに質問があります:
- このアプローチについてどう思いますか?
- 問題のより良い解決策はありますか?
com - 分離された方法 (SxS) でのアウトプロセス COM サーバーの登録と使用
次の構成があります: IE-> 新しいプロセスを作成します-> プロセスはアウトプロセス COM サーバーを使用します
分離されたフォルダーにデプロイされた新しいプロセスとアウトプロセス COM サーバーを並べて楽しみたいと思います。相対パスで COM 登録を使用することを考えましたが、COM サーバーをロードしようとすると、svchost.exe が作業ディレクトリ (C:\Windows\System32) からロードしようとしているようです。
質問は次のとおりです。
1) アウトオブプロセスは相対パスで登録できますか?
2) アウト オブ プロセス COM サーバーでサイド バイ サイドはサポートされていますか? もしそうなら、どのように?
ありがとう、オレグ。
visual-studio - xsvcr90.dllがFlsAllocを読み込もうとすることによる問題の展開
XPで起動したくないWindows7x64上のVS2008SP1a(9.0.30729.4148)でビルドされたアプリケーションがあります。
メッセージはThe application failed to initialize properly (0x80000003). Click on OK to terminate the application.
です。確認したところ、KERNEL32.dllからロードしようとしてdepends.exe
いることがわかりました。FlsAllocはVista以降でのみ使用できます。アプリケーションでは使用されていないと思います。msvcr90.dll
FlsAlloc
問題を解決する方法は?
SxSパッケージはすでにターゲットマシンにインストールされています-実際、私は9.0 SxSの3つのバージョンすべてを持っています(初期リリース、sp1、およびsp1 +セキュリティパッチ)
アプリケーションはでコンパイルされます_BIND_TO_CURRENT_VCLIBS_VERSION=1
また、私は正しいターゲットWindowsバージョンを定義しましたstdafx.h
マニフェストファイル
依存からの結果
アドレス0x00400000で「c:\ programfiles \ app \ app.EXE」(プロセス0xA0)を開始しました。モジュールを正常にフックしました。アドレス0x7C900000に「c:\ windows \ system32\NTDLL.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x7C800000に「c:\ windows \ system32\KERNEL32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x785E0000に「c:\ programfiles \ app\MFC90.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x78520000に「c:\ programfiles \ app\MSVCR90.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x7E410000に「c:\ windows \ system32\USER32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77F10000に「c:\ windows \ system32\GDI32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77F60000に「c:\ windows \ system32\SHLWAPI.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77DD0000に「c:\ windows \ system32\ADVAPI32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77E70000に「c:\ windows \ system32\RPCRT4.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77FE0000に「c:\ windows \ system32\SECUR32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77C10000に「c:\ windows \ system32\MSVCRT.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x5D090000に「c:\ windows \ system32\COMCTL32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x76380000に「c:\ windows \ system32\MSIMG32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x7C9C0000に「c:\ windows \ system32\SHELL32.DLL」をロードしました。モジュールを正常にフックしました。アドレス0x77120000に「c:\ windows \ system32\OLEAUT32.DLL」をロードしました。モジュールを正常にフックしました。ロードされた"c:
Windows SDK 7がインストールされ、デフォルトのSDKとして構成されていることを述べておく必要があります。
visual-studio-2008 - Visual Studio 2008 で mt.exe にマニフェスト ファイルを正しく埋め込むことはできますか?
mt.exe
VCPROJ 内で実行すると、マニフェスト ファイルを正しく作成して実行可能ファイルに埋め込むことができないことがわかりました。
たとえば、同じ実行可能ファイルは Windows 7 ではうまくロードされますが、Windows XP ではロードできませんでした。マニフェストは埋め込まれ、正しいものでした。
失敗する場所は次のcrtlib.c
とおりです。
これにより、 http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/2d6af19a-6ead-4c00-a896-871a28c5f7f1に送られました
考えられる理由と解決策を探すのに何時間も費やしました。プロジェクト設定を変更して、exe ファイルの外部にマニフェストを生成しました。現在、両方のシステムで動作します。
デバッグ ビルドの例を次に示します。
埋め込みを無効にした場合:
これは埋め込みを有効にしたものです:
それらを比較すると、2番目のものは共通のコントロールを追加します(どこからかわかりません)。また、requestedExecutionLevelタグの構文との小さな違いです。
問題は、mt.exe にマニフェストを正しく埋め込むことができるかどうか、およびその方法です。
.net - SxS を使用し、マニフェスト ファイルが使用されている場合、.net 呼び出し COM は他の .net COM オブジェクトを呼び出しますか?
COM コンポーネント (C++) を呼び出す .net アプリケーションがあり、.NET で実装された別の COM オブジェクトを呼び出します。
このアプリケーションは Windows SxS 機能を使用しており、COM コンポーネントを登録していません。C++ で書かれたものでも、.net で書かれたものでもありません。
C++ COM コンポーネントへのこの最初の呼び出しは正常に機能します。しかし、C++ COM コンポーネントが .net コンポーネントを呼び出すと、クラスが登録されていないため失敗します。
.net コンポーネントを呼び出すマニフェスト ファイルを使用して小さな C++ アプリを作成しようとしましたが、動作します。流れが.net→COM NATIVE→.NET COMのときのようです。するとSxSが壊れて動かなくなります。
Fusion ログ (アセンブリの読み込みログ) を見ると、誰も .NET COM アセンブリを解決しようとしていないことがわかります。
この SxS シナリオは動作するはずですか (動作するはずだと思います)? はいの場合、何が間違っているのでしょうか?
これらは私が使用しているマニフェスト ファイルです。
.net アプリケーションのアプリ マニフェスト (リソースとして埋め込まれています):
application.sxs.manifest (通常のファイル):
PerformanceMonitor マニフェスト (XP の .net com バグを回避するために、PerformanceMonitor.dll にリソースとして埋め込まれています):
c# - COM 相互運用のサイド バイ サイド アセンブリ
同じ C# .NET プロジェクトの複数のバージョンをデプロイする必要があります。プロジェクトの出力は、ネイティブ アプリケーションで使用される COM 相互運用アセンブリです。私が抱えている問題は、このアセンブリのいくつかのバージョンを並べて展開する必要があることですが、何をしても異なるバージョンが作成されないようです。代わりに、バージョンは互いにオーバーライドします。
アセンブリの GUID の変更、アセンブリのバージョン番号の変更、アセンブリの厳密な名前キーの再生成、アセンブリのタイトルと説明の変更を試みました。バージョン管理のために、アセンブリ内の個々の型の GUID または名前を変更する必要はありません。
これらのバージョンが互いに上書きされないようにし、それらを並べて表示およびデプロイできるようにするにはどうすればよいですか?
前もって感謝します!
windows - WinForm で作業するとアクティベーション コンテキストが失われますか?
分離展開でネイティブ COM dll のいくつかのクラスを使用するアプリケーションがあります。
簡略化:
実行時に、マニフェスト ファイルを含む dll を登録せずに特定のディレクトリにダウンロードします。
次に、そのディレクトリを指すアクティベーション コンテキストを作成し、その後、dll からクラスのインスタンスを作成します。
クラスAを作成し、しばらくしてクラスBを作成するとしましょう。
この流れですべてうまくいきます。
アプリケーションを WinForm に変更したときに問題が発生しました。「ボタン 1」が押されると、前と同じようにアクティベーション コンテキストを作成し、次にクラス A のインスタンスを作成します。これはうまく機能し、フローは WinForm に戻ります。ただし、「ボタン 2」を押すと、クラス B の作成に失敗します。クラスが見つからないという例外が発生します。
そのため、WinForm が何らかの形で私のアクティベーション コンテキストを台無しにしているようです。
何故ですか?そこで何が起こっているのですか?
それを回避する方法はありますか?
いくつかのメモ:
sxstrace.exe を使用してアクティベーション コンテキストの作成を追跡しようとしましたが、アクティベーション コンテキストの作成のみがログに記録されました。
Application.EnableVisualStyles() をコメントアウトしようとしましたが、役に立ちませんでした。
アクティベーションコンテキストの作成と破棄でdllへの各呼び出しをラップすると機能しますが、当然そこに行きたくありません...
c++ - COM無料登録のデバッグ(c ++)
2つのCOMサーバーdllを使用するCOMクライアントアプリケーションを作成しました。このアプリケーションをCOM登録なしで実行したい-つまり:winsxs / .manifests
クライアントアプリケーションからCOMオブジェクトのインスタンスを作成しようとすると、(...ほぼ予想される...)「クラスが登録されていません」というメッセージが表示されます。
私は以前にその種の構成を成功させましたが、なぜこれが失敗するのか理解できません。
詳細は次のとおりです。
- 私が持っているモジュール:
- 2つのCOMサーバー(dll1.dllおよびdll2.dll)に依存するMFCクライアント
- dll1.dllCOMサーバーはdll2.dllに依存します
- dll2.dllにはCOMの依存関係はありません
私が持っているCOMオブジェクト:
- dll1.dll(.idl言語)
-
-
- dll2.dllで
-
-
- クライアントの呼び出し
-
-
- client.exe.2.manifest
-
-
sxsアクティベーションコンテキストの生成中にエラーは発生しません:-Windowsログにエラーはありません(マニフェスト構文が正しいことを意味します)-sxstraceによってエラーが検出されませんでした(ログは「INFO:ActivationContextgenerationsucceeded。」メッセージで終了します。エラーまたは疑わしいメッセージ。さらに、マニフェストが正しくロードされていることがわかります)
何か案が?
sxstraceを使用してsxsをより深くデバッグする方法はありますか?たとえば、実際に登録されたcomまたはclrクラスのリストを取得しますか?
よろしくお願いします
deployment - サイド・バイ・サイドのマニフェスト、熱くなったり、恵みから落ちたりしますか?
最近、クライアントで .dll 地獄の問題がいくつか発生しているため、必要な .dll と .ocx の SxS インストールが適切かどうか疑問に思っていました。私はそれについて読み、マニフェストを介して依存関係の少なくとも一部が提供されたときにアプリケーションの展開に成功しましたが、それはまだ推奨される展開方法ですか、それともここ数年の流行であり、現在は徐々に放棄されていますか?
c++ - 欠落しているメソッドの奇妙なケース:SXSとControls。「オブジェクトはこのプロパティまたはメソッドをサポートしていません」という結果を追加しますか?
UserControlを使用するVB6で記述されたプロジェクトがあります。プロジェクトは、OCXが登録されている場合は正常に実行されますが、同じプロジェクトを並べて実行すると、エラーが発生します。
コントロールが静的にロードされている(フォームに前に追加されている)限り、問題なくコントロールを使用できますが、新しいコントロール(プロパティまたはメソッド)の使用時にフォームに動的コントロールを追加すると、次のエラーが発生します。
オブジェクトはこのプロパティまたはメソッドをサポートしていません
このエラーは次のように再現できます。
- VB6でOCXプロジェクトを作成する
- ユーザーコントロールを追加する
DoSomething
コントロールなどにメソッドを追加します- exeプロジェクトを作成する
- フォームにコントロールを追加します。例:
UserControl1
- イベントコールで
DoSomething
次のように動的にロードします。
/li>
WinDbgのエラーを追跡しましたがIDispatch::GetIDsOfNames
、2番目のケースで呼び出されたときに失敗します。
何か案が?!
編集:私の悪い、ここにマニフェストがあります。