-
Notifications
You must be signed in to change notification settings - Fork 2
/
ax7z_s.txt
354 lines (290 loc) · 14.5 KB
/
ax7z_s.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
----------------------------------------------------------------------------
ax7z.spi v0.7 for 7-zip 4.57+ s_y4b5
----------------------------------------------------------------------------
2015/01/08 Yak!
****************************************************************************
本バージョンは beta 版です。まだ大きなバグが残っている可能性が高いです。
****************************************************************************
0.目次
1.概要
2.動作環境
3.設定の説明
4.パスワード付き書庫への対応
5.バックグラウンド展開のキャンセル
6.動作確認
7.コンパイル方法
8.著作権・免責等
9.既知の不具合・仕様
10.連絡先
11.TODO
12.History
1.概要
Makito Miyano 氏による 7-zip の解凍エンジンを利用した susieプラグインで
ある、ax7z.spi v0.7 を 7-zip 4.57 以降向けにビルドした上、汎用ソリッド書庫
展開高速化機能(バックグランド展開)を追加して ax7z_s.spi としたものです。
一部アプリケーションで相対パスつきアーカイブの処理に失敗する点と、取得できる
場合には CRC 値も返すよう修正してあります。
また、パスワード付き書庫も扱えるようにしています。
7-zip が対応している形式全てを扱うことが可能です。
7-zip 9.20 の DLL を使用している場合は、
7z, XZ, BZIP2, GZIP, TAR, ZIP, WIM, ARJ, CAB, CHM, CPIO, CramFS, DEB,
DMG, FAT, HFS, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, RAR, RPM, SquashFS,
UDF, VHD, WIM, XAR, Z
等となります。
なお、拡張子によって対応形式かどうかを判別し中身を見ていません。
7-zip の DLL から取得できる情報以外に追加で拡張子を指定可能です。
デフォルトで iso 用として bin, img, mdf を追加しています。
ただし、これらのファイルが全て開けるわけではありません。
もともと ax7z.spi には同じ Makito Miyano 氏作のビューワ Hamana 向けに
ソリッド書庫展開用特別ルーチンが実装されていますが、Hamana 専用でした。
他ソフトにおいてもソリッド書庫展開高速化を図るべく ax7z_s.spi として
実装を行っています。
全ファイル展開をバックグランドで行う方式としています。
なお、本プラグインは Hamana では正常に動作しません。汎用ソリッド書庫展開
高速化機能なし版をご利用ください。
現状 beta 版であり「6.既知の不具合・仕様」の通り色々と制限事項、機能不足が
ありますのでご注意ください。
特に、ソリッド書庫展開のバックグランド化については書庫、使用ソフトの条件に
よっては期待される動作となりませんのでご注意ください。
このソフトとの組み合わせで有効だった、あるいは、うまく動作しなかった等の
フィードバックを頂ければ幸いです。
2.動作環境
ax7z_s.spi 単独では動作しません。他に 7-zip 4.57 以降に含まれる 7z.dll が
以下のいずれかの場所に必要です。
※ 7-zip 4.62, 4.65, 9.20, 9.22 の 7z.dll でも動作しているようです。
・ax7z_s.spi と同じフォルダ
・レジストリ HKCR\Software\7-zip\Path (文字列)に設定されたフォルダ
・レジストリ HKLM\Software\7-zip\Path (文字列)に設定されたフォルダ
7-zip のインストーラによって上記レジストリ値が設定されるので、
インストーラでインストールされた場合は、他に何もする必要はありません。
s_y3a2 までは spi ファイルと同じディレクトリに ax7z_s.ini を作成して
いましたが、本バージョンからデフォルトでは以下のパスに ax7z_s.ini が
作成されます。
XP: C:\Documents and Settings\<ユーザー名>\Application Data\ax7z
Vista 以降: C:\Users\<ユーザー名>\AppData\Roaming\ax7z
旧バージョンを使用していた場合、初回読み込み時に ini ファイルの
場所を移動するか問い合わせます。「はい」で上記パスに移動、「いいえ」で
従来のまま spi ファイルと同じディレクトリになります。
設定によって、後から以前と同様 spi ファイルと同じディレクトリに ini を
作成するよう変更することも可能です。
3.設定の説明
通常の設定ダイアログもオリジナル版 ax7z.spi から変更しました。
上側、DLL defined :となっているのが 7z.dll が対応している拡張子、形式の
リストです。選択状態になっているものが有効です。
Select all, Unselect all はそれぞれ全てを選択、非選択にします。
Load default は全選択で、かつ、ユーザー定義拡張子(後述)を
bin;img;mdf にします。
下側 User-defined: がユーザー定義拡張子で、7z.dll で指定されている拡張子
以外で ax7z_s.spi で扱いたい拡張子を指定します。
; 区切りで拡張子のみ(.不要)のリストで入力します。
拡張子の順番は保存されません(次回設定時にはソートされています)。
Solid... ボタンを押すことによりソリッド書庫展開に関する設定ダイアログが
開きます。
最下段の stay password dialog on top はパスワード入力用ダイアログを
最前面にするかどうかの設定です。
per-user configuration (ini in AppData) にチェックが入っている場合は、
ini ファイルは「2.動作環境」のデフォルトのパスに、チェックを外した場合は、
spi ファイルと同じディレクトリに作成されます。
ソリッド書庫展開に関する設定ダイアログについて説明します。
左側のチェックボックスが 7-zip、rar についてソリッド書庫展開高速化を
有効にするかどうかです。
Look-ahead は現在無効なので無視してください。
Max はキャッシュサイズ制限値、Purge は制限値を超えた際のキャッシュ削除
1 回のサイズです。制限値が -1 の場合、無制限となります。メモリ、ディスクの
双方が有効の場合は、メモリが優先的に使用され、メモリから削除される内容が
ディスクに書き出されます。なお、ディスクキャッシュでは、現在展開中の
書庫の内容は制限値を超えても削除されません。Purge 値が小さい場合は
キャッシュ削除の回数が増え、大きい場合には削除する必要がなかったもの
まで削除される可能性が高くなります。
Cache folder でディスクキャッシュの場所を指定します。Browse... で
フォルダ選択ダイアログが開きます。なお、多数のファイルが作成されますので
キャッシュ専用ディレクトリの作成をお勧めします。
Cache clear... でキャッシュの削除を行います。動作が変な場合は、一度
キャッシュを削除してみると良いかもしれません。
4.パスワード付き書庫への対応
パスワード付き書庫を開くとパスワード入力ダイアログが表示されます。
基本的に入力されたパスワードはキャッシュされ、解凍エラーが発生した場合か、
別の書庫を開いた場合、特定条件下でソリッド書庫を開いた場合に破棄されます。
OK は通常のパスワード入力、Skip は解凍エラーを無視して次のファイルへ、
Skip Archive は別の書庫まで解凍エラーを無視して処理を進めます。
ファイル名が暗号化されている書庫の場合、Skip は選択できません。
解凍エラー発生時の再入力の場合はダイアログのメッセージが Extract error,
(以下略)のように表示が変わります。
なお、異なるパスワードの書庫を開いた際に、解凍エラーと同じ表示になりますが、
これはキャッシュされたパスワードで展開しようとしてエラーになるからです。
ダイアログのタイトルバーで右クリック(あるいは Alt+スペース)で表示される
メニューにある TopMost をチェックする、あるいはチェックを外すことにより
ダイアログを最前面にするかどうかを切り替えることができます。
デフォルト設定を切り替えたい場合は設定ダイアログで可能です。
「3.設定の説明」を参照ください。
パスワード周りについては実装も詰め切れておらず、また、そもそもどのような
仕様にするべきか悩んでいる面もあり、提案、意見、要望等ありましたら掲示板
にでもお願いいたします。
5.バックグラウンド展開のキャンセル
バックグラウンド展開時に表示される進捗ダイアログにキャンセルボタンが
あります。このボタンを押下することによりバックグランド展開をキャンセル
することができます。しかし、ソフトによっては再度同じ書庫のファイルを
展開しようとするためすぐに進捗ダイアログが再表示される場合があります。
この場合、一旦別ファイルを開いた後、表示されたままになっている進捗
ダイアログのキャンセルボタンを押下してください。
6.動作確認
Windows7 Professional SP1 64bit + Core i7-2620M + NVS 4200M
あふw v1.56 / Leeyes v2.6.1 / Hamana v1.48 / MassiGra v0.45 / Susie 0.47b
Windows XP Professional SP3 on VMware Workstation 7.1.6
Leeyes v2.6.1
7.コンパイル方法
以下の手順でコンパイルできます。
なお外部ライブラリでバイナリ作成に使用したバージョンは 7-zip 4.57,
SQLite 3.8.7.4, Boost 1.57 です。
1) 7-zip の本家サイト(http://www.7-zip.org/)より 7-zipのソースを
取得します。
2) SQLite の本家サイト(http://www.sqlite.org/)より SQLite のソースを
取得します。
3) Boost の本家サイト(http://www.boost.org/)よりソースを取得してビルド
するか、バイナリインストーラを http://www.boostpro.com/products/free
からダウンロードして実行、インストールします。
4) Makito Miyano 氏のサイト(http://miyano.s53.xrea.com/)より ax7z.spi
v0.7(ax7z20060619.zip)を取得します。
※ダウンロードできない場合は以下のミラーからダウンロードできます。
http://yak3.myhome.cx:8080/junks/#misc.ax7z_s_spi
5) ax7z20060619.zip 中の ax7z_src.zipを解凍します。
6) 解凍すると 7zというフォルダができるので、そのフォルダに
1) で取得した 7-zip のソース一式を解凍します。
7) ax7z20060619-457s_y4b4.patch を適用します。
8) sqlite3 フォルダ以下に 2) で取得した sqlite3 のソース一式を解凍
します。
9) 00am.slnを開き Boost のヘッダ検索パス、ライブラリ検索パスを調整して
ビルドします。
なお、UDF/ISO ブリッジへの暫定対応のため、7-zipのソースを一部改変
しています(4.65 のソースからの back port 相当)。
7-zipの関数を利用する部分は 7z/7zip/Bundles/ax7z 以下にあります。
8.著作権・免責等
ファイルの圧縮、解凍の基本部分の著作権は Igor Pavlov 氏にあります。
7z 圧縮方式の BZip2 アルゴリズムは Julian Seward 氏が作成し
PPMD アルゴリズムは Dmitry Shkarin 氏が作成しています。
susieプラグイン 作成部分に関しては Makito Miyano 氏が著作権を保有し
ています。
SQLite は Hwaci 社より Public Domain で配布されています。
Boost ライブラリは Boost Software License で配布されています。
ax7z.spi および ax7z_s.spi は GNU Lesser General Public License (LGPL)の元で
配布されています。ソフトの改変、再配布等については LGPL に従ってください。
http://www.gnu.org/copyleft/lesser.ja.html
また、本ソフトウェアを使用することによって如何なる損害が発生しても
作者は一切責任を負わないものとします。
全ては自己責任の元でお使いください。
9.既知の不具合・仕様
・実質バックグラウンド展開にならない場合がある。
書庫全体を先頭ファイルから展開し、プラグイン使用側ソフトから要求された
ファイルの内、展開できたものから返す、という実装になっています。
そのため、プラグイン使用側が書庫末尾のファイルを要求し、かつ結果が返って
くるまで待機する場合、書庫全体を展開し終えるまで処理が戻りません。
例1) Leeyes で先読み設定を有効とし後方を 1 枚以上としている場合。
先頭ファイルを読み込む際、後方先読みが 1 枚以上だと末尾を読み込もうと
して上記の状況が発生します。
バックグラウンド展開できるようにするためには「イメージ…動作」→
「先読み」→「後方」を 0 枚に設定してください。
例2) プラグイン使用側ソフトのソート順序が書庫と異なる場合。
例えば _ (アンダーバー)で始まるファイルがある場合、プラグイン使用側
ソフトではソート順で最初なので最初に読み込もうとする一方、書庫側では
末尾となり上記の状況が発生する可能性があります。
基本的にはどうしようもありません。プラグイン側で無理矢理ファイル名を
すり替えてしまうという力業もなくはないですが……
・Unicode に非対応。
・Hamana でパスワード付き zip を開けない。
(Hamana では zip の処理が内蔵ルーチン優先のため。
Susie プラグイン側では対応不可能)
・展開途中に別の書庫を開くとパスワード入力ダイアログが連続して複数回開く
場合がある。
・ソリッド書庫を開くとパスワード付きでなくともキャッシュしていたパスワードを
消去する場合がある。
(条件によってはパスワードの再入力ができないので安全側に倒すためです)
・エラーチェックが甘すぎる。
・常に書庫全体を展開する。
・使用するソフトの仕様によっては高速化どころか鈍速化する可能性がある。
・ファイル単体が 2GB を超えると正常動作しない。
(Susie plugin 仕様自体の制限)
10.連絡先
不具合、要望、感想等は Yak! <[email protected]> までお願いします。
本パッチ版について Makito Miyano 氏に質問したりしないようお願いします。
11.TODO
・7-zip 9.2x への移行
・設定値の整合性チェック
・キャッシュの挙動の調整
・単発モード(同一プロセス内でのみキャッシュ有効)の追加
・先読み対象の設定
・終了時にメモリ内容をディスクへ吐き出し
・メモリ、ディスクの二重持ち?
・キャッシュ削除、マーク処理の効率化
・リファクタリング
・ヘッダ、実装の分離の調整
・責任分割の再考
・エラーチェック、例外処理
12.History
2015/01/09 (s_y4b5)
- CoUnitialize()/CoUnitialize() の使用領域を限定
- Vista以降でネットワークフォルダにアクセスするとフリーズする等
の挙動に対する修正
- Boost を 1.57 に更新
- SQLite を 3.8.7.4 に更新
2013/08/28 (s_y4b4)
- XP で動作するように修正
- _WIN32_WINNT の明示的設定
- 開発環境を VisualStudio 2012 SP3 に更新
2013/08/25 (s_y4b3)
- マルチユーザー環境向けにデフォルトの ini 作成位置を変更
- 使用 7z.dll のバージョンをバージョン情報に表示
- バージョンリソースを設定
- キャッシュ用 DB を常に UTF-8 エンコードで作成するよう修正
- SPI 関数で例外を補足するよう変更
- 開発環境を VisualStudio 2012 に変更
- Boost を 1.54 に更新
- SQLite を 3.7.17 に更新
2012/01/21 (s_y4a2)
- ソリッド書庫展開のバックグランド処理キャンセルを実装
- デッドロック回避用コードを追加
- SQLite を 3.7.10 に更新
2011/01/03 (s_y4a1)
- ソリッド書庫展開のバックグランド化を実装
- SQLite を 3.7.4 に更新
2010/06/16 (s_y3b4)
- パスワード入力用ダイアログを最前面にする設定を追加
- SQLite を 3.6.23.1 に更新
2009/10/21 (s_y3b3)
- gzip, bzip2 系の書庫(.tar.gz, .tgz 等)が展開できなかった点を修正
- ファイル名が暗号化された書庫に対応
- パスワードの取り扱いを変更(4.参照)
- キャッシュ用フォルダ指定の末尾\の有無の揺れに対応
- SQLite を 3.6.19 に更新
2009/09/03 (s_y3b2)
- 同パス書庫ファイルに対するガードを強化(掲示板報告内容に対する暫定対応)
2009/08/23 (s_y3b1)
- パスワードのキャッシュに対応(解凍対象書庫変更まで有効)
- SQLite を 3.6.17 に更新
2009/08/11 (s_y3b0)
- SQLite を 3.6.16 に更新
- ソリッド書庫展開高速化版を分離
2009/02/22 (y2b5)
- パスワードに対応
- 7-zip の DLL が対応している形式全てに対応できるように変更
- SQLite を 3.6.11 に更新
2009/02/12 (y2b4)
- UDF/ISO ブリッジに暫定的に対応(7-zip 4.65 の DLL が必要)
2009/02/12 (y2b3)
- SQLite を 3.6.10 に更新
- iso に対応
2009/01/01 (y2b2)
- SQLite を 3.6.7 に更新
- 書庫ファイルの更新時刻かサイズが変化した場合、ファイルキャッシュを削除
- スレッド間排他制御追加
- (Susie plugin 仕様範囲内で) 2GB の壁を排除
- キャッシュ済みマーク、チェック、削除のバグを修正
2008/12/14 (y2b1)
- 書庫タイプ(rar, 7-zip)による汎用ソリッド書庫展開高速化の有効・
無効設定を追加
- メモリキャッシュ、ディスクキャッシュの併用、サイズ制限を追加
2008/11/16 (y2b0)
- 汎用ソリッド書庫展開高速化の concept proof 版を実装
2008/03/02 (y1)
- 取得できる場合は CRC 値を返すよう修正
2008/01/16 (初版)
- ax7z.spi v0.7 を 7-zip ver4.57 用にビルド