14

Visual Studio2010を使用してC++でとてつもなく単純なシェル拡張機能を作成しようとしていますが、出発点として機能する例を入手することすらできないようです。

私はWindows7x64を使用しています。

このVisualStudioテンプレートを試しましたが、テンプレートをVS2010で機能させると、修正方法がわからないエラーが多数発生します。

シェル拡張機能を作成するための完全な馬鹿ガイドを試しました。デモがコンパイルされると、適切なレジストリ設定などがすべて作成されますが、コンテキストメニューが表示されません。

このC#COM相互運用機能の例を見てきましたが、この記事のおかげでC#を使用しても安全かどうかについて混乱しました*が、.NET4をサポートしているので使用しても問題ないようです。処理中のCLRホスティングを並べて表示します。

  • つまり、歴史的に2つのバージョンの.NETを同じプロセスで実行することはできず、シェル拡張機能が機能する方法は、プロセスに自分自身を注入することです。したがって、.NET3.5が.NET2プロセスに注入された場合-bang

では、今.NET 4.0を使用できますか?

単純なシェル拡張機能を追加する、機能するダウンロード可能なVS2010ソリューションはありますか?

以前はC++でそれほど悪くはありませんでしたが、.NETに何年も成形した後、私はかなり錆びていました。そのため、既存の例で発生しているエラーのホストを修正するために詳細をいじっています。証明しています...厄介です!

私は自分自身を壊して自分が何を間違えたかを理解することができるということから始めて、本当にきれいな状態で行うことができました!

4

4 に答える 4

7

私はしばらくこれに苦労し、x64の問題とSDKの違いのために、コードプロジェクトの記事での成功は限られていました。

私は最近プロジェクトをバックアップし、MSオールインワンコードサンプルの使用をやり直しました。非常に満足しています。簡単なサンプルコンテキストメニューが作成され、x64はすぐに使用できます:http ://code.msdn.microsoft.com/windowsdesktop/CppShellExtContextMenuHandl-410a709a

マシンで実行するには:

  1. オールインワンのサンプルブラウザからコードをダウンロードするか、直接リンクを使用してください。
  2. 管理者権限でVSでプロジェクトを開く
  3. ビルド構成をx64に切り替えて、ビルドします
  4. すべてのエクスプローラーセッションを強制終了します
  5. 新しいdllを見つけて、zippy32.exe。\CppShellExtContextMenuHandler.dllを実行します。
  6. エクスプローラーを再度開き、.cppファイルを右クリックして新しいメニューを表示します
  7. /uフラグを指定して同じコマンドを実行して削除します

私の次のステップはデバッグを機能させることであり、これでうまくいくと思います:msdn

于 2012-01-22T14:44:31.930 に答える
1

C++拡張機能のWindows7x64では、x64プロジェクトとしてビルドする必要があります。Visual Studio 2010では、ATLウィザードに、プレビューウィンドウのサポート、サムネイル、およびWindowsサーチのサポートを提供するシェル拡張プロジェクトを作成するオプションがあります。私は最近これを使用しましたが、一度構築すると何も起こらないようでした。ただし、プロジェクト構成を切り替えてx64 dllをビルドすると、機能します。

.Netの使用に関して-Explorerは、別のサブプロセスでプラグインを起動するようになりました。したがって、.net 4.0にリンクするシェル拡張をロードしても、ホスティングサブプロセスのみが実際にそのCLRをロードするため、そのバージョンの.netですべてが汚染されることはありません。これを含む新しいプロセス(prevhost)が起動されると、プレビュー拡張機能を使用してこれを確認できます。

于 2011-02-25T22:02:35.487 に答える
0

私はこれを機能させました:http://www.codeproject.com/Articles/174369/How-to-Write-Windows-Shell-Extension-with-NET-Lang

RegAsm.exe必ず、登録解除/登録解除の権利を使用してください。

  • 32ビットプラットフォーム:x86 /AnyCPU用にコンパイルします。を使用しC:\Windows\Microsoft.NET\Framework\vXYZ\RegAsm.exeます。
  • 64ビットプラットフォーム:x64 /AnyCPU用にコンパイルします。を使用しC:\Windows\Microsoft.NET\Framework64\vXYZ\RegAsm.exeます。

XYZこれは、コンパイルに使用した.NET Frameworkのバージョンです。)

ただし、Microsoftはシェル拡張に.NETを使用しないことを推奨していることに注意してください。

于 2013-08-01T12:46:35.643 に答える
0

「C#を使用できますか」に対する簡単な答えは「いいえ」です。これは、インプロセス拡張機能を実装するためのMicrosoftのガイダンスによるものです。「特に注目すべきランタイムの1つは、マネージコードまたは.NET Frameworkとも呼ばれる共通言語ランタイム(CLR)です。Microsoftは、WindowsエクスプローラーまたはWindows Internet Explorerにマネージドインプロセス拡張機能を記述しないことを推奨しており、サポートされているシナリオとは見なしていません。 。」この問題は、アプリケーションで使用できる.NETのバージョンが1つだけであり、複数の.NET拡張機能が使用されている場合にその制限を適用する方法がないために発生します。

于 2017-09-05T01:17:38.790 に答える