nDiki : 実行可能ファイル
実行可能ファイル、実行ファイル - executable file、executable
スポンサード リンク
Related term
2004年7月19日 (月)
■ PAR

いやな日記で紹介されている PAR を試してみた。 PAR は Windows に限らず実行形式のファイルを生成する事ができる (UNIX 系ではメリットは少ないかもしれないが)。
PAR ファイル (ZIP) として必要なスクリプトやモジュールをパッケージ化できるのも嬉しい。 Perl は便利なのだが他人に使ってもらう時に面倒で Java の JAR ファイルが羨しかったのだが、まさにそれを実現してくれる (実行可能ファイルにしてしまうともっとお気楽)。
また PAR ファイルをHTTPサーバ上においておいてリモートから取得できる機能もあり、Java Web Start に近い使い方ができそうである。
Debian BOX に入れて遊んでみた。sid でもパッケージになっていないので dh-make-perl でパッケージ化してつっこむ。
@ スクリプトを実行可能形式に
$echo 'print "hello\n";' > hello.pl $perl hello.pl $pp -o hello hello.pl $ls -l hello -rwxr-xr-x 1 naney naney 1739227 2004-07-19 22:09 hello $file hello hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped $./hello hello
@ スクリプトを PAR ファイルに
$pp -p -o hello.par hello.pl $zipinfo hello.par Archive: hello.par 1184 bytes 5 files drwxr-xr-x 2.0 unx 0 b- stor 19-Jul-04 22:13 script/ -rw-r--r-- 2.0 unx 17 t- defN 19-Jul-04 22:12 script/hello.pl -rw-rw-rw- 2.0 unx 262 b- defN 19-Jul-04 22:13 script/main.pl -rw-rw-rw- 2.0 unx 434 b- defN 19-Jul-04 22:13 MANIFEST -rw-rw-rw- 2.0 unx 214 b- defN 19-Jul-04 22:13 META.yml 5 files, 927 bytes uncompressed, 678 bytes compressed: 26.9% $parl hello.par hello
@ ワンライナーも実行可能形式に
$pp -o hello -e 'print "hello\n"' $ls -l hello -rwxr-xr-x 1 naney naney 1739237 2004-07-19 22:19 hello $file hello hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped $./hello hello
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- Eclipse 3.0M8 (2004-04-19)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- Module::Build でソースパッケージング (2005-08-24)
- Twitter ベイジアンフィルタプロキシ (2007-12-29)
2004年7月28日 (水)
■ xyzzyを読み取り専用メディアから起動する

新人プログラマには「プログラムを組むんだから、とりあえずテキストエディタを何か入れておけ」と言うのだが、実際のところ自分が今仕事で使っている Windows BOX にはテキストエディタがインストールされていない。
「メモ帳」ですよ。
ちゃんと編集する時は Linux BOX 上の Emacs を使ってしまうので、Windows BOX では力を入れて環境構築していなかったり。 しかし、やっぱり何かテキストエディタがないと不便といえば不便。 ということで久しぶりに何か入れてみることにした。
最近は「インストール不要のソフトを USB メモリに入れて相手先で利用できるようにする」環境作りをぽちぽちしているので、エディタもそのようにできるのを選びたい。
というのが主な条件。
書き込み禁止にした USB メモリや、read only な Samba 公開ディレクトリ上(あるいは CD-R 上)から直接起動できるようにするのが目的。
@ xyzzy 0.2.2.233
以前にもちょっと使ったことがある。 Meadow はヘビーだし設定が面倒なので xyzzy が良い。
で実験。
アーカイブを展開してすぐ xyzzy.exe を実行できるのだが、
- ダンプイメージ
- etc/DOC (lisp/help.l より)
- $XYZZY/usr/usrname/os/xyzzy.ini
- $XYZZY/usr/usrname/os/.xyzzy.history
を書き出せる必要がある。etc/DOC 以外の位置はコマンドライン引数や環境変数で指定できる。が etc/DOC だけ変更する方法がわからない。
保留。
@ サクラエディタ 1.4.8.0
同僚が使っているサクラエディタも試してみる。 インストーラを使用したくないので、実行可能ファイル・ヘルプファイルそれから必要な補助ファイルをそれぞれ取得して、同じディレクトリへ。
こちらは read only でも特に問題なく起動した。 ただし、
なので躊躇。
@ 再び xyzzy
xyzzy の設定をいじってみる。
site-lisp/siteinit.l を
(setq lisp::*documentation-path*
(merge-pathnames "xyzzy-DOC"
(directory-namestring (si:dump-image-path))))
として etc/DOC をかわりにダンプイメージファイルと同じディレクトリに xyzzy-DOC として生成するように変更。
それから起動用に
mkdir %TMP%\xyzzy xyzzy -image %TMP%\xyzzy\xyzzy.dump -config %TMP%\xyzzy
というバッチファイルを作成。ダンプイメージファイル、設定ファイルを置くディレクトリを環境変数TMPの下の xyzzy サブディレクトリに出力するようにする。
これで書き込み禁止ディレクトリから起動できるようになった。
必要があれば書き込みディレクトリはアカウント毎に変えた方がいいかな。 Windows 98 SE だとユーザ名やホームディレクトリとして使える環境変数は標準状態では存在しないようなので一工夫が必要になるか。
- TrueCrypt で USB メモリに Windows と Linux ... (2006-12-14)
- ActivePerl で Ming (2005-02-23)
- NSIS 2.22 は Linux でビルドできず (2006-12-20)
- USB メモリに Perl を入れて持ち歩きたい (2006-12-17)
- KDE Installer for Windows で KDE をインストール (2008-01-30)
2004年12月2日 (木)
■ JRE をバンドルしたインストーラを NSIS で作る

Java で書いたプログラムを Windows ユーザに提供する時に、Java の実行環境の事とかを考えるのが面倒くさい。 頼まれて自分がセットアップする時も面倒くさい。
やっぱりJARファイル化したプログラムに JRE をバンドルしたインストーラを NSIS あたりで作れるようにしておいた方が、あとあと楽そうだ。
@ JRE
しかし JRE のバンドルの話を取り扱かっている記事ってあまりみかけない。 JRE 1.4.2_06 の README.txt などに再配布の事が書いてあるのだけれど、いまいちすっきりしないところもある。例えば
All files not in these lists of optional files must be included in redistributions of the runtime environment.
とあるんだけれど、All files ってどれよ。 Windows 用 JRE インストーラを実行して実際にインストールした後、インストール先にあるファイルって判断で良いのかな。多分。
それから、「それらをディレクトリごとコピーすれば他でも動くかどうか」という事に関する記述が見つけられないのがちょっと気持ち悪い。大丈夫っぽいんだけれど。
@ NSIS
NSIS 側はディレクトリまるごとインストール(File /r jre)と、アンインストール時にまるごと削除 (RMDir /r "$INSTDIR\jre") で OK。 実行に関しては NSIS Archive の Examples にある記事「Java Launcher」を参考に起動のための exe を作るなどすれば良い。 これは NSISスクリプトを用いて「java.exe を探し出して指定したパラメータで呼び出す exe ファイル」を作るというもの。
NSIS はインストーラを作るためのソフトであるが、NSISコンパイラでちょっとしたプログラムも書けるよという事を示す面白い例でもある。 これぐらいの用途であれば結構コンパクトな実行可能ファイルを吐いてくれる。
- JSmooth で Win32 上でのJava プログラム起動ファイル作成 (2004-12-06)
- NSIS 2.22 は Linux でビルドできず (2006-12-20)
- Linux 上で Windows 用インストーラを作成する (2004-10-14)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- Module::Build でソースパッケージング (2005-08-24)
2004年12月6日 (月)
■ JSmooth で Win32 上でのJava プログラム起動ファイル作成

最近、Java プログラムを Win32 上で簡単に起動できるようにする方法を調査中。
JSmooth 0.9.7 を試してみる。 JSmooth 自体も Java アプリケーションなので、Linux で動くかと昨日試してみた(ソースをとってきて ant jar; ant run)のだがうまく動かなかった。 ということで今日 Windows 上で。
GUIベースなので使い方を一度覚えれば比較的簡単に使える。
- JSmooth は GNU GPL。生成した実行可能ファイルにはライセンス制約なし。
- 生成した exe は実行すると、インストールされているJVMを検索する。
- JVMが無い時に指定したURLのページへ誘導できる。
- JARファイルを exe に埋め込める(実行時に展開される)。もちろん埋め込まないでランチャを生成する事も可能。
など。手軽であるが、生成したランチャ(JARファイル埋め込み無し)で、約400KB弱となった。でかい。
NSIS で同様のランチャ(こちらも簡単なJVM検索はあり。ページへの誘導はなし)を生成すると、30KB強。 NSIS なら Linux でも生成できる事を考えると、JARファイルの exe 埋め込み機能以外は NSIS の方がよさそうだ。
- JRE をバンドルしたインストーラを NSIS で作る (2004-12-02)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- NSIS 2.22 は Linux でビルドできず (2006-12-20)
- xyzzyを読み取り専用メディアから起動する (2004-07-28)
2005年3月7日 (月)
■ UPXで実行可能ファイルを小さく

PARのチュートリアルで UPX (the Ultimate Packer for eXecutables)というツールが紹介されていたので使ってみる。 実行可能なファイルを、実行可能のまま圧縮するというもの。 MS-DOSの時代の伝説のプログラム DIET を思い出す。
PAR で実行可能形式に変換したPerlスクリプトを UPX 1.25 で圧縮したところサイズが小さくなった。 しかし PAR で作った実行可能バイナリは実行時に自身を展開するため、圧縮によってフォーマットが変わってしまっていることを検知して警告が出てしまう。 ちょっとよろしくない。
それにNSISでインストーラを作ってしまえばかなり高圧縮がかかるし、そういう意味では出番がないか。
いや USB メモリにいろいろ実行可能ファイルを詰め込みたい時にはいいかもしれない。
- NSIS 2.22 は Linux でビルドできず (2006-12-20)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- PAR (2004-07-19)
- xyzzyを読み取り専用メディアから起動する (2004-07-28)
2005年3月15日 (火)
■ PAR で作った実行可能ファイルを殺せない

PARでWindows用実行可能ファイル(exe)にしたプログラムを、別のプログラムから起動・終了させるプログラムを書いていたところ困った事態。
今まで気がつかなかったのだが、PARで作った実行可能ファイルを実行するとプロセスが起動される。片方がブートストラップで、もう一方がPerlインタプリタのようだ。
プログラムから起動した時に取得できるのはブートストラップの pid で、これを TerminateProcess してもPerlインタプリタの方は以前として動き続ける。 止める方法がわからん。
自爆機能とかつけて対処するしかないか。
@ --pidfile
結局 --pidfile オプションをつけて、pid をファイルに書き出せるようにした。 $$ の値はPerlインタプリタ側のプロセスIDで、こちらを kill するとまとめて落ちてくれる。
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- PAR (2004-07-19)
- UPXで実行可能ファイルを小さく (2005-03-07)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- 自前 PPM リポジトリの管理 (2006-07-03)
2005年3月31日 (木)
■ Wineを入れてみる

Linux 上で Win32 用の ActivePerl を動かして、PPM パッケージの作成や PAR による実行可能ファイルの作成をできるようにしたい。
調べたところ Wine 上でも ActivePerl が動くらしい。 さっそく Debian GNU/Linux の sid 環境にインストールしてみる。
debパッケージは以下をインストール。
- wine
- wine-utils
- winesetuptk
- wine-doc
- msttcorefonts
winesetup を実行して ~/.wine 以下を作成。 winesetup が古いのか wine を実行すると
Please use the registry key HKEY_CURRENT_CONFIG\Software\Fonts\LogPixels to set the screen resolution and remove the "Resolution" entry in the config file
という警告がでるので、[fonts] の中の
"Resolution" = "96"
をコメントアウト。
次に msi 形式になっている ActivePerl インストーラを動かすために、Windows Installer をインストールする。
失敗。設定がうまくいっていないのか、何かが足りないのか。
usr/share/wine/wineinstall で ~/.wine 以下を作っても駄目。
要調査。
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- ActivePerl で Ming (2005-02-23)
- 納品前日なのに /var が壊れた! HDDからのブートで Debian ... (2005-09-27)
- Debian GNU/Linux sid 環境を新 HDD へ (2006-07-29)
- xyzzyを読み取り専用メディアから起動する (2004-07-28)
2006年12月12日 (火)
■ PAR::Repository でビルド済み Perl モジュールをネットワーク配信

@ 実行可能ファイル作成としての PAR
PAR といえば Perl スクリプトを実行可能ファイル(Windows なら EXE 形式ファイル)に変換するモジュールとして有名である。
ちなみに実行可能ファイルを作成する部分はは PAR 0.97 より PAR-Packer パッケージに分けられ、PAR 自体はインストールしやすい pure Perl なパッケージになっている。
@ PAR モジュールアーカイブからのローダとしての PAR
PAR が提供するもう一つの(こちらが本来はメイン?)機能は、プログラムの実行時に必要な Perl モジュールを PAR ファイルと呼ばれる Perl モジュールアーカイブファイルからロードする機能である。 XS モジュールなどもコンパイルすることができるどこかの環境で1度ビルドして PAR ファイルにしておけば、同じアーキテクチャのホスト上でそのまま利用することができる。
@ PAR リポジトリ
ロードしたい PAR ファイルはファイルパスだけではなく URL でも指定することができ、必要な時にオンデマンドでフェッチさせることができる。 これを使えば Perl プログラムの集中管理可能だ。
PAR 0.951 からは PAR リポジトリというコンセプトが追加され、パッケージ毎に作った PAR ファイルをサーバ上(あるいはローカル)のリポジトリに蓄積してオンデマンドでロードできるようになった。
個別に PAR ファイルを指定する従来の方式に比べてかなり便利そうである。 ということで試用してみた。
まずは
- PAR
- PAR::Repository
- PAR::Repository::Client
- PAR::Repository::Query
- PAR::Dist
- PAR::Packker
あたりをインストールし準備 OK。
@ 1. PAR リポジトリを作成する
最初に PAR-Repository に含まれている parrepo で。
parrepo create -r /tmp/PAR
PAR リポジトリファイルの中にはデータベースファイルが作成されるが、これは DBM::Deep というアーキテクチャ非依存のものを使っているので、Linux でも Windows でもどちらからでもアクセス可能である (つまり Linux 上でリポジトリをメンテできるということだ)。
@ 2. Perl パッケージを PAR ファイル化する
次に必要な PAR ファイルを作成する。 作成したいパッケージを展開してビルドし、blib ができている状態で PAR::Dist を使ってパッケージ化する。
perl Makefile.PL make make test perl -MPAR::Dist -e blib_to_par
例えば ActivePerl*1 上で WWW-Mechanize-1.20 を PAR ファイル化すると
WWW-Mechanize-1.20-MSWin32-x86-multi-thread-5.8.8.par
というファイルが作成される。
普段から ActivePerl で必要なライブラリは基本的に自前で PPM パッケージ化して、動作確認した上で PPM リポジトリに蓄積するようにしているので、合わせて次の手順でパッケージを作ることになる。
perl Makefile.PL nmake nmake test perl -MPAR::Dist -e blib_to_par make_ppm
@ 3. PAR リポジトリに PAR ファイルを登録する
PAR ファイルができたら parrepo でリポジトリに登録する。
parrepo inject -r /tmp/PAR -f xxx.par
@ 4. PAR リポジトリ上のライブラリを使用してみる
例えば先ほどの WWW::Mechanize がリポジトリに登録されている状態で
#!/usr/bin/perl
use PAR { repository => 'file:///tmp/PAR/' };
use WWW::Mechanize;
my $mech = WWW::Mechanize->new;
$mech->get('http://www.example.com');
print $mech->content;
というスクリプトを書いて実行すると、PAR リポジトリから WWW::Mechanize がロードされて正しく実行される。
ここでリポジトリを Web サーバへアップロードして、repository のところに URL を指定するようにすることもできる。 例えばリポジトリを http://www.example.com/PAR/ に配置したとすると
#!/usr/bin/perl
use PAR { repository => 'http://www.example.com/PAR/' };
use WWW::Mechanize;
my $mech = WWW::Mechanize->new;
$mech->get('http://www.example.com');
print $mech->content;
と書き換えることで、インストールしていない WWW::Mechanize を使用できるようになる。
@ Perl プログラムを実行形式化する
先ほどの Perl スクリプトを get_top_page.pl という名前で保存して pp で実行可能ファイル化する。
pp -o get_top_page.exe -M PAR::Repository::Client get_top_page.pl
とすれば get_top_page.exe という実行可能ファイルが作成される。 WWW::Mechanize はオンデマンドで http://www.example.com/PAR/ からフェッチされるので、アップデートが必要な場合は新しい PAR ファイルを作成してリポジトリを更新するだけでよい。 EXE ファイルを作成しなおして利用者に配付しなすといった作業も不要だ。
@ スクリプトもリポジトリにおく
さらには実行するスクリプトをも PAR リポジトリに置いておくことが可能だ。
例えば WWW-Mechanize に含まれている mech-dump をオンデマンドにフェッチして実行する実行形式ファイルは以下のコマンドで作成できる。
pp -o mech-dump.exe -M PAR::Repository::Client \
-e "use PAR { repository => 'http://www.example.com/PAR/', \
run => 'mech-dump' }"
@ まとめ
ActivePerl では PPM があるとはいえ、普通のユーザにちょっとしたプログラムを使ってもらうのに「ActivePerl をインストールして、PPM パッケージをインストールして、……」というのは手間すぎる。
pp で プログラムに必要なものを全てバンドルした実行形式化ファイルにするという方法ももちろんあるのだが、頻繁にアップデートするようなスクリプトの場合には、起動のための部分だけ pp で作成しておいてあとは PAR リポジトリで集中管理するというのもちょっと魅力的である。
- [ Perl ] PDL::PP で C extension を書く (2004-02-19)
- 自前 PPM リポジトリの管理 (2006-07-03)
- ActivePerl で Ming (2005-02-23)
- ActivePerl 5.8.8.820 の PPM では ppd/tar... (2007-02-05)
- bundle を作成して Perl モジュールをまとめてインストール。 (2004-10-21)
2006年12月20日 (水)
■ NSIS 2.22 は Linux でビルドできず

Windows 用のインストーラ作成ツール NSIS は、スクリプトベースでインストーラを作っていくのが1つの特徴である。 NSIS スクリプトは、さすがインスーラ作成用だけあって
- ファイル処理 (コピー、削除、……)
- レジストリの読み書き
- プログラムの実行
その他システム関連のコマンドが充実している。 コンパイルするとかなりコンパクトな実行形式ファイル (EXE) を生成してくれるので、ちょっとした処理を自動化するには便利である。
今回 USB メモリに入れておいて、そのドライブ上のいくつかのディレクトリに PATH が通った状態でコマンドプロンプトを開くツールを NSIS で書いておこうかと思って試す。
NSIS は POSIX ベースシステムでビルドし実行でき、NSIS スクリプトをコンパイルできる。 ということで作業を Linux で作業をしていたのだが、どうやら System::Call が使えないようだ(スクリプトのコンパイルに失敗する)。
Debian パッケージが古いせい (2.19-1.1) かと思い、ソースパッケージをビルドしてみたらまさに System 関連らしいところでコンパイルがこけている (そういう背景で Debian パッケージがアップデートされていない?)。
ということでどうも最新の NSIS は Linux では駄目っぽい。
しょうがないので久しぶりに Wine。
Wine 上に NSIS 2.22 をインストールして makensis.exe を実行してみたところ試した範囲ではうまく動いている。 ついでにでき上がった実行可能ファイルも Wine 上で試せる。
しばらくは Wine 上で NSIS スクリプト書きを楽しむことにしよう (最終的には Windows 上でコンパイルしなおして動作確認するのだけれども)。
- xyzzyを読み取り専用メディアから起動する (2004-07-28)
- Linux 上で Windows 用インストーラを作成する (2004-10-14)
- TrueCrypt で USB メモリに Windows と Linux ... (2006-12-14)
- NSIS が再び Linux でコンパイルできるように (2005-01-08)
- ActivePerl で Ming (2005-02-23)
スポンサード リンク
■よく検索されるキーワード
torrent(109) x31(45) thinkpad(31) 動画(29) 提案書(26) mp980(24) 手帳(24) windows(23) linux(23) 画像(21) 使い方(21) リフィル(21) debian(20) usb(20) tc-1(19) perl(19) 筆まめ(18) 壁紙(17) ほぼ日手帳(16) 冷蔵庫(14) ドラマ(13) wiki(13) 書き方(12) ダイソー(12) システム手帳(12) 宮根誠司(12) ノート(11) so905ics(11) 無印(11) バッグインバッグ(11) 映画(11) 設定(10) 修理(10) 宮根(9) ssh(9) a6(9) ほぼ日(9) 黒田征太郎(9) バッグ(9) gmail(8) 感想(8) 娘(8) f-01a(8) メモリ(8) gtd(8) ブログ(8) nikon(8) allinanchor:*.torrent(8) ボールペン(7) 方眼(7) ポイント(7) 4c(7) ヨドバシカメラ(7) ケース(7) twitter(7) apache(7) ht-01a(7) ヨドバシ(7) ubuntu(7) truecrypt(7) n-02a(7) 作り方(7) minolta(7) af(6) インストール(6) ガントチャート(6) mp3(6) zippo(6) hdd(6) emacs(6) レビュー(6) カバー(6) vq1005(6) 日本語(6) ハクキンカイロ(6) 無印良品(6) グレゴリー(6) 交換(6) nikkor(6) pixus(6)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.10261s / load averages: 0.29, 0.29, 0.25
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク