none
HTML Help Workshop で EXEファイルを起動する時のメッセージ RRS feed

  • 質問

  • 以下のページを参考に、

    internet explorer から自身のパソコンに保存してある

    exeファイルを起動させることができました。

       http://q.hatena.ne.jp/1145354904

       (WScript.Shellによる起動

    作成したhtmlのファイルを、HTML Help Workshopでコンパイルすると、

    同様に起動させることができました。

    しかし、.chmファイルの場合、起動時に表示されるメッセージで、『 いいえ 』をクリックすると、

    ページの更新(手動、F5)を行っても、internet explorerの様に、再度『 ActiveX 』のメッセージは

    表示されず、エラーメッセージが表示され、.chmファイルを開き直さない限り『 ActiveX 』のメッセージを

    表示させてexeファイルを起動させることができません。

    Internet explorerの様に、ページの更新(手動、F5)などを行ったらexeファイルを起動可能、

    という方法は確認できますか?

    インストールした HTML Help Workshop は、Microsoft Office 2003 に収録されている物でなく、

    Microsoft社のページからダウンロードした物です。

       https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms669985(v=vs.85).aspx

    HTML Help Workshop のヘルプで確認できる、ショートカットによる

    exeファイルの起動は、今のところ考えていません。


    2018年1月19日 2:39

回答

  • 『 exeファイル 起動 』等で検索していたら、以下のページを見つけ、
    『 ショートカットから起動させた、コマンドプロンプトによる起動 』という方法を試していました。

         http://c4se.hatenablog.com/entry/2012/10/19/230718

    上記ページにある様に、<PARAM>、Item1、value のプログラム名 入力部分に、実行後のオプションを
    付けて入力すると、『 Unable to start~ 』となり起動できませんでした。
    『 cmd.exe 』のみだと、コマンドプロンプトを起動させる事が出来ました。
    オプションを コマンドプロンプト に渡せないかと試していた所、value の3番目の項目に
    実行後のオプションを入力することで可能であることが解る。コマンドラインと考えていたが、
    HTML Help Workshop のヘルプに『 パラメータ 』とある様に、そのままの意味であるという事
     (参考 http://e-words.jp/w/パラメータ.html)。

    起動させる.exeファイルのパス指定がうまくいかず、エラーが表示されていましたが、
    コマンドプロンプト起動時に表示されているパスを見て、パス区切り記号を『 \ 』にする事で
    パス指定出来ました。この時、ショートカットからコマンドプロンプトを起動すると、
    『 カレントディレクトリが起動させた.chmファイルのあるフォルダになる 』事を確認しています。
    .chmファイルのあるフォルダ内のサブフォルダ、ファイルのパスは、利用者のファイル保存環境に
    関係なく一定になる為、サブフォルダ、ファイルのパスを入力すれば起動可能という事になります
     (WScript.Shellで絶対パスを取得する方法は、考え方が似ていて、location.pathname で
      開いているページのパスを変数に取得し、変数内の.chmファイルのパス部分をsubstringや
      replaceで不要部分削除とパス区切り記号変換して取得し、一定になる.exeファイルのパスを
      足して取得しています)。

         <PARAM name="Item1" value=",cmd.exe,/k フォルダ名\ファイル名.exe">

    上記の方法だと、.exeファイルとコマンドプロンプトが一緒に起動される状態です。
    下記方法に変えると、.exeファイルを閉じるとコマンドプロンプトが自動で終了する
    ようになりました。

         <PARAM name="Item1" value=",cmd.exe,/c フォルダ名\ファイル名.exe">
         <PARAM name="Item1" value=",cmd.exe,/k フォルダ名\ファイル名.exe & exit">

    .exeファイルを起動したら、コマンドプロンプトを閉じる方法を色々と試していましたが、
    以下のページの内容通りに入力してみたら、成功しました
    (参考 itpro.nikkeibp.co.jp/article/Windows/20051005/222261/ → cmd、start)
     (『 cmd /c 』で『 start 』コマンドを実行し、『 start 』コマンドがアプリケーションとして
      .exeファイルを起動、オプション『 /c 』によりコマンドが実行された為、コマンドプロンプトが
      終了する)。

         <PARAM name="Item1" value=",cmd.exe,cmd /c start フォルダ名\ファイル名.exe">

    上記の方法だと、パス指定で使用できる文字に制限がある事を確認しています。
    以下のページの様に、起動させる.exeファイルのディレクトリまで移動して起動する方法に変えると、
    パスに制限文字(【】等)が含まれていても起動できました
     (参考 http://language-and-engineering.hatenablog.jp/entry/20081028/1225160338 → (3)、(4))
     (制限文字がカレントディレクトリまで含まれている場合は、上記の方法による起動可能)
     (上記方法での制限文字は、一定になるパス部分での事)
     (下記、.exeファイルのファイル名に制限文字が含まれている場合は、起動できる)
     ("は、絶対パス指定の場合)。

        <PARAM name="Item1" value=",cmd.exe,cmd /c cd フォルダ名 & start ファイル名.exe">

    コマンドプロンプトが一瞬表示されますが、質問している目的が、
    『 .exeファイル起動時のメッセージによるエラーで起動できなくなる 』という事で、
    この問題には対応できていると思います。

    『 URLスキーム 』の知識がなかった場合、<PARAM>、Item1、value のプログラム名 入力部分に、
    コマンドプロンプトの絶対パスを設定できない問題で挫折していたと思います。
    情報を提供して下さった 佐祐理 さん、ありがとう御座いました。

    2018年2月12日 2:45

すべての返信

  • 投稿がない為、ショートカットによる方法を試していました。

    以下の様に、HTML Help Workshop のヘルプの例を変更して作成してみると、
    WScript.Shellによる起動とデザイン的には同じ結果になる様に
    作成する事が出来ました。
    画像をクリックすると、PCに保存してある.exeファイルを開く、というコードです。


    <OBJECT
         id=test3
         type= ~~
         ~~
    >
    <PARAM name="Command" value="ShortCut">
    </OBJECT>
    <a href=JavaScript:test3.Click()><img src="*****"></a>

    WScript.Shellによる起動より、ショートカットの方が良い点
    (メッセージによるエラー無し、メッセージの表示がない)が多いため、
    ショートカットによる起動を利用します。
    2018年1月22日 13:02
  • MASKマサタロウさん、こんにちは。

    フォーラム オペレーターの立花です。

    情報を共有くださりありがとうございます。

    対応方法が見つかってよかったです。

    また何かありましたらご投稿ください。


    参考になった投稿には回答済みマークの設定にご協力ください
    MSDN/TechNet Community Support 立花楓

    2018年1月23日 2:59
    モデレータ
  • ショートカットによるexeファイルの起動ができたのは、
    .chmファイル作成環境の、Oracle VM VirtualBox(OS、WindowsXP)の場合でした。
    以下の様に、<PARAM>、Item1のValueに相対パスを入力した場合です。

         <PARAM name="Item1" value=",./フォルダ名./フォルダ名./ファイル名.exe,">

    .chmファイルをWindows10に移して、実行すると、exeファイルは起動されない(何も起きない)
    状態です。
    これは、WScript.Shellによる起動の時も同様で、相対パスだと Oracle VM VirtualBox の場合(XP)は
    起動できるが、Windows10の場合は起動できません。絶対パスにすると、Windows10で起動できる
    事を確認しています。

    以下の様に、<PARAM>、Item1のValue を、コードで変更してみると、
    alertによるメッセージで Value の変更を確認できましたが、実際のところ、.chmファイルは
    コンパイル時に入力してあるパスを認識するらしく、コードで変更したパスを認識しないようです。

         var STval = document.getElementById("PRM1"); //<PARAM>、Item1にid="PRM1"
         STval.setAttribute("value", exeファイルの絶対パス);

    試しに<PARAM>、Item1のValueにエラーの起きる内容(前後のカンマを削除した相対パス)を
    入力すると、コンパイル時に入力してあるパスが記載されたエラーメッセージが表示されます。

    <PARAM>、Item1のValue の変更方法は、他にありますか?
    また、以下のコードは、合っていますか?

    ~~

    <OBJECT
         id=test3
         type= ~~
         ~~
    >
    <PARAM name="Command" value="ShortCut">
    <PARAM name="Item1" value="" id="PRM1">
    </OBJECT>
    <a href="javascript:;" onmouseup="chVAL()"><img src="*****"></a>

    <script type="text/javascript">
    function chVAL() {
                      var STval = document.getElementById("PRM1");
                      STval.setAttribute("value", exeファイルの絶対パス); //パスは他の自作関数で取得
                      test3.Click()
    </script>

    WScript.Shellによる起動で、ページの更新(手動、F5)などを行ったらexeファイルを起動可能、
    という最初の質問の回答もお待ちします。

    回答が得られない場合、WScript.Shellによる起動に変更し、起動時の注意を.chmファイルに
    記述する事にします。


    2018年1月27日 2:54
  • 事前にレジストリ設定を行うことは可能(許容される)でしょうか? EXEのインストール時などに行うことを想定していますが、手動でも構いません。

    Windowsとしての正攻法としてはRegistering an Application to a URI Schemeで説明されていますが、EXEに対してURL Schemeを定め、適切なレジストリを設定することとなっています。ドキュメント内では alert: プロトコルを例示しています。
    この設定が行われていれば、HTMLおよびCHMではリンク先アドレスとして定められたURL Schemeを指定するだけです。こちらはドキュメントには記されていませんが、 <a href="alert:">link</a> 等の記述になります。

    2018年1月27日 3:59
  • 返信遅れました。

    起動しようとしている.exeファイルは、インストールして使用するものではありません。
    また、自作の.exeファイルではありません(自身で設定不可能)。
    コードによるレジストリの設定は、パソコンに不具合を起こしたくないため、
    行ったことがありません。

    インストールして実行する.exeファイルのパス(URL Scheme)に変更して(<PARAM>valueにて)、
    起動が再現できたとしても、目的とはズレてしまいます(個人利用目的でない...)。

    回答頂いたコード、

       <a href="alert:">link</a>

    で URL Scheme が表示されるか確認してみます。
    2018年1月28日 2:09
  • 返信の中にいくつか気になる点がありました。

    自作の.exeファイルではありません(自身で設定不可能)。

    まずリンク先を読まれればわかる通り、exeつまりプログラムに対しては何ら制約はなく、必要な設定はレジストリのみです。

    起動が再現できたとしても、目的とはズレてしまいます(個人利用目的でない...)。

    個人利用目的でないとするとどのような目的なのでしょうか? というのも<OBJECT>タグやWScript.Shellなどブラウザ外の機能に依存する強引な手法を用いるものではなく、先にもコメントしました通り、Windowsにおける正規のプログラムの起動方法です。個人利用目的でないのであればよりいっそう推奨される手順と思うのですが…。

    コードによるレジストリの設定は、パソコンに不具合を起こしたくないため

    ちょっと意図が読み取れませんでした。避けたいのは「コードによる設定」なのかそれとも「レジストリの設定」どちらでしょうか? どちらにせよ個人的な感想に見受けられ「個人利用目的でない」との発言とは矛盾する印象です。

    あくまでフォーラムとして本質問に対するあるべき手段の1つを提案したに過ぎないため、質問者さんのケースでは適さないという判断はそれはそれで構いません。

    2018年1月28日 13:13
  • 回答ありがとうございます。理解不足のようでした。

    回答いただいた文章から、<PARAM>、Item1のValue の変更方法や、WScript.Shellを
    使用しない新たな方法という事でよろしいでしょうか?
    Windowsにおける正規のプログラムの起動方法で、コードによるレジストリの設定(値の追加?)を行えば、
    起動可能な方法、と考えました。

    コードによるレジストリの設定を行う様にすると、何度か変更を繰り返すうちにPCに不具合が起こる可能性がある、
    自分の場合、プログラミングは失敗を繰り返して作成していくため、不具合が不安になります。
    回答としては、『 レジストリの変更自体 』、になります。ただ、作成環境が仮想PCのため、
    OSのバックアップファイルに変えるだけで不具合は戻せますが。

    『 自作の.exeファイルではありません(自身で設定不可能) 』、『 目的とズレる 』という返信は、
    こちらの理解不足という事になります。
    .chmファイルが公開用で、自分だけが.exeファイルを開ければ良いというものではない、
    という意味で、『 個人利用目的でない 』です。利用者のファイル保存環境を考えて、
    絶対パスが必要になります。

    <a href="alert:">絶対パス</a>//アプリケーションをレジストリに登録
    ~~
    <PARAM name="Item1" value="独自のURLスキーム:ファイル名.exe">
    ~~

    このような形で合っていますか?
    <a>タグと<PARAM>タグの順番、上か下かは関係ありますか?

    2018年1月28日 17:32
  • ”URLスキーム”で検索してみると、参考になるページがいくつか見つかりました。
    確認してみると、回答いただいたコードの意味が違うようなので、考えを投稿します。

    <a href="alert:">絶対パス</a>//アプリケーションをレジストリに登録
       ▲<a>タグの命令で、レジストリに登録するものではない。
       ▲” 絶対パス ”は、表示される文字列の事で、指定するものではない(回答いただいた例では” link ”)。

    ~~
    <PARAM name="Item1" value="独自のURLスキーム:ファイル名.exe">
    ~~
       ▲<a>タグで指定するので、必要ない。
       ▲” value ”で指定すると、clickイベントから.exeファイルを実行可能、と考えてました。
       ▲HTML Help Workshop のヘルプにある例で、

         <PARAM name="Item1" value="notepad,notepad.exe,">
         とあり、"notepad,notepad.exe,"はスキームの指定と、回答いただいた内容から考えています。

    下記ページの内容と、佐裕理さんの回答内容が合っていると感じます。

       https://garafu.blogspot.jp/2014/02/url.html

    上記のページを参考にして.exeファイルを実行させる方法だと、.exeファイルのパスが一定でないため
    (公開が目的で、ファイルの保存環境が必ず一致しない)、.regファイルを書き換えて、.regファイルを
    起動させる命令が必要になる。
    質問した内容を解決するためにレジストリの設定を行うのに、.regファイルを開く必要がある。
    上記の問題から「 コードによるレジストリの設定」が適している、と考えられる。
    「 コードによるレジストリの設定」の例の回答が得られた場合、処理が多すぎて理解できない場合が
    考えられる(コード=JavaScriptコード)。

    公開物がレジストリを操作するため、安全面から、
    『 WScript.Shellによる起動に変更し、起動時の注意を.chmファイルに記述する 』、
    という方法が一番良いかもしれないという考えが出てきている。



    2018年1月29日 7:58
  • 上記のページを参考にして.exeファイルを実行させる方法だと、.exeファイルのパスが一定でないため(公開が目的で、ファイルの保存環境が必ず一致しない)、.regファイルを書き換えて、.regファイルを起動させる命令が必要になる。

    「パスが一定でない」は一般論としては理解できますが、その場合、特にchmファイルに、WScript.Shellを使った起動方法ではどのようなパスを記述するのでしょうか? WScript.Shellと同じパスを.regファイルに記述するだけのことではありませんか?

    2018年1月30日 5:37
  •  > WScript.Shellと同じパスを.regファイルに記述

    JavaScriptのコードで記述できても、.regファイルを開く方法が、WScript.Shellやショートカットと考えています。

    WScript.Shellはメッセージが表示されるので、ショートカットで開き、レジストリの設定後に
    スキームを指定した<a>タグから.exeファイルが起動される。ということか。

    確かめてないのでわかりません。
    JavaScriptのコードで.regファイルを操作する方法を見付けないといけません。

    レジストリを操作する公開物に抵抗があるのですが、大丈夫かな?

     > WScript.Shellを使った起動方法ではどのようなパスを記述するのでしょうか?

    絶対パスの取得方法を記述した方が良いでしょうか?

    2018年1月30日 6:51
  • 事前にレジストリ設定を行う方法が提供されていますが、
    レジストリを操作する公開物に抵抗がある為、
    別の方法で起動できないか探します。

    2018年2月9日 2:17
  • 『 exeファイル 起動 』等で検索していたら、以下のページを見つけ、
    『 ショートカットから起動させた、コマンドプロンプトによる起動 』という方法を試していました。

         http://c4se.hatenablog.com/entry/2012/10/19/230718

    上記ページにある様に、<PARAM>、Item1、value のプログラム名 入力部分に、実行後のオプションを
    付けて入力すると、『 Unable to start~ 』となり起動できませんでした。
    『 cmd.exe 』のみだと、コマンドプロンプトを起動させる事が出来ました。
    オプションを コマンドプロンプト に渡せないかと試していた所、value の3番目の項目に
    実行後のオプションを入力することで可能であることが解る。コマンドラインと考えていたが、
    HTML Help Workshop のヘルプに『 パラメータ 』とある様に、そのままの意味であるという事
     (参考 http://e-words.jp/w/パラメータ.html)。

    起動させる.exeファイルのパス指定がうまくいかず、エラーが表示されていましたが、
    コマンドプロンプト起動時に表示されているパスを見て、パス区切り記号を『 \ 』にする事で
    パス指定出来ました。この時、ショートカットからコマンドプロンプトを起動すると、
    『 カレントディレクトリが起動させた.chmファイルのあるフォルダになる 』事を確認しています。
    .chmファイルのあるフォルダ内のサブフォルダ、ファイルのパスは、利用者のファイル保存環境に
    関係なく一定になる為、サブフォルダ、ファイルのパスを入力すれば起動可能という事になります
     (WScript.Shellで絶対パスを取得する方法は、考え方が似ていて、location.pathname で
      開いているページのパスを変数に取得し、変数内の.chmファイルのパス部分をsubstringや
      replaceで不要部分削除とパス区切り記号変換して取得し、一定になる.exeファイルのパスを
      足して取得しています)。

         <PARAM name="Item1" value=",cmd.exe,/k フォルダ名\ファイル名.exe">

    上記の方法だと、.exeファイルとコマンドプロンプトが一緒に起動される状態です。
    下記方法に変えると、.exeファイルを閉じるとコマンドプロンプトが自動で終了する
    ようになりました。

         <PARAM name="Item1" value=",cmd.exe,/c フォルダ名\ファイル名.exe">
         <PARAM name="Item1" value=",cmd.exe,/k フォルダ名\ファイル名.exe & exit">

    .exeファイルを起動したら、コマンドプロンプトを閉じる方法を色々と試していましたが、
    以下のページの内容通りに入力してみたら、成功しました
    (参考 itpro.nikkeibp.co.jp/article/Windows/20051005/222261/ → cmd、start)
     (『 cmd /c 』で『 start 』コマンドを実行し、『 start 』コマンドがアプリケーションとして
      .exeファイルを起動、オプション『 /c 』によりコマンドが実行された為、コマンドプロンプトが
      終了する)。

         <PARAM name="Item1" value=",cmd.exe,cmd /c start フォルダ名\ファイル名.exe">

    上記の方法だと、パス指定で使用できる文字に制限がある事を確認しています。
    以下のページの様に、起動させる.exeファイルのディレクトリまで移動して起動する方法に変えると、
    パスに制限文字(【】等)が含まれていても起動できました
     (参考 http://language-and-engineering.hatenablog.jp/entry/20081028/1225160338 → (3)、(4))
     (制限文字がカレントディレクトリまで含まれている場合は、上記の方法による起動可能)
     (上記方法での制限文字は、一定になるパス部分での事)
     (下記、.exeファイルのファイル名に制限文字が含まれている場合は、起動できる)
     ("は、絶対パス指定の場合)。

        <PARAM name="Item1" value=",cmd.exe,cmd /c cd フォルダ名 & start ファイル名.exe">

    コマンドプロンプトが一瞬表示されますが、質問している目的が、
    『 .exeファイル起動時のメッセージによるエラーで起動できなくなる 』という事で、
    この問題には対応できていると思います。

    『 URLスキーム 』の知識がなかった場合、<PARAM>、Item1、value のプログラム名 入力部分に、
    コマンドプロンプトの絶対パスを設定できない問題で挫折していたと思います。
    情報を提供して下さった 佐祐理 さん、ありがとう御座いました。

    2018年2月12日 2:45