MOZ_NO_REMOTE を削除してThunderbirdからFirefoxを起動するソフトを作り直した
コマンドラインオプション -no-remote を使用してThunderbirdを起動するとFirefoxを起動しようとした時に次のような警告が表示されることがある。
2014/2/19頃に試行錯誤(参照)を始めたのだが、どうやら次の2ケースにまとめられそうである。
- デフォルトのプロファイルでFirefoxを起動して、そのFirefoxが起動中の場合、-no-remote というコマンドラインオプションを付けて起動したThunderbirdからはFirefoxを起動できない。
- Thunderbirdを -no-remote というコマンドラインオプションを付けて起動し、そのThunderbirdからFirefoxを起動して、そのFirefoxが起動中の場合、ThunderbirdからもThunderbird以外からでも、デフォルトのプロファイルでFirefoxを起動できない。
かなり前から指摘されているバグ、あるいは仕様らしく、対策もネット(参照)にあった。環境変数「MOZ_NO_REMOTE」を unset すれば良いらしく、「MOZ_NO_REMOTE」の値はbatファイルで変えることができるらしい(参照)。試しに、次のようなbatファイルを作って、フリーウェアの【Batch To Exe Converter】を使ってexeファイルに変換して、-no-remote を使用して起動したThunderbirdのリンクをクリックしたら、既にデフォルトのプロファイルでFirefoxが起動していても、警告が出ることなくFirefoxが起動した。
@echo off
Set MOZ_NO_REMOTE=
start "" "firefox.exe" "%1"
exit
デフォルトのブラウザはFirefoxにしてある。また、Thunderbirdからデフォルトのブラウザ以外のソフトを起動する方法は検索して見つけた【ThunderBirdに任意のブラウザを関連付ける:G'sのだらだらぐーたら日記 on blog】で紹介されていたので参考にした。残念ながらThunderbirdのリンクをクリックしてbatファイルを起動することはできないようである。選択できるのは拡張子が .exe か .com のソフトだけである。
これで問題が解決したかと思ったが、「=」や「&」のあるURLをクリックした時に正常にリンクが開かない問題が生じた(参照)。これはThunderbirdがURLを外部ソフトに引数として渡す時にダブルクォート""で囲んでくれず、さらに、【Batch To Exe Converter】で変換したexeファイルは引数を囲んでいたダブルクォート""を消して処理することも分かった(参照)。
この引数問題を解決する方法をネット検索で探していたら、JScriptのWScript.Argumentsを見つけたので、JScript を使って引数をダブルクォート""で囲んでからbatファイルに渡すことにした(参照)。Thunderbirdから起動するためにJScriptのファイルをexeファイルに変換する必要があるが、まずは【MakeExe】を使った。翌日からは複数のファイルをまとめてexeファイルに変換できる【nandemoExe】を使って変換して、exeファイルの内部でbatファイルを実行(実際の動作は一時フォルダにコピーしたbatファイルを起動?)するようにした。
この自作ソフトを2年半の間、ほとんど問題なく利用していたのだが、JScriptで環境変数「MOZ_NO_REMOTE」を削除できる可能性を、【BATファイルとEXEファイルとで引数の扱いが異なる件】のコメント欄で指摘された(コメント)。実は環境変数「MOZ_NO_REMOTE」をbatファイルで削除するヒントになったページ【Chicagrafo: MOZ_NO_REMOTE】にはJScriptのスクリプトも記載されていて、そのスクリプトを参考にしてexeファイルを作成してみたのだが、Thunderbirdから起動した時に冒頭の警告が表示された(2014/3/15の私のツイート、2014/3/16の私のツイート)。それで諦めていたのだが、コメントで紹介されたリンク先のVBSのスクリプトを参考にしてJScriptのスクリプトを作って【MakeExe】でexeファイルに変換してみたら、問題なくThunderbirdから起動できた。すなわち、batファイルが不要になった。そのスクリプトは次の通り。
var shell = new ActiveXObject("WScript.Shell");
var openFx = "Firefox.exe";
// var openFx = "Firefox.exe -new-window"; // 新しいウインドウで開く
// var openFx = "Firefox.exe -new-tab"; // 新しいタブで開く
// var openFx = "\"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe\""; // Firefox.exeのフルパス
var geturl = WScript.Arguments;
if (geturl.length < 1) {var openurl = ""} else {
var openurl = geturl(0);
openurl = "\"" + openurl + "\"";
}
// shell.Popup(openurl); // 引数を確認する
var WshShell = WScript.CreateObject("WScript.Shell");
var WshSysEnv = WshShell.Environment("Process");
WshSysEnv.Remove("MOZ_NO_REMOTE");
var command = openFx + " " + openurl;
// shell.Popup(command); // 実行されるコマンドを確認する
shell.run(command);
コメントで紹介された【[環境変数を削除する]】とマイクロソフトの記事【Environment プロパティ】を参考にした。
今回作り直した「MOZ_NO_REMOTEを削除してThunderbirdからFirefoxを起動するソフト」は次のリンク先にアップロードしてある。
最後に、今回作成したソフトFxfromTB.exeの使い方を書いておく。
- FxfromTB.exe を firefox.exe と同じフォルダに入れる。
- ThnuderBirdを起動して、オプションの詳細ウインドウから[設定エディタ]を開いて network.protocol-handler.warn-external.http を検索する。
- network.protocol-handler.warn-external.http と network.protocol-handler.warn-external.https を True に変更する。
- メール内の http や https で始まるリンクをクリックする。
- [プログラムを起動]ウインドウが開くので[選択]をクリックする。
- 開いたウインドウでFirefoxのフォルダ(firefox.exe のあるフォルダ)を開いて、FxfromTB.exe を選択して[開く]をクリックして、[プログラムを起動]ウインドウに戻る。
- [今後http リンクは同様に処理する(R)]にチェックして[OK]をクリックする。
- 起動したFirefoxで表示されたページがクリックしたリンク先であることを確認する。
- 念のため、オプションの[添付ファイル]のウインドウで、「ファイルの種類」がhttp や https の所の「動作設定」が「FxfromTB.exe で開く」になっていることを確認する。
(クリックで拡大) - 次回からはThunderbirdのリンクをクリックした時に冒頭の警告が出ることなくすぐにFirefoxが開く。
さて、Thunderbirdのリンクをクリックした時に「Firefoxは起動していますが応答しません。新しいウィンドウを開くには既存のFirefoxプロセスを終了させなければなりません。」という警告が出る問題に取り組んでから、警告が出ないようにするソフトを作って、作り直すまでを振り返った。同じ問題で困っている人がどの程度いるのか分からないが、参考になれば幸いである。
これまでの関連記事:
- ThunderbirdからFirefoxを起動できないし、FirefoxからThunderbirdを起動できない。(2014/2/19)
- 【ThunderbirdからFirefox - BIGLOBEなんでも相談室 を見て】(2014/2/21)
- 【ThunderbirdからFirefoxを起動できないし、FirefoxからThunderbirdを起動できない。:正己の異論・反論(雑感):So-netブログ を見て】(2014/2/21)
- 【GoogleニュースのRSSフィードのlinkタグを本来の記事のURLだけにするphpファイルを作ってみた】(2014/3/14)
- Thunderbirdから「-no-remote」や「MOZ_NO_REMOTE」の問題を気にせずにFirefoxを起動するためのopenFx.exeが完成?(2014/3/16)
- BATファイルとEXEファイルとで引数の扱いが異なる件(2014/3/17)
コメント 0