none
Windows8.1でシェル拡張ができない RRS feed

  • 質問

  • シェル拡張を行ってプロパティのシートを追加したいのですがうまくいきません。

    Visual StudioのオンラインC++サンプルでC++ Windows Shell property sheet handler

    (CppShellExtPropSheetHandler)をインストールし、

    ビルドしてDLLを作成。コマンドプロンプトにて登録を行ったのですがプロパティシートの

    追加が出来ませんでした。

    プログラム自体は対応する拡張子を変えただけでほとんどいじらずにビルドしたのですが、

    サンプルのままの状態ではシェル拡張できないのでしょうか。

    Windows8.1 Pro 64bit を使用してます。

    regsvr32コマンドで登録すると成功の表示は出ますが実際には追加できていない状態です。

    Windows7でも行いましたが、そちらではシートを追加できました。


    2016年10月19日 1:29

回答

  • 同じサンプルをダウンロードして試してみましたが、Windows 8.1 (x64) でシェル拡張できました。

    とっちゃんさんがおっしゃるようにx64でビルドしたDLLをregsvr32登録し、Windowsサインインしなおしたらプロパティシートが追加されました、x86の登録ではDLLではプロパティシートはつきませんでした。

    • 編集済み kenjinoteMVP 2016年10月19日 2:29
    • 回答の候補に設定 星 睦美 2016年10月19日 5:56
    • 回答としてマーク Linax_2 2016年10月21日 5:47
    2016年10月19日 2:24
  • ソースコードを追いかけた範囲では、".hoge" と、'.' を付けた形で拡張子を渡していれば問題はなさそうです。

    うまく登録されているかどうかは、ソースコードを見つつ、実際のレジストリを確認してみるといいと思います。

    Readme.txt に、VisualStudio.10.0(VS2010だったと思います)の場合を例にしたレジストリの rgs イメージが出ていますので、参考に確認してみてください。

    拡張子を変更したのが問題なのではなく変更する先の拡張子に関係する環境依存の問題だと思います。外部の人間では把握しかねる部分があるので、Regeditなどを利用しつつ実際の設定状況を確認しながら作業することをお勧めします。


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    • 回答としてマーク Linax_2 2016年10月20日 1:48
    2016年10月19日 6:24

すべての返信

  • そのシェル拡張は、DLLですよね?64bitOSの場合、エクスプローラは64bit版です。そのため、インプロセス(DLL)で動くシェル拡張は、64bit版を作る必要があり、登録処理も含めすべて64bit用の値で設定となります。

    そのあたりは問題ないでしょうか?


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    • 回答の候補に設定 星 睦美 2016年10月19日 5:55
    2016年10月19日 2:03
  • 同じサンプルをダウンロードして試してみましたが、Windows 8.1 (x64) でシェル拡張できました。

    とっちゃんさんがおっしゃるようにx64でビルドしたDLLをregsvr32登録し、Windowsサインインしなおしたらプロパティシートが追加されました、x86の登録ではDLLではプロパティシートはつきませんでした。

    • 編集済み kenjinoteMVP 2016年10月19日 2:29
    • 回答の候補に設定 星 睦美 2016年10月19日 5:56
    • 回答としてマーク Linax_2 2016年10月21日 5:47
    2016年10月19日 2:24
  • 回答ありがとうございます。x64でビルドし、DLLを作成してあります。
    2016年10月19日 5:42
  • 回答ありがとうございます。新しく作成し直してDLLを作成、登録したところプロパティシートが追加されました。ただ、拡張子の部分を変更して登録したら再び対象の拡張子ファイルのプロパティに表示されなくなってしまいました。追加の質問で申し訳ないのですが、対応する拡張子の記述はdllmain.cppの2箇所だけではないのでしょうか。
    • 編集済み Linax_2 2016年10月19日 5:53
    2016年10月19日 5:52
  • ソースコードを追いかけた範囲では、".hoge" と、'.' を付けた形で拡張子を渡していれば問題はなさそうです。

    うまく登録されているかどうかは、ソースコードを見つつ、実際のレジストリを確認してみるといいと思います。

    Readme.txt に、VisualStudio.10.0(VS2010だったと思います)の場合を例にしたレジストリの rgs イメージが出ていますので、参考に確認してみてください。

    拡張子を変更したのが問題なのではなく変更する先の拡張子に関係する環境依存の問題だと思います。外部の人間では把握しかねる部分があるので、Regeditなどを利用しつつ実際の設定状況を確認しながら作業することをお勧めします。


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    • 回答としてマーク Linax_2 2016年10月20日 1:48
    2016年10月19日 6:24
  • とっちゃんさん、回答ありがとうございます。

    レジストリを見る限り、最初の登録は上手く出来ているようです。もう一度確認しながら原因を探してみます。

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

    2016年10月20日 1:46