포럼: POPFile 全般 (Thread #17400)

Portable POPFileの作成は可能でしょうか? (2008-01-15 23:21 by toby-net #34523)

はじめて書き込みさせていただきます。
TOBYと申します。
いつもPOPFileを便利に使わせていただいています。

■Portable POPFile を作成することは可能か?

首題の件についてですが、
Portable POPFile を作成することは可能でしょうか?

「USB POPFile」「Portable POPFile」などで、web、本家wiki、日本語フォーラム検索をしましても、特に関連する話題は無いようでした。


現在、メーラーは EdMax というUSBメディア(USBメモリ、USB HDD)等で持ち運べるものを使っていますが、POPFile は一旦インストールしなければ使えない状況のようです。

■こちらでやってみたこと

1.0.0をインストールした環境で環境変数を見て、いろいろ試してみようと思い、
以下のバッチファイルを記述して、インストールフォルダに置いてみました。
---- POPFile.bat ----
@echo off

set POPFILE_ROOT=%~dp0
set POPFILE_USER=%~dp0toby
set ITAIJIDICTPATH=%~dp0kakasi\share\kakasi\itaijidict
set KANWADICTPATH=%~dp0kakasi\share\kakasi\kanwadict
set MECABRC=%~dp0mecab\etc\mecabrc

start runpopfile.exe /startup
------------------------
上記バッチから起動した場合、
1.0.0 をインストールした環境(*1)では問題なく使えましたが、
別の環境(*2)では、インストールフォルダに popfile.db、popfile.cfg ファイルを作られてしまいました。
(後で確認したらメールが全部 [unclassified] になっていたという……)

Portable化するには、環境変数の設定の他に何が必要でしょうか?

こちらの予想では、起動時の現在のディレクトリを考慮して、
バッチなり WSH なりで、環境変数とレジストリを設定すればいけそうな気もします。

■教えて頂きたい点

そこで、教えていただきたいことなのですが、

・環境変数とレジストリの関係
 環境変数 POPFILE_ROOT、POPFILE_USER と、
 レジストリ HKEY_CURRENT_USER\Software\POPFile Project\POPFile\MRI の
 RootDir_LFN、UserDir_LFN はどちらが優先されるのか?
・インストール時に行われることで、環境依存なこと
・設定するのは、環境変数とレジストリだけでよいのものか?
 (例えば、テキスト、ソースなどにインストールディレクトリなどが書き込まれていないか?)
・レジストリの内容は、起動後に書き変わることはないか?
 (書き変わらない場合は、バッチやWSH等でも問題ないが、
 書き変わる場合は、EXE経由でなければ Windows 終了時に書き出せないため)
・Portable 化することに関して、他に何かアドバイス


■環境について

*1 インストールをし無事に動いた環境:
・POPFileを以前のバージョン(0.22.4)から正常動作させており、
都合により一旦アンインストールして、POPFile 1.0.0をインストール。
・インストール時に、"(インストールディレクトリ)\toby" にユーザーディレクトリを設定
・以前のバージョンで動かしていた popfile.db、popfile.cfg を
 新しいユーザーディレクトリにコピーし、1.0.0でも正常動作。

*2 動かなかった別の環境:
・以前のバージョン(0.22.4)を、*1のUSBメディアの同じディレクトリにインストールして正常動作していた。
・1.0.0はインストールしていない

RE: Portable POPFileの作成は可能でしょうか? (2008-01-16 12:52 by amatubu #34530)

> Portable POPFile を作成することは可能でしょうか?

環境変数やレジストリを適切に設定すればインストール
した端末以外で動かすことは可能だと思います。

> 現在、メーラーは EdMax というUSBメディア(USBメモリ、USB HDD)等で持ち運べるものを使っていますが、POPFile は一旦インストールしなければ使えない状況のようです。

現状ではそのとおりです。
持ち運びができるように、というのも検討はされています
が、実現はまだしていません。

以下は私の知っている範囲での話になりますが、

> ・環境変数とレジストリの関係
>  環境変数 POPFILE_ROOT、POPFILE_USER と、
>  レジストリ HKEY_CURRENT_USER\Software\POPFile Project\POPFile\MRI の
>  RootDir_LFN、UserDir_LFN はどちらが優先されるのか?

優先順位といいますか、レジストリを参照するアプリ
ケーションと、環境変数しか参照しないアプリケーション
があります。
通常 POPFile を起動するために使用されている runpopfile.exe
というアプリケーションは、レジストリの内容を確認し、
環境変数を設定してから POPFile 本体を起動させるという
アプリケーションです。このため、環境変数が設定されて
いても、レジストリに指定された値が優先的に使用される
ことになります。

逆に、POPFile の本体である popfile*.exe は環境変数しか
見ていないため、環境変数が適切に設定されていれば、
レジストリの状態に関係なく POPFile を動作させることが
できます。設定によって popfile*.exe のいずれかを起動
させる popfile.exe を使っても同じことになります。

> ・インストール時に行われることで、環境依存なこと

質問の意図があまりよくわかっていませんが、インストール時に
行われることは、プログラム本体のインストール以外には
・レジストリの設定
・環境変数の設定
だと思います。

> ・設定するのは、環境変数とレジストリだけでよいのものか?
>  (例えば、テキスト、ソースなどにインストールディレクトリなどが書き込まれていないか?)

私の知る限りでは、環境変数とレジストリだけでよいと
思います。

> ・レジストリの内容は、起動後に書き変わることはないか?
>  (書き変わらない場合は、バッチやWSH等でも問題ないが、
>  書き変わる場合は、EXE経由でなければ Windows 終了時に書き出せないため)

POPFile 本体はレジストリを参照しないため、起動後に
書き換わることはないはずです。

> ・Portable 化することに関して、他に何かアドバイス

上に書きましたように、popfile.exe を使えば環境変数だけの
設定で動作すると思いますのでお試しください。

あるいは、POPFile 自体は Perl で書かれていますので、
POPFile のプログラムフォルダにある wperl.exe や perl.exe を
使って起動することもできます。この場合も環境変数だけが
問題になります。

参考になりますでしょうか。
Reply to #34523

RE: Portable POPFileの作成は可能でしょうか? (2008-01-29 08:57 by toby-net #34761)

返信が遅くなりました。
ごめんなさい。

基本的には、レジストリと環境変数の両方設定で事足りるということですね。

>優先順位といいますか、レジストリを参照するアプリ
ケーションと、環境変数しか参照しないアプリケーション
> があります。

なるほど!氷解しました。
runpopfileから起動する場合には、レジストリが優先されている(環境変数が上書きされて渡される)わけですね。

runpopfileが何をしているか(popfile*.exeの何を起動しているか?など)等についてもう少し調べてみたいと思います。

ありがとうございました。
Reply to #34530

RE: Portable POPFileの作成は可能でしょうか? (2008-01-29 19:11 by amatubu #34775)

> 基本的には、レジストリと環境変数の両方設定で事足りるということですね。

そういうことです。
起動の仕方や設定、ファイルの置き場所によっては、環境変数だけでも
大丈夫ですし、あるいはうまく調整すれば環境変数の設定も不要とする
こともできます(日本語パーサには内蔵パーサを使用し、プログラムと
データフォルダを同一にする)。

> runpopfileが何をしているか(popfile*.exeの何を起動しているか?など)等についてもう少し調べてみたいと思います。

runpopfile.exe は、レジストリの内容を確認して環境変数を設定した
のち、popfile.exe を起動します。popfile.exe はタスクバーの
アイコンを表示するかどうか、ログをウィンドウに出力するか
どうかの設定を確認し、popfileb.exe、popfilef.exe、
popfileib.exe、popfileif.exe のいずれかを起動しています。

runpopfile.exe は NSIS というツールで作られていて、その
ソースコードは
http://popfile.cvs.sourceforge.net/popfile/windows/?pathrev=b0_22_2
で確認することができます(runpopfile.nsi)。

popfile.exe は ActivePerl の PerlApp というツールで作られて
いて、そのソースコードは
http://popfile.cvs.sourceforge.net/popfile/engine/?pathrev=b0_22_2
で確認することができます(popfile-windows.pl)。

popfileb.exe、popfilef.exe、popfileib.exe、popfileif.exe は
それぞれ ActivePerl の PerlApp あるいは PerlTray というツールで
作られていて、
そのソースコードは上と同じ
http://popfile.cvs.sourceforge.net/popfile/engine/?pathrev=b0_22_2
で確認することができます(popfile.pl と popfile-tray.pl)。

参考になれば。
Reply to #34761

RE: Portable POPFileの作成は可能でしょうか? (2008-01-30 04:10 by toby-net #34787)

TOBYです。
ありがとうございます。

本家から CVS で tag:v1_0_0 を一通り落としてきて見ています ^^;

NSIS用のソースがアセンブラ ライクで、戸惑っていたところで助かりました。

grepでさらっと見たところレジストリを弄っているのは、
windowsディレクトリ以下のソースしかないようですし、
amatubuさんに教えていただいたように、
最初に runpopfile.exe から起動されているようなので、
とりあえずは、runpopfile.nsi のレジストリ依存部分を
なんとかすればいけるかな?と思っています。
(環境変数の非依存は、いじらない方向で)

まずは、
・自分の環境でとりあえず動かせるように
・他の人の環境でも簡単に動かせるように
という順番で行こうと思います。
(今回は他の人の環境で、まで手が回らないかもしれません)

手段としては、
・(A)PortableApps(Portable Firefoxとか)の流儀で、ランチャーを作る方法。
  汎用的で配布時はこういう形態がいい。
  難易度高い?(PortableAppsのやり方を調べないといけないため)
・(B)runpopfile.nsi を改造して、レジストリ依存にしないようにする。
  .iniなどを読ませる。
  難易度は?どこまでやるかによる。
・(C)NSISかWSHかその他exeを使ってレジストリや環境変数などを設定し、
  runpopfile を起動。多分簡単。

などがあるかと思います。

まずは、(B)か(C)でやってみます。
runpopfile.nsi を見て必要最低限でできるかどうか?
(B)でも複雑でなければ簡単だろうと思います。

適当にこちらにまとめてみてます。
http://tobysoft.net/wiki/index.php?POPFile%2FPortable%20POPFile

うわもうこんな時間だ、寝ないと……。
Reply to #34775