none
Help.ShowHelpで異なるパスにある複数のHelpを開く方法は? RRS feed

  • 質問

  • 鈴木@KEGと申します。

    Visual Studio 2005 - C# で、Windows Form アプリケーションを作成しています。

     

    二つの HtmlHelp (*.chm) を、異なるフォルダに配置して、Help.ShowHelp で開くと、一つ目のHelpしか開けない現象が発生しました。

     

    Code Snippet

    private void button1_Click(object sender, EventArgs e)
    {
       Help.ShowHelp(new Control(), "c:/Help/a/aaa.chm");
    }

     

    private void button2_Click(object sender, EventArgs e)
    {
       Help.ShowHelp(new Control(), "c:/Help/b/bbb.chm");
    }

     

    上記の例だと、先に表示したHelpを閉じた後は、どちらのボタンをクリックしても先に表示したHelpしか表示されません。

     

    Windows 2000、XP のみ発生し、Vistaは発生しません。

    二つのHelpが同じフォルダにあれば、この現象は発生せずに、二つのHelpが同時に表示できます。

     

    HtmlHelp APIを使っても同じ現象が発生するので、仕様か不具合なのでしょうか。

    上手い回避策をご存知の方、いないでしょうか?

     

    カレントパスを設定(System.IO.Directory.SetCurrentDirectory("c:/Help/a/");)するは試してみましたが、現象は変わりませんでした。

    2007年8月28日 11:05

回答

  • 上記のコードをVisual C# 2005 Express Edition で作り

    Windows 2000 SP4上で動作させてみました。

    結果、私の環境では再現しませんでした。

    ちなみにHelpはaaa.chmはサクラエディタ、bbb.chmはirfanViewのものを使いました。

    二つを同時に表示する、片方を表示し閉じた後に別のHelpを表示する、どちらのパターンも問題なく表示できました。

    再現されるためには何か他の条件があるかもしれません。
    2007年8月30日 12:40

すべての返信

  • 上記のコードをVisual C# 2005 Express Edition で作り

    Windows 2000 SP4上で動作させてみました。

    結果、私の環境では再現しませんでした。

    ちなみにHelpはaaa.chmはサクラエディタ、bbb.chmはirfanViewのものを使いました。

    二つを同時に表示する、片方を表示し閉じた後に別のHelpを表示する、どちらのパターンも問題なく表示できました。

    再現されるためには何か他の条件があるかもしれません。
    2007年8月30日 12:40
  • C.Johnさん、検証ありがとうございます。

    煮詰まっていたので、視点を変えるキカッケになりました。確かに、Help側の問題の様です。

    # VistaでOKだったのは、検証方法に誤りがあり、どのOSでもダメでした。

     

    視点を変えて検証したら、あっさりと原因が分かりました。

    Help(*.chm)のショートファイル名が同じだと、異なるフォルダにあるHelpが同じファイルと扱われてしまっている様です。

     

    サンプルコードは、Helpファイル名を省略していましたが実際は、"XXXXXXXX_en.chm" (XXXXXXXX が製品コード)、と、"XXXXXXXX_xxx_en.chm" としてあり、ショートファイル名に変換した結果が同じでした。

     

    他製品のHelpファイルを拝借して、名称を変えて検証した所、同様の結果が出たのでHelpの中身は影響ないようです。

    ----------

    検証中に、VistaでProgram FilesにHelpファイルを書き出す方法に挑戦してみました。

    しかし、VistaのVirtualStoreへリダイレクトは、*.chm ファイルでは動作しない様です。

    FileStreamでファイルを作成するのも、MoveToで名称変更するのもNGでした。
    2007年8月31日 0:22