[リストへもどる]
一括表示
タイトルBeta20120909 B2Eで16文字以上のファイル名の書庫を解凍できない
記事No306
投稿日: 2012/09/13(Thu) 17:52:44
投稿者b2er
LhaForge Beta20120909に同梱されているB2Eを使用して不具合に遭遇したので報告いたします。


■再現手順

1. 下記のb2eスクリプトを7z.zip.b2eとして保存し、b2eフォルダに入れます。b2eフォルダに7za.exeも入れます。
load:
(name "7za.exe")
decode:
(cmd x (arc))
list:
(scan "---" 1 "---" 1 53 l (arc))

2. 1234567890123.7zというファイル名の書庫を作成します。ファイル名は何でも良いですが、拡張子も合わせて16文字以上になるようにします。

3. LhaForgeの設定でB2E32.dllを有効にし、「LhaForge.exe /e 1234567890123.7z」というような引数で解凍を試みます。
または、「b2ecmd.exe -e 1234567890123.7z」で解凍を試みます。

4. 「例外 不明なソフトウェア例外 (0xc0000409) がアプリケーションの 0x00ad928a で発生しました。」というダイアログが表示されます。

LhaForge 1.6.0と1.6.0に同梱されているB2E32.dllを使用すると、ファイル名が16文字ではなく28文字で解凍できなくなります。ファイル名の文字数を56文字まで多くすると、「"0x34333231" の命令が "0x00000000" のメモリを参照しました。メモリが "written" になることはできませんでした。」というダイアログが表示されます。

上記は7za.exeを例にしていますが、rar.exe・7z.exeでも同じ結果でした。


■実行環境

XP Pro SP3
VIA CPU 1.5GHz
2GB RAM

タイトルRe: Beta20120909 B2Eで16文字以上のファイル名の書庫を解凍できない
記事No307
投稿日: 2012/09/14(Fri) 00:26:25
投稿者Claybird < >
参照先http://claybird.sakura.ne.jp/
再現手順の提示ありがとうございます。
ただ、今手元にあるWindows 7(64bit)環境では、問題が再現しませんでした。
この問題は、OSもしくは個体によって発生しない場合があるのかもしれません。
少し時間はかかりますが、他の環境でも試してみます。
続報をお待ちください。

タイトルRe^2: Beta20120909 B2Eで16文字以上のファイル名の書庫を解凍できない
記事No308
投稿日: 2012/09/14(Fri) 14:25:03
投稿者b2er < >
こちらでも他環境での再現を行なってみました。

Windows 7 SP1 32bitでは再現せず。
LhaForgeのサポート対象外ですが、Windows 2000 SP4 Proでは再現できました。

タイトルRe^3: Beta20120909 B2Eで16文字以上のファイル名の書庫を解凍できない
記事No309
投稿日: 2012/09/15(Sat) 00:12:44
投稿者Claybird < >
参照先http://claybird.sakura.ne.jp/
> Windows 7 SP1 32bitでは再現せず。
> LhaForgeのサポート対象外ですが、Windows 2000 SP4 Proでは再現できました。

私の方でも、手元のWindows XP環境で試してみましたが、問題が再現できませんでした。

ハードウェアの問題の可能性もありますので、ひとつ確認させてください。
そちらの環境では、XPと2000の両方で問題が起きているとのことですが、これは2台の別PCでしょうか?
それとも、同じPCでデュアルブートした環境でしょうか?

タイトルRe^4: Beta20120909 B2Eで16文字以上のファイル名の書庫を解凍できない
記事No310
投稿日: 2012/09/15(Sat) 00:23:45
投稿者b2er
それぞれ別のPCです。

Windows XP
VIA C7 1.5GHz

Windows 2000
Pentium 2 450MHz

今日の昼に別のXPのPCでも試してみます。

タイトルRe^4: Beta20120909 B2Eで16文字以上のファイル名の書庫を解凍できない
記事No311
投稿日: 2012/09/15(Sat) 18:23:47
投稿者b2er
別のXP HomeのPC(Celeron D)で試したところ、再現しないことを確認しました。
セーフモードでサービス起動を最小限に抑えても再現しないため、レジストリの設定に原因がありそうだと考えました。
設定変更をして絞ってみたところ、NTFSのショートファイル名の作成を管理する「NtfsDisable8dot3NameCreation」の変更で再現できました。

以下に再現手順を記します。

1. 以下のレジストリファイルを作成し、NtfsDisable8dot3NameCreation.regとして保存します。
REGEDIT4
[HKLM\SYSTEM\CurrentControlSet\Control\FileSystem]
"NtfsDisable8dot3NameCreation"=dword:00000001

2. 「HKLM\SYSTEM\CurrentControlSet\Control\FileSystem」キーを如何様かにしてバックアップを取り、NtfsDisable8dot3NameCreation.regを実行します。

3. PCを再起動します。

4. 下記リンクからT-LF.zipをダウンロードし、解凍します。
http://www1.axfc.net/uploader/Ne/so/139510.zip

5. 「T-LF\Test-lfarchive_1_6_0\Test28-7z.bat」または「T-LF\Test-lfbeta20120909\Test-7z.bat」を実行します。
書庫内のファイルが閲覧できなければ、問題が再現できています。

T-LF.zipはNTFSのショートファイル名作成を無効にした後で解凍しないと、解凍したファイルにショートファイル名が付けられ、問題が再現できなくなります。
T-LF.zipのB2Eのテスト用として7za.exeを入れてあります。Rar.exe用、CABARC.EXE用のテスト用BATを入れてありますが、ライセンスの都合上同梱できませんでした。結果は同じになるかと思いますが、必要とあれば調達してくださいますようお願いいたします。
問題再現時、VIAのXP・Pen2の2000では例外エラーやメモリ参照エラーのダイアログが出ますが、Celeron DのXPのPCでは出ませんでした。

タイトルRe^5: Beta20120909 B2Eで16文字以上のファイル名の書庫を解凍できない
記事No312
投稿日: 2012/09/15(Sat) 21:56:35
投稿者Claybird < >
参照先http://claybird.sakura.ne.jp/
詳細ありがとうございます。
レジストリ設定後、Windows 7でも問題が再現できることを確認しました。

調べたところ、短いファイル名用のメモリ(14文字まで記録可能)に、長いファイル名を書き込んでいる箇所がありました。
結果、メモリが破壊されて解凍に失敗していたようです。

修正後のb2e32.dllを
http://claybird.sakura.ne.jp/b2e32_007b3.zip
にアップロードしました。
これで問題が解決すると思います。

タイトルRe^6: Beta20120909 B2Eで16文字以上のファイル名の書庫を解凍できない
記事No313
投稿日: 2012/09/16(Sun) 06:22:09
投稿者b2er
修正版b2e32.dllを使い、私の環境でも解凍ができるか試してみました。
VIA XP、Pen2 2000の両方で解凍できることを確認できました。

修正してくださり誠にありがとうございます。