/Future.txt |
---|
10,3 → 10,7 |
testen, was bei leerer zip passieren würde |
type TZMReplaceOpts = (rplConfirm, rplAlways, rplNewer, rplNever); |
Bei MakeSFX.exe vorher einen Extraktionstest durchführen? (um z.B. Compressionsfehler etc. auszuschließen?) |
Einen ZIP-Packer/Modifier, der auch korrekte Kommentare erstellt (Checkboxes zur Unterstützung) machen? |
/ExtractorError.dfm |
---|
2,8 → 2,8 |
Left = 222 |
Top = 133 |
Caption = 'Fehler' |
ClientHeight = 363 |
ClientWidth = 353 |
ClientHeight = 406 |
ClientWidth = 583 |
Color = clBtnFace |
Font.Charset = ANSI_CHARSET |
Font.Color = clWindowText |
/ExtractorMain.pas |
---|
1,6 → 1,6 |
unit ExtractorMain; |
{$DEFINE USE_DZIP_UNPACK} |
{$DEFINE USE_DZIP_UNPACK} // recommended |
interface |
149,6 → 149,7 |
ec: Integer; |
ar: TExecuteSFXAutoRunResult; |
GeneralBaseDir: string; |
ok: boolean; |
const |
C_Explorer_Open_Param = '"%s"'; |
C_Explorer_Select_Param = '/n,/select,"%s"'; |
159,6 → 160,7 |
Lng_AutoRunFailed = 'SFX-AutoRun fehlgeschlagen. Die entpackten Inhalte werden nun angezeigt.'; |
Lng_Unknown_Error = 'Unbekannter Fehler: Dateien sind nicht aufzufinden!'; |
Lng_SelectDir = 'Bitte wählen Sie ein Verzeichnis zum Extrahieren aus. Es wird maximal 1 Datei bzw. Ordner erstellt!'; |
Lng_WriteProtected = 'Das Verzeichnis ist nicht schreibbar! Bitte wählen Sie ein Anderes.'; |
begin |
AZipfile := ExpandUNCFileName(AZipfile); |
RenamingOldPrefix := ''; |
194,21 → 196,43 |
// Find out base dirtory |
GeneralBaseDir := ''; |
case zb.ExtractionTarget of |
etExtractHere: |
if zb.ExtractionTarget = etExtractHere then |
begin |
GeneralBaseDir := ExtractFilePath(AZipfile); // Default |
if not IsDirectoryWritable(GeneralBaseDir) or |
IsAtFlobbyDisk(GeneralBaseDir) then |
begin |
zb.ExtractionTarget := etDesktop; |
end; |
etDesktop: |
end; |
if zb.ExtractionTarget = etDesktop then |
begin |
GeneralBaseDir := GetSpecialFolderPath(CSIDL_DESKTOP); |
if not IsDirectoryWritable(GeneralBaseDir) or |
IsAtFlobbyDisk(GeneralBaseDir) then |
begin |
zb.ExtractionTarget := etAsk; |
end; |
etAsk: |
end; |
if zb.ExtractionTarget = etAsk then |
begin |
repeat |
GeneralBaseDir := MySelectDirectory(Lng_SelectDir); |
if GeneralBaseDir = '' then Exit; |
ok := IsDirectoryWritable(GeneralBaseDir); |
if not ok then |
begin |
MessageDlg(Lng_WriteProtected, mtWarning, [mbOk], 0); |
end; |
until ok; |
end; |
GeneralBaseDir := IncludeTrailingPathDelimiter(GeneralBaseDir); |
// Semantic scanning of ZIP to determinate the final extraction directory |
285,6 → 309,7 |
if ErrorForm.ErrorsAvailable then |
begin |
Hide; |
ErrorForm.ShowModal; |
end; |
611,7 → 636,7 |
MessageDlg(Format(Lng_PasswordWrong, [ForFile]), mtError, [mbOk], 0); |
LastTriedPassword := ''; |
end; |
ErrorForm.NewError(StripBaseDir(ForFile)); |
ErrorForm.NewError(ForFile, SkipType); |
end; |
end. |
/Readme.txt |
---|
9,7 → 9,13 |
* Compatible with AuthentiCode |
* Compatible with Windows 7 |
* Compatible with Windows 95 |
* Accepts encrypted files (currently only ZIP 2.0 Standard) |
Currently not supported |
----------------------- |
* AES-Encryption (128, 256 Bit) |
Current overhead |
---------------- |
44,7 → 50,7 |
-------- |
ZIP has 1 file |
=> Extract in the same directory as the SFX |
=> Extract DIRECTLY in the specified directory |
Is it a directory? |
=> Open the new directory in Windows Explorer |
is it a file? |
65,16 → 71,23 |
C_ASFX_CB_OVR = 'AutoSFX Conflict Behavior: Overwrite all'; |
C_ASFX_CB_NEW = 'AutoSFX Conflict Behavior: Overwrite older'; |
C_ASFX_CB_ASK = 'AutoSFX Conflict Behavior: Ask'; |
C_ASFX_CB_AVO = 'AutoSFX Conflict Behavior: Avoid'; |
C_ASFX_CB_AVO = 'AutoSFX Conflict Behavior: Avoid'; (default) |
C_ASFX_CP_BEF = 'AutoSFX Comment Presentation: Before extracting'; |
C_ASFX_CP_AFT = 'AutoSFX Comment Presentation: After extracting'; |
C_ASFX_CP_NON = 'AutoSFX Comment Presentation: None'; |
C_ASFX_CP_NON = 'AutoSFX Comment Presentation: None'; (default) |
C_ASFX_FC_THS = 'AutoSFX Extraction Target: Extract here'; |
C_ASFX_FC_THS = 'AutoSFX Extraction Target: Extract here'; (default) |
C_ASFX_FC_DSK = 'AutoSFX Extraction Target: Extract to Desktop'; |
C_ASFX_FC_ASK = 'AutoSFX Extraction Target: Choose directory'; |
Note: If you are running the SFX from a CD-Rom, a write-protected |
directory or a flobby (doesn't matter if it is write-protected!), |
the extraction "Here" will be ignored and converted into "Desktop". |
Note: "Avoid" means that an alternative file/foldername will be |
determinated. |
Special AutoRun.inf |
------------------- |
/MakeSFX.exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/td.txt |
---|
1,27 → 1,20 |
sfxmaker ohne argumente: datei open dialog + folder selection dialog |
wenn sich das sfx auf cd oder diskette befindet, auf desktop oder ASK extrahieren |
Kompatibel mit Filenameencryption? |
- ein besseres win7 highres icon machen? |
- spanned sfx possible? |
test 2files, 1file, 1folder |
righttrim on commentwindow |
Delphi 6: Projekteinstellungen prüfen. Debugging bei Extractor aus |
Versioninfo für alle Projekte |
MakeSFX.ico auch in 16x16 (ref: cdfview.dll) |
BUG: |
- W95 issue |
- Ungültige Resourcendatei... |
Sicherheitslücke |
- Der AutoRun kann eine unendliche Rekursion der Entpacker starten! |
Wie kann man alle Variationen feststellen? |
??? |
- Ist es möglich, dass erst Pwd-Dialog und dann Overwrite-Dialog kommt? |
=> Overwrite dialog soll nicht kommen bei "StopAskingPassword" + Verschlüsselt |
Extractor: OpenDialog wenn extractor nackt? |
/Functions.pas |
---|
19,6 → 19,8 |
function SearchNextFreeName(s: string; wantDir: boolean): string; |
function GetSpecialFolderPath(const Folder: integer): string; |
function IsExtractable(AFilename: string): boolean; |
function IsDirectoryWritable(const Dir: String): Boolean; |
function IsAtFlobbyDisk(AFileOrDir: string): boolean; |
implementation |
222,4 → 224,25 |
end; |
end; |
// Ref: http://www.delphiarea.com/articles/how-to-find-if-a-directory-is-writable/ |
function IsDirectoryWritable(const Dir: String): Boolean; |
var |
TempFile: array[0..MAX_PATH] of Char; |
begin |
if GetTempFileName(PChar(Dir), 'DA', 0, TempFile) <> 0 then |
Result := Windows.DeleteFile(TempFile) |
else |
Result := False; |
end; |
function IsAtFlobbyDisk(AFileOrDir: string): boolean; |
var |
s: string; |
begin |
s := ExtractFileDrive(AFileOrDir); |
s := UpperCase(s); |
result := (s = 'A:') or (s = 'B:'); |
end; |
end. |
/Extractor.exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/Tools/RemoveSignature.exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/Tools/RC.Exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/Tools/RcDll.Dll |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/ExtractorError.pas |
---|
2,8 → 2,11 |
interface |
// TODO: Richtige Ordnerliste mit Icons anzeigen? |
uses |
Forms, StdCtrls, ExtCtrls, Controls, Graphics, Classes, Dialogs; |
Forms, StdCtrls, ExtCtrls, Controls, Graphics, Classes, Dialogs, |
ZipMstr19, SysUtils; |
type |
TErrorForm = class(TForm) |
17,7 → 20,7 |
procedure SaveBtnClick(Sender: TObject); |
public |
function ErrorsAvailable: boolean; |
procedure NewError(Filename: string); |
procedure NewError(Filename: string; SkipType: TZMSkipTypes); |
end; |
var |
27,6 → 30,30 |
{$R *.dfm} |
function SkipTypeToStr(SkipType: TZMSkipTypes): string; |
begin |
case SkipType of |
stOnFreshen: result := 'stOnFreshen'; |
stNoOverwrite: result := 'stNoOverwrite'; |
stFileExists: result := 'stFileExists'; |
stBadPassword: result := 'stBadPassword'; |
stBadName: result := 'stBadName'; |
stCompressionUnknown: result := 'stCompressionUnknown'; |
stUnknownZipHost: result := 'stUnknownZipHost'; |
stZipFileFormatWrong: result := 'stZipFileFormatWrong'; |
stGeneralExtractError: result := 'stGeneralExtractError'; |
stUser: result := 'stUser'; |
stCannotDo: result := 'stCannotDo'; |
stNotFound: result := 'stNotFound'; |
stNoShare: result := 'stNoShare'; |
stNoAccess: result := 'stNoAccess'; |
stNoOpen: result := 'stNoOpen'; |
stDupName: result := 'stDupName'; |
stReadError: result := 'stReadError'; |
stSizeChange: result := 'stSizeChange'; |
end; |
end; |
function TErrorForm.ErrorsAvailable: boolean; |
begin |
result := ErrorList.Items.Count > 0; |
41,10 → 68,12 |
SaveBtn.Top := OkBtn.Top; |
end; |
procedure TErrorForm.NewError(Filename: string); |
procedure TErrorForm.NewError(Filename: string; SkipType: TZMSkipTypes); |
resourcestring |
Lng_Err_Entry = '%s (Grund: %s)'; |
begin |
// In future: Also add reason into list? |
ErrorList.Items.Add(Filename); |
ErrorList.Items.Add(Format(Lng_Err_Entry, [Filename, SkipTypeToStr(SkipType)])); |
end; |
procedure TErrorForm.SaveBtnClick(Sender: TObject); |
/Extractor.bdsproj |
---|
130,7 → 130,7 |
<Directories Name="UsePackages">False</Directories> |
</Directories> |
<Parameters> |
<Parameters Name="RunParams">Tests\single_file.zip</Parameters> |
<Parameters Name="RunParams">"Tests\128-Bit Enc.zip"</Parameters> |
<Parameters Name="HostApplication"></Parameters> |
<Parameters Name="Launcher"></Parameters> |
<Parameters Name="UseLauncher">False</Parameters> |
172,7 → 172,9 |
<VersionInfoKeys Name="Comments"></VersionInfoKeys> |
<VersionInfoKeys Name="Webseite">www.viathinksoft.de</VersionInfoKeys> |
<VersionInfoKeys Name="Projektleiter">Daniel Marschall - www.daniel-marschall.de</VersionInfoKeys> |
</VersionInfoKeys> <Excluded_Packages> |
</VersionInfoKeys> |
<Excluded_Packages> |
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclib100.bpl">Borland InterBase Express Components</Excluded_Packages> |
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIntraweb_80_100.bpl">Intraweb 8.0 Design Package for Borland Development Studio 2006</Excluded_Packages> |
<Excluded_Packages Name="c:\programme\borland\bds\4.0\Bin\dclIndyCore100.bpl">Indy 10 Core Design Time</Excluded_Packages> |