Subversion Repositories autosfx

Compare Revisions

No changes between revisions

Regard whitespace Rev 4 → Rev 5

/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>