Subversion Repositories autosfx

Compare Revisions

No changes between revisions

Regard whitespace Rev 5 → Rev 4

/ExtractorError.dfm
2,8 → 2,8
Left = 222
Top = 133
Caption = 'Fehler'
ClientHeight = 406
ClientWidth = 583
ClientHeight = 363
ClientWidth = 353
Color = clBtnFace
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
/Readme.txt
9,13 → 9,7
* 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
----------------
 
50,7 → 44,7
--------
 
ZIP has 1 file
=> Extract DIRECTLY in the specified directory
=> Extract in the same directory as the SFX
Is it a directory?
=> Open the new directory in Windows Explorer
is it a file?
71,23 → 65,16
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'; (default)
C_ASFX_CB_AVO = 'AutoSFX Conflict Behavior: Avoid';
 
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'; (default)
C_ASFX_CP_NON = 'AutoSFX Comment Presentation: None';
 
C_ASFX_FC_THS = 'AutoSFX Extraction Target: Extract here'; (default)
C_ASFX_FC_THS = 'AutoSFX Extraction Target: Extract here';
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
/Extractor.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:
Deleted: 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:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Tools/RemoveSignature.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/ExtractorError.pas
2,11 → 2,8
 
interface
 
// TODO: Richtige Ordnerliste mit Icons anzeigen?
 
uses
Forms, StdCtrls, ExtCtrls, Controls, Graphics, Classes, Dialogs,
ZipMstr19, SysUtils;
Forms, StdCtrls, ExtCtrls, Controls, Graphics, Classes, Dialogs;
 
type
TErrorForm = class(TForm)
20,7 → 17,7
procedure SaveBtnClick(Sender: TObject);
public
function ErrorsAvailable: boolean;
procedure NewError(Filename: string; SkipType: TZMSkipTypes);
procedure NewError(Filename: string);
end;
 
var
30,30 → 27,6
 
{$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;
68,12 → 41,10
SaveBtn.Top := OkBtn.Top;
end;
 
procedure TErrorForm.NewError(Filename: string; SkipType: TZMSkipTypes);
resourcestring
Lng_Err_Entry = '%s (Grund: %s)';
procedure TErrorForm.NewError(Filename: string);
begin
// In future: Also add reason into list?
ErrorList.Items.Add(Format(Lng_Err_Entry, [Filename, SkipTypeToStr(SkipType)]));
ErrorList.Items.Add(Filename);
end;
 
procedure TErrorForm.SaveBtnClick(Sender: TObject);
/ExtractorMain.pas
1,6 → 1,6
unit ExtractorMain;
 
{$DEFINE USE_DZIP_UNPACK} // recommended
{$DEFINE USE_DZIP_UNPACK}
 
interface
 
149,7 → 149,6
ec: Integer;
ar: TExecuteSFXAutoRunResult;
GeneralBaseDir: string;
ok: boolean;
const
C_Explorer_Open_Param = '"%s"';
C_Explorer_Select_Param = '/n,/select,"%s"';
160,7 → 159,6
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 := '';
196,43 → 194,21
// Find out base dirtory
 
GeneralBaseDir := '';
 
if zb.ExtractionTarget = etExtractHere then
case zb.ExtractionTarget of
etExtractHere:
begin
GeneralBaseDir := ExtractFilePath(AZipfile); // Default
 
if not IsDirectoryWritable(GeneralBaseDir) or
IsAtFlobbyDisk(GeneralBaseDir) then
begin
zb.ExtractionTarget := etDesktop;
end;
end;
 
if zb.ExtractionTarget = etDesktop then
etDesktop:
begin
GeneralBaseDir := GetSpecialFolderPath(CSIDL_DESKTOP);
 
if not IsDirectoryWritable(GeneralBaseDir) or
IsAtFlobbyDisk(GeneralBaseDir) then
begin
zb.ExtractionTarget := etAsk;
end;
end;
 
if zb.ExtractionTarget = etAsk then
etAsk:
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
309,7 → 285,6
 
if ErrorForm.ErrorsAvailable then
begin
Hide;
ErrorForm.ShowModal;
end;
 
636,7 → 611,7
MessageDlg(Format(Lng_PasswordWrong, [ForFile]), mtError, [mbOk], 0);
LastTriedPassword := '';
end;
ErrorForm.NewError(ForFile, SkipType);
ErrorForm.NewError(StripBaseDir(ForFile));
end;
 
end.
/td.txt
1,20 → 1,27
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,8 → 19,6
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
 
224,25 → 222,4
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.bdsproj
130,7 → 130,7
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams">"Tests\128-Bit Enc.zip"</Parameters>
<Parameters Name="RunParams">Tests\single_file.zip</Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
172,9 → 172,7
<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>
/Future.txt
10,7 → 10,3
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?