Linuxのサーバで演算して、複数のファイルを1ファイルにアーカイブ化(LZHかZIPで圧縮もして)しWindowsでの自己解凍形式(.exe)ファイルとして作成する為のLinux側での実装方法を探しています。

#使ったらよいライブラリ、プログラムソースなど
情報源のソースはありませんか?日本語希望。書籍でもOK。
質問者はそもそもWindowsの自己解凍形式としての.exeがどのような構造になっているのか、から知識がありませんのでその辺のソースもあるとうれしいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/08/03 22:28:48
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:wasisan No.1

回答回数86ベストアンサー獲得回数7

ポイント35pt

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

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

id:katow

ありがとうございます。

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

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

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

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

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

2007/07/31 21:06:19
id:wasisan No.3

回答回数86ベストアンサー獲得回数7

ポイント45pt

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の前側にくっつけてやるだけでできると思います.

id:katow

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

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

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

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

(追記)2007/8/3

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

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

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

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

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

不幸中の幸いでした。

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

2007/08/03 22:26:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません