人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Linuxのサーバで演算して、複数のファイルを1ファイルにアーカイブ化(LZHかZIPで圧縮もして)しWindowsでの自己解凍形式(.exe)ファイルとして作成する為のLinux側での実装方法を探しています。
#使ったらよいライブラリ、プログラムソースなど
情報源のソースはありませんか?日本語希望。書籍でもOK。
質問者はそもそもWindowsの自己解凍形式としての.exeがどのような構造になっているのか、から知識がありませんのでその辺のソースもあるとうれしいです。

●質問者: katow
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:exe Linux lzh Windows zip
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● wasisan
●35ポイント

TAR.BZ2自己解凍モジュール for Win32 CUI(Windows95/98/Me / ユーティリティ):

http://www.vector.co.jp/soft/dl/win95/util/se363456.html

というのを見つけました(Visual StudioのCソースコードも付属しているようです).

これをWine(Linux上のWin32APIコード実行環境)

Wine - Wikipedia:

http://ja.wikipedia.org/wiki/Wine

上で実行してやればできると思います.

質問はバイナリレベルでexeファイルを作るという

趣旨に見えますが,これはなかなか厳しいのでは?

CodeZine:EXEファイルの内部構造(PEヘッダ)(EXEファイル, PEヘッダ, Windows, 実行ファイル):

http://codezine.jp/a/article.aspx?aid=412

この辺りの記事を読みながら地道にやるしかなさそうです.

◎質問者からの返答

ありがとうございます。

今回の環境にWineがあるか確認したいと思います。

あと、Exeファイルの内容部構造の情報もありがとうございます。こちらも後学の為、勉強してみます。確かにいきなりバイナリで作るのは難しそう。

1)前者の手段で1ファイル分の自己解凍形式.exeを作成する

2)ヘッダ部分のみ流用して、後のデータ部を差し替えて使ってみる

というのは実装できないのだろうか・・・その辺が可能なのかが、多分Exeの内部構造の資料を読めば分かるのかもしれませんが(やっぱり私分かってませんかね?)


2 ● minkpa
●0ポイント

http://www.archi.is.tohoku.ac.jp/people/simakura/linux.html


3 ● wasisan
●45ポイント

http://www.mingw.org/

すみませんが,追加回答となります.URLはほぼダミーです.

あれから,紹介したツールのソースコードを少し読みましたので.

以下,bzip2はzip/lzhでも同じことです.


自己解凍形式ファイルというのは,

自分自身のファイルの後ろにつけたデータ部(複数のファイルをtar.bzip2したファイル)

に対してbunzip2(解凍した後,tarで複数ファイルに展開する処理)を実行するexeファイルに過ぎないことが多いと思います.


上で紹介した「TAR.BZ2自己解凍モジュール 」は,

自分自身のファイル(引数arg[0])に対して,fopenした後,

fseekで(bunzip2.exeの大きさ分移動して)データ部まで移動し,bunzip2を適用していました.


 |→ここからbunzip2をかける
+-------------+---------------------+
| bunzip2.exe | データ部(tar.bzip2) |
+-------------+---------------------+
全体:ファイル名.exe


それなので,自己解凍形式(foo.exe)を作るためには,DOSシェルで,

$ copy /b bunzip2.exe + foo.tar.bzip2 foo.exe

として,tar.bzip2したディレクトリfooの前側にbunzip2.exeをくっつけてやるだけでよかったのでした.


たぶん,EXE内部に立ち入ったり,Wineを使うまでもなく,

bunzip2の処理を行うEXEをビルド(Windows上で作るのが手っ取り早い.他にはMINGWなどのクロスコンパイラとか)して,

cat, cpでtar.bzip2の前側にくっつけてやるだけでできると思います.

◎質問者からの返答

おおお、ありがとうございます!

さっそく開発陣に試してもらいます。

この通り行けば、非常にシンプルにできそうてですねえ。

テストして、結果ご報告致します。

(追記)2007/8/3

この件、最終的にはテスト着手する前に、今回は解決しました。

当初Linuxサーバで複数ファイルを.exeにアーカイブ化してダウンロード配布させる環境の構築が必要でした。

それが必要になった理由が、今回のシステムには元々.lzh形式にアーカイブ化してダウンロード配布させる機能は標準であったのですが、導入先のWin環境に解凍ソフトを配布するのが面倒、と先方にいわれてしまったからのでした。

しかしその後、先方が既にWinXPに統一されており、以下のサイトから入手できる「Windows Genuine Advantage 確認ツール」を導入済みだったので、導入の特典である「Microsoft 圧縮 (LZH 形式) フォルダ」が使える状態であることが判ったのでした。

http://www.microsoft.com/genuine/offers/

不幸中の幸いでした。

しかしどこかで.exe配布の実装には挑戦したいと思います。皆様情報ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ