問題タブ [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.
c# - pinvoke と sxs を試みています。コンテキストは無視され、最初の dll が使用されます
アンマネージ dll の 2 つの異なるバージョンと、それぞれのマニフェストがあります。私の C# コードでは、アクティベーション コンテキストを使用して、使用するコンテキストを制御しています。次に、P Invoke を使用して実際の呼び出しを行います。アクティベーション コンテキストの作成とアクティベーションが成功したようです。ただし、コンテキストは無視されているようで、最初に呼び出された dll が両方で使用されます。
P Invoke は SxS で使用できますか? それとも、これを間違って設定しましたか?
C# コードの C 関数の私の定義は次のとおりです。
私のマニフェストには、追加したアセンブリ ID と、Visual Studio 2010 が生成した trustInfo だけが含まれています。
ご協力ありがとうございました。
-ニック
vb6 - VB6でReg-Free COMアプリケーションを開発する
多くの COM コンポーネント (DLL および OCX) を含む VB6 アプリケーションを維持しています。開発と展開を合理化するために、reg-free com を使用したいと考えています。開発の問題は、アプリケーションが VB6.EXE インスタンス内で実行されることです。VB6 をだまして (未登録の) コンポーネントを使用させるにはどうすればよいですか? ブランチを切り替えるときにコンポーネントの登録/登録解除を行う必要がないことは、私にとって非常に重要です。VB6 の .manifest ファイルを生成することは問題外ではありませんが、VB6.EXE を起動するときに .manifest ファイルを指定するための、より最適な方法はありますか?
注: アクティベーション コンテキスト API は、開発環境内から使用しても役に立たないようです。
私が考えた解決策:
- マニフェストからコンテキストをアクティブ化し、VB6 を子プロセスとして起動するユーティリティ アプリケーション (動作しません。プロセスはアクティブ化コンテキストを継承しません)
- 起動時にコンテキスト アクティベーションを VB6 プロセスに挿入する (複雑すぎる; これを行うには、実行可能ファイルをハックする必要があります)
- 適切なコンテキストをアクティブ化した後、自分のプロセスで VB6 をホストする (これが可能かどうかさえわかりません)
- VB6アドインまたはVB6内で実行されるその他のユーティリティを使用してコンテキストをアクティブ化します(試してみましたが、うまくいかないようです)
1月16日更新
wqwで提案されているように、VB.exe.manifestでいくつかのテストを行いました。VB6.exe.manifest は機能しましたが、いくつかの注意事項があります。
- マニフェストで指定された SxS dll は、実際にはコンポーネントを参照していないプロジェクトの参照ウィンドウに表示されませんでした。
コンポーネントを参照したプロジェクトでは、次の順序に従ってディレクトリに存在することが示されます。
- プロジェクト ファイルに記録されたパス名 (ファイルがまだ存在する場合)
- プロジェクトと同じフォルダーに存在するかのようなパス名 (vbp)
ファイルがこれらのフォルダーのいずれにもない場合、プロジェクトはコンパイルされず (コードを実行するだけで VB6 で内部コンパイルが発生します)、「プロジェクトまたはライブラリが見つかりません」というメッセージが表示されます。
当然のことながら、VB6 は実際にレジストリをスキャンして COM コンポーネントを見つけ、コンパイル中に存在することを確認します。実際にVB6.exe.manifestを使用してCOMコンポーネントのインスタンス化をリダイレクトしたい場合、それが何を意味するのかわかりません。おそらく、定義済みの場所にダミーのコンポーネント ファイルがあると、まったく異なるコンポーネント セットがロードされて使用されるにもかかわらず、VB6 はすべてが正常であると信じ込ませる可能性があります。
さらに更新:
最後の仮定についてテストを行ったところ、それは誤りであることが判明しました。プロジェクトをコンパイルするには、コンポーネントが実際に存在する必要があります。適切にロードする必要があります (ダミーのゼロ長ファイルは受け入れられません!)。マニフェストが機能するかどうかさえわかりません。これは、より時間のかかるテストです (1 つはプロジェクト用、もう 1 つはマニフェスト用の、異なる結果を生成する 2 つのバージョンを持つコンポーネントが必要です)。
java - Java SxS (サイド バイ サイド) 構成
Windowsでサイドバイサイド(SxS)でJavaアプリを実行しようとしているときに、非常にあいまいな問題に直面しています。
JRE と同じフォルダーにある java.exe.config および java.exe.manifest ファイルを作成するすべての準備を完了しました。
コマンド ラインから (.bat ファイルを開始して) アプリケーションを呼び出すと、アプリケーションは正常に実行されます。.bat ファイルは、SxS で構成された Java を使用します (これは、アプリケーションを実行しているボックス内の唯一のものです)。
Runtime.getRuntime.exec()
ただし、別のJavaプロセス内から(を使用して)呼び出そうとするProcessBuilder
と、SxS構成が完全に無視され、子JavaプロセスがCOMライブラリを見つけることができないと不平を言っているため、SxSを実行する必要がありました。親 Java プロセスも、SxS 用に構成された Java.exe によって起動されることを付け加える必要があります。したがって、" Runtime.getRuntime(), ProcessBuilder()
" によって Java SxS がロードされた環境が得られると思います。
いくつかの Windows ツール (procexp.exe、procmon.exe) を使用してさらにデバッグを行うと、次のことがわかりました。 )。ただし、別のプロセスが Java によって生成された場合、.manifest ファイルはまったく考慮されません。私が考えることができる1つの問題は、プロセスを開始するJava.exeの現在のディレクトリが、java.exe.manifestファイルが配置されているものと同じではないことです。
私が考えることができる唯一のことは、Javaランチャーのバグ/問題(または機能と呼ぶかもしれません)です。
誰かが同様の問題を抱えていましたか?誰かが上記に光を当てることができますか? とても有難い。
これまでのところ、私は次のことを試しました:
- .bat ファイル内から Java プロセスを実行します。働いた
- を使用して、親 Java プロセスから Java プロセスを呼び出しました。
Runtime.getRuntime().exec(). DID NOT WORK
Invoked the .bat file from a parent Java process using Runtime.getRuntime().exec()
. 動作しませんでした- ProcessBuilder を使用して、.manifest ファイルがある現在のディレクトリを設定しました。動作しませんでした
java - ダブルクリックに似た Java でのスポーン プロセス
私はJavaアプリケーションを持っていて、それをダブルクリックするのと本質的に同じことをする新しいプロセスを生成したいと思います(.batファイルを開始します)。
そのプロセスを生成するために、両方を試しRuntime.getRuntime().exec()
ました。ProcessBuilder
これらのアプローチはどちらも機能します (.bat ファイルを開始できます)が、私の問題は、ダブルクリックした場合と実際にはまったく同じことをしないことです。
具体的には、この .bat ファイルは、Windows SxS を使用して (サイド バイ サイドで) 実行するように構成された JVM (java.exe MyMainClass) を起動します。したがって、適切なjava.exe.configおよび java.exe.manifestファイルを作成しました。それをクリックすると、Java アプリケーションが起動し、適切な .dll が正常にロードされます (SxS が必要な理由)。
私の問題は、ProcessBuilder
またはを使用してまったく同じ.batファイル(まったく同じ引数とプロセス環境で)を開始Runtime.getRuntime().exec()
すると、SxS構成が考慮されていないように見えるため、必要な.dllはまったくロードされず、エラーが発生します。
この.batファイルをダブルクリックしたときにWindowsが起動するのと同じ方法でこの.batファイルを起動する方法を知っている人はいますか? さらに、Java SxS 展開の経験がある人はいますか? ProcessBuilder が私の SxS 構成を無視する理由がよくわかりません。
前もって感謝します。
c++ - 同じ名前の DLL を並べて読み込む方法 (Visual Studio)
について質問がありside-by-side assemblies
ます。
状況は次のとおりです。
ディレクトリapp.exe
を検索してプラグインをロードする実行可能ファイルがあります。に依存します。plugins
app.exe
A.dll
A.dll
同じ名前の古いカスタマイズされたバージョンに依存するプラグインを開発しています。A.dll
このカスタマイズされた古いバージョンを新しいバージョンに更新することは不可能なので、2 つのファイルを同時にロードできるのではないかと考えました。
ディレクトリ構造は次のとおりです。
どちらのバージョンもA.dll
、多数の他の DLL に依存しており、同様のバージョンの問題が発生する可能性があります。(違いがある場合は、64 ビット アプリケーションで作業していることにも言及する必要があります。)
Visual Studio でこれを設定して、両方のA.dll
ライブラリを同時にロードできるようにするにはどうすればよいmyplugin.dll
ですapp.exe
か?
windows - プログラムの 64 ビット バージョンを実行できません
既存のプログラム (いくつかの依存 DLL を含む EXE) の 64 ビット バージョンをビルドしようとしています。Linux では (再コンパイルするだけで) 非常に簡単だったので、Windows でも何とか似たようなものになるだろうと楽観的でした。残念ながらそうではありません...
新しくコンパイルした EXE を起動すると、エラー メッセージが表示される
その理由を突き止めて、次のエラー メッセージを示す SxS トレースを作成しました。
だから..これはどういう意味ですか?そして、どうすれば問題を解決できますか? x64 用の VS2010 再頒布可能パッケージのインストールはトリックではありませんでした。ここでは、インストーラーが既にインストールされている新しいバージョンについて不平を言っています...
マニフェスト ファイルに一部の X86 が記載されています...これが理由ですか? はいの場合: どの X(& DLL にまだ依存しているか) を調べるにはどうすればよいですか?
c# - C#、sxstrace、ビジュアル スタジオ
質問があります。場合によっては、サイド バイ サイド エラーが発生することがあります。このタイプのエラーの解決策を得るには、sxstrace.exe という便利なツールがあります。
そのため、マニフェスト ファイルにいくつかのエラーがあるプログラム (TestProgram.exe) を起動すると、エラーが表示され、sxstrace を使用して、このエラーが発生した理由に関する情報を取得できます。
しかし、私には1つの問題があります。C# で sxstrace.exe を使用してプロセスを開始し、マニフェスト エラーでプログラム (TestProgram.exe) を開始すると、sxstrace.exe はエラーをトレースしません。シェルから sxstrace.exe を起動すると、すべてのエラーがトレースされます。
ここに質問があります:それはなぜですか?C# から sxstrace.exe を起動して、すべてのエラーをトレースするにはどうすればよいですか?
編集: C# プログラム (sxstrace プロセスを開始している) が管理者権限で開始されている限り、sxstrace プロセスも管理者権限で開始されていると思います。
c# - コードベース/GAC を使用せずに C# .NET DLL で登録不要の COM 相互運用機能を使用していますか?
マニフェスト ファイルを生成した COM Interop を介して公開される C# .NET DLL があります。DLL は、オブジェクトを作成するために Excel VBAProject を使用して消費されてCreateActCtx
いCreateObject
ます。
すべて正常に動作しますがregasm MyProject.dll /codebase
、GAC に電話または登録する必要があります。そうしないと、ActiveX component can't create object
またはerror in dll
エラーが発生します。
DLL をまったく登録せずに .NET DLL を使用することは可能ですか? 以前は、VB6 ベースの DLL とマニフェスト ファイルを使用してこれを行うことができました。