Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   mit Innosetup Dateiattribute ändern (https://www.delphipraxis.net/152680-mit-innosetup-dateiattribute-aendern.html)

zeras 1. Jul 2010 20:27

mit Innosetup Dateiattribute ändern
 
Hallo,

ich installiere mit IS mein Programm von einer CD und eine Registrierungsdatei wird in diesem Zusammenhang von der CD in das Programmverzeichnis kopiert. Nun sieht aber aber offensichtlich so aus, dass die von der CD kopierte Datei das Attribut Readonly erhält weil ja von CD kopiert. Nach dem normalen Starten des Programmes soll dann schreibend auf die Datein zugegriffen werden, da aber die Datei ist nach wie vor noch Readonly. Kann man das im IS ändern oder muss ich das in der Anwendung machen, da wollte ich eigentlich nichts mehr ändern.

mkinzler 1. Jul 2010 20:35

AW: mit Innosetup Dateiattribute ändern
 
Und wenn du die datei mit in den Installer packst?

zeras 1. Jul 2010 20:40

AW: mit Innosetup Dateiattribute ändern
 
Das wollte ich eigentlich vermeiden, da ich dann die Setup fertig habe und nur noch an der Reg Datei ändern muss.
Wenn es nicht anders geht, wäre das ansonsten bestimmt eine Alternative.

Deep-Sea 2. Jul 2010 07:54

AW: mit Innosetup Dateiattribute ändern
 
Wie kopierst du denn die Datei?
Müsste es nicht gehen, wenn du sie als "external" zum Setup hinzufügst (und ggf. "attribs" ebenfalls hinzufügst, aber leer lässt)?

blackfin 2. Jul 2010 08:36

AW: mit Innosetup Dateiattribute ändern
 
Du kannst das nach der Installation im Inno Setup selbst machen.
Dafür musst du die WinAPI-Funktion SetFileAttributes() Inno Setup zur Verfügung stellen und im PostInstall das Readonly-Flag der Dateien löschen:

1) In der Code-Sektion erstmal oben die SetFileAttributes() deklarieren:

Delphi-Quellcode:
const
   FILE_ATTRIBUTE_NORMAL              = 0;
   FILE_ATTRIBUTE_ARCHIVE             = $20;
   FILE_ATTRIBUTE_HIDDEN              = 2;
   FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $2000;
   FILE_ATTRIBUTE_OFFLINE             = $1000;
   FILE_ATTRIBUTE_READONLY            = 1;
   FILE_ATTRIBUTE_SYSTEM              = 4;
   FILE_ATTRIBUTE_TEMPORARY           = $100;

function SetFileAttributes(lpFileName : String, dwAttribs : LongInt) : Boolean; external 'SetFileAttributesA@kernel32.dll stdcall';
...
..
.


2) Auf den Event-Handler von Inno-Setup reagieren, wenn ein Installations-Schritt geändert wird.
Was hier interessiert, ist der Schritt nach der Installation (ssPostInstall):

Delphi-Quellcode:
// Installation-Schritt-Wechsel (interner Inno Setup Event-handler)
procedure CurStepChanged(CurStep: TSetupStep);
begin
  // Post install steps
  if CurStep = ssPostInstall then
  begin
     // Hier die Readonly Flags löschen, z.B.
     SetFileAttributes(ExpandConstant('{app}\MyProgram.exe'),FILE_ATTRIBUTE_NORMAL);      
  end;
end;

zeras 4. Jul 2010 14:14

AW: mit Innosetup Dateiattribute ändern
 
Zitat:

Zitat von Deep-Sea (Beitrag 1032981)
Wie kopierst du denn die Datei?
Müsste es nicht gehen, wenn du sie als "external" zum Setup hinzufügst (und ggf. "attribs" ebenfalls hinzufügst, aber leer lässt)?

Ich habe eine Funktion geschrieben, die ich nach Kopieren der Exe ausführe.
Wenn ich dann noch die Funktion von blackfin nutze, sollte das ja dann klappen.

Danke für die Hinweise.
Delphi-Quellcode:
procedure MyAfterInstall2();
var
  fNameSrc : String;
  fNameDst : String;

begin

  fNameSrc:=ExtractFilePath(ExpandConstant('{srcexe}'))+'REG.DAT';

  if not FileExists(fNameSrc) then begin
    MsgBox('Datei REG.DAT nicht gefunden unter: ' +fNameSrc, mbInformation, MB_OK);
  end
  else begin

    fNameDst:=ExpandConstant('{app}')+'\REG.DAT';
   
    if not FileExists(fNameDst) then begin
   
      if not FileCopy(fNameSrc, fNameDst, false) then begin

        MsgBox('Datei REG.DAT konnte nicht kopiert werden von "'+fNameSrc+'" nach "'+fNameDst , mbInformation, MB_OK);
       
      end;
    end;
  end;
end;

zeras 4. Jul 2010 19:38

AW: mit Innosetup Dateiattribute ändern
 
Zitat:

Zitat von blackfin (Beitrag 1033001)
Du kannst das nach der Installation im Inno Setup selbst machen.
Dafür musst du die WinAPI-Funktion SetFileAttributes() Inno Setup zur Verfügung stellen und im PostInstall das Readonly-Flag der Dateien löschen:

1) In der Code-Sektion erstmal oben die SetFileAttributes() deklarieren:

Delphi-Quellcode:
const
   FILE_ATTRIBUTE_NORMAL              = 0;
   FILE_ATTRIBUTE_ARCHIVE             = $20;
   FILE_ATTRIBUTE_HIDDEN              = 2;
   FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $2000;
   FILE_ATTRIBUTE_OFFLINE             = $1000;
   FILE_ATTRIBUTE_READONLY            = 1;
   FILE_ATTRIBUTE_SYSTEM              = 4;
   FILE_ATTRIBUTE_TEMPORARY           = $100;

function SetFileAttributes(lpFileName : String, dwAttribs : LongInt) : Boolean; external 'SetFileAttributesA@kernel32.dll stdcall';
...
..
.


2) Auf den Event-Handler von Inno-Setup reagieren, wenn ein Installations-Schritt geändert wird.
Was hier interessiert, ist der Schritt nach der Installation (ssPostInstall):

Delphi-Quellcode:
// Installation-Schritt-Wechsel (interner Inno Setup Event-handler)
procedure CurStepChanged(CurStep: TSetupStep);
begin
  // Post install steps
  if CurStep = ssPostInstall then
  begin
     // Hier die Readonly Flags löschen, z.B.
     SetFileAttributes(ExpandConstant('{app}\MyProgram.exe'),FILE_ATTRIBUTE_NORMAL);      
  end;
end;

Danke. Ich habe dies nun eingebaut und ein wenig an meine Bedürfnisse angepaßt.
Es geeeeeht!!!!!!!!!!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz