トップ(最新)

nDiki : 実行可能ファイル

実行可能ファイル、実行ファイル - executable file、executable

スポンサード リンク

Related term

2004年7月19日 (月)

PAR このエントリーを含むはてなブックマーク

いやな日記で紹介されている PAR を試してみた。 PARWindows に限らず実行形式のファイルを生成する事ができる (UNIX 系ではメリットは少ないかもしれないが)。

PAR ファイル (ZIP) として必要なスクリプトやモジュールをパッケージ化できるのも嬉しい。 Perl は便利なのだが他人に使ってもらう時に面倒で JavaJAR ファイルが羨しかったのだが、まさにそれを実現してくれる (実行可能ファイルにしてしまうともっとお気楽)。

また 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

スポンサード リンク


[ 7月19日全て ]

2004年7月28日 (水)

xyzzyを読み取り専用メディアから起動する このエントリーを含むはてなブックマーク

新人プログラマには「プログラムを組むんだから、とりあえずテキストエディタを何か入れておけ」と言うのだが、実際のところ自分が今仕事で使っている Windows BOX にはテキストエディタインストールされていない。

メモ帳」ですよ。

ちゃんと編集する時は Linux BOX 上の Emacs を使ってしまうので、Windows BOX では力を入れて環境構築していなかったり。 しかし、やっぱり何かテキストエディタがないと不便といえば不便。 ということで久しぶりに何か入れてみることにした。

最近は「インストール不要のソフトを USB メモリに入れて相手先で利用できるようにする」環境作りをぽちぽちしているので、エディタもそのようにできるのを選びたい。

  • 読み取り専用メディアからインストールなしで起動できる
  • UTF-8 のファイルを編集できる
  • できれば Emacs ライクなキーバインディング

というのが主な条件。

書き込み禁止にした USB メモリや、read only な Samba 公開ディレクトリ上(あるいは CD-R 上)から直接起動できるようにするのが目的。

@ xyzzy 0.2.2.233

以前にもちょっと使ったことがある。 Meadow はヘビーだし設定が面倒なので xyzzy が良い。

で実験。

アーカイブを展開してすぐ xyzzy.exe を実行できるのだが、

  1. ダンプイメージ
  2. etc/DOC (lisp/help.l より)
  3. $XYZZY/usr/usrname/os/xyzzy.ini
  4. $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 だとユーザ名やホームディレクトリとして使える環境変数は標準状態では存在しないようなので一工夫が必要になるか。


[ 7月28日全て ]

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 ってどれよ。 WindowsJRE インストーラを実行して実際にインストールした後、インストール先にあるファイルって判断で良いのかな。多分。

それから、「それらをディレクトリごとコピーすれば他でも動くかどうか」という事に関する記述が見つけられないのがちょっと気持ち悪い。大丈夫っぽいんだけれど。

@ NSIS

NSIS 側はディレクトリまるごとインストール(File /r jre)と、アンインストール時にまるごと削除 (RMDir /r "$INSTDIR\jre") で OK。 実行に関しては NSIS Archive の Examples にある記事「Java Launcher」を参考に起動のための exe を作るなどすれば良い。 これは NSISスクリプトを用いて「java.exe を探し出して指定したパラメータで呼び出す exe ファイル」を作るというもの。

NSISインストーラを作るためのソフトであるが、NSISコンパイラでちょっとしたプログラムも書けるよという事を示す面白い例でもある。 これぐらいの用途であれば結構コンパクトな実行可能ファイルを吐いてくれる。


[ 12月2日全て ]

2004年12月6日 (月)

JSmoothWin32 上でのJava プログラム起動ファイル作成 このエントリーを含むはてなブックマーク

最近、Java プログラムを Win32 上で簡単に起動できるようにする方法を調査中。

JSmooth 0.9.7 を試してみる。 JSmooth 自体も Java アプリケーションなので、Linux で動くかと昨日試してみた(ソースをとってきて ant jar; ant run)のだがうまく動かなかった。 ということで今日 Windows 上で。

GUIベースなので使い方を一度覚えれば比較的簡単に使える。

など。手軽であるが、生成したランチャ(JARファイル埋め込み無し)で、約400KB弱となった。でかい。

NSIS で同様のランチャ(こちらも簡単なJVM検索はあり。ページへの誘導はなし)を生成すると、30KB強。 NSIS なら Linux でも生成できる事を考えると、JARファイルの exe 埋め込み機能以外は NSIS の方がよさそうだ。


[ 12月6日全て ]

2005年3月7日 (月)

UPX実行可能ファイルを小さく このエントリーを含むはてなブックマーク

PARのチュートリアルで UPX (the Ultimate Packer for eXecutables)というツールが紹介されていたので使ってみる。 実行可能なファイルを、実行可能のまま圧縮するというもの。 MS-DOSの時代の伝説のプログラム DIET を思い出す。

PAR で実行可能形式に変換したPerlスクリプトを UPX 1.25 で圧縮したところサイズが小さくなった。 しかし PAR で作った実行可能バイナリは実行時に自身を展開するため、圧縮によってフォーマットが変わってしまっていることを検知して警告が出てしまう。 ちょっとよろしくない。

それにNSISインストーラを作ってしまえばかなり高圧縮がかかるし、そういう意味では出番がないか。

いや USB メモリにいろいろ実行可能ファイルを詰め込みたい時にはいいかもしれない。


[ 3月7日全て ]

2005年3月15日 (火)

PAR で作った実行可能ファイルを殺せない このエントリーを含むはてなブックマーク

PARWindows実行可能ファイル(exe)にしたプログラムを、別のプログラムから起動・終了させるプログラムを書いていたところ困った事態。

今まで気がつかなかったのだが、PARで作った実行可能ファイルを実行するとプロセスが起動される。片方がブートストラップで、もう一方がPerlインタプリタのようだ。

プログラムから起動した時に取得できるのはブートストラップの pid で、これを TerminateProcess してもPerlインタプリタの方は以前として動き続ける。 止める方法がわからん。

自爆機能とかつけて対処するしかないか。

@ --pidfile

結局 --pidfile オプションをつけて、pid をファイルに書き出せるようにした。 $$ の値はPerlインタプリタ側のプロセスIDで、こちらを kill するとまとめて落ちてくれる。


[ 3月15日全て ]

2005年3月31日 (木)

Wineを入れてみる このエントリーを含むはてなブックマーク

Linux 上で Win32 用の ActivePerl を動かして、PPM パッケージの作成や PAR による実行可能ファイルの作成をできるようにしたい。

調べたところ Wine 上でも ActivePerl が動くらしい。 さっそく Debian GNU/Linuxsid 環境にインストールしてみる。

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 以下を作っても駄目。

要調査。


[ 3月31日全て ]

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 ファイルを指定する従来の方式に比べてかなり便利そうである。 ということで試用してみた。

まずは

あたりをインストールし準備 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

*1ここでは Windows 上の

@ 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 リポジトリで集中管理するというのもちょっと魅力的である。


[ 12月12日全て ]

2006年12月20日 (水)

NSIS 2.22 は Linuxビルドできず このエントリーを含むはてなブックマーク

Windows 用のインストーラ作成ツール NSIS は、スクリプトベースでインストーラを作っていくのが1つの特徴である。 NSIS スクリプトは、さすがインスーラ作成用だけあって

  • ファイル処理 (コピー、削除、……)
  • レジストリの読み書き
  • プログラムの実行

その他システム関連のコマンドが充実している。 コンパイルするとかなりコンパクトな実行形式ファイル (EXE) を生成してくれるので、ちょっとした処理を自動化するには便利である。

今回 USB メモリに入れておいて、そのドライブ上のいくつかのディレクトリに PATH が通った状態でコマンドプロンプトを開くツールを NSIS で書いておこうかと思って試す。

NSISPOSIX ベースシステムでビルドし実行でき、NSIS スクリプトをコンパイルできる。 ということで作業を Linux で作業をしていたのだが、どうやら System::Call が使えないようだ(スクリプトのコンパイルに失敗する)。

Debian パッケージが古いせい (2.19-1.1) かと思い、ソースパッケージビルドしてみたらまさに System 関連らしいところでコンパイルがこけている (そういう背景で Debian パッケージがアップデートされていない?)。

ということでどうも最新の NSISLinux では駄目っぽい。

しょうがないので久しぶりに Wine

Wine 上に NSIS 2.22 をインストールして makensis.exe を実行してみたところ試した範囲ではうまく動いている。 ついでにでき上がった実行可能ファイルWine 上で試せる。

しばらくは Wine 上で NSIS スクリプト書きを楽しむことにしよう (最終的には Windows 上でコンパイルしなおして動作確認するのだけれども)。


[ 12月20日全て ]

スポンサード リンク

■よく検索されるキーワード

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)

この日記のはてなブックマーク数 Add to Google RSS

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)