erst einmal einen Schönen Sonntag euch allen gewünscht.

Für mein derzeitiges Projekt ist aktuell ein Modul für das Update-Modul in Arbeit.
Dabei ist es mit meinen Kenntnissen aktuell Unumgänglich, mit einer Patch-Datei zu arbeiten, welche auch richtig erzeugt wird.
Da ich so wenig Parameter wie möglich übergeben will und auch ehrlich aus der Doku von ShellExecute nicht so richtig schlau werde, möchte ich ExecuteProzess verwenden.
Soweit auch kein Problem, jedoch wird mit mit der Zeile
Code: Alles auswählen
ExecuteProcess('cmd.exe', 'run.bat', []);
auch die Änderung des Befehles in
Code: Alles auswählen
ExecuteProcess('cmd.exe', GetCurrentDir + 'run.bat', []);
Der Vollständigkeit Halber die Komplette Unit
Code: Alles auswählen
unit main;
{$mode objfpc}{$H+}
interface
uses
lclintf, classes, sysutils, forms, controls, graphics, dialogs, StdCtrls, ExtCtrls,
fileinfo,
winpeimagereader, elfreader, machoreader,
registry,
uconst {$ifdef Windows}, shellApi{$endif};
type
{ tform1 }
TForm1 = Class(TForm)
Install_Btn : TButton;
label1, ProgName_Label,
Version_Label : TLabel;
Timer1 : TTimer;
procedure FormShow(Sender: TObject);
procedure Fnstall_Btnclick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
temp :String;
public
end;
var
Form1 : TForm1;
const
Drive = 'https://drive.google.com/drive/folders/15dl09_b1MF20vlvyjlb6BdI678z5jqSV?usp=sharing';
implementation
{$R *.lfm}
function Version(Value: String): String;
var
VI : TVersionInfo;
Subver : byte = 4;
temp : String;
begin
try
VI := TVersionInfo.Create;
VI.Load(Value);
if SubVer > 0 then
temp := IntToStr(VI.FixedInfo.FileVersion[0]) + '.';
if SubVer > 0 then
temp := Temp + IntToStr(VI.FixedInfo.FileVersion[1]) + '.';
if SubVer > 0 then
temp := Temp + IntToStr(VI.FixedInfo.FileVersion[2]) + '.';
if SubVer > 0 then
temp := Temp + IntToStr(VI.FixedInfo.FileVersion[3]);
finally
VI.Free;
end;
result := temp;
end;
{ tform1 }
procedure TForm1.FormShow(Sender: TObject);
var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKeyUser;
Reg.OpenKeyReadOnly(MasterKey);
temp := Reg.ReadString('UserDir');
finally
Reg.Free;
end;
if MessageDLG('Achtung.' + #13 +
'Für das Update wird eine AKTIVE Internetverbindung benödigt. Sollten Sie das erste ' +
'mal ein Update durchführen, besteht die Möglichkeit, das es eine Freigabe auf den ' +
'Update-Server bedarf.' + #13 + #13 +
'Dies kann unter umständen einige Stunden dauern, da die Freigaben durch den ' +
'Projektverantwortlichen persönich erfolgt.', mtInformation, mbOKCancel, 0) = mrOK then begin
ProgName_Label.Caption := 'Programm -> Addison Tagebuch';
Version_Label.Caption := 'Version auf PC: ' + Version(
{$ifdef windows}temp
{$else ifdef Unix}GetUserDir + 'Entwicklung/Gesundheit/Morbus_Addision/linux/'
{$endif} + Prog_Name);
if not FileExists(GetUserDir + 'Downloads' + PathDelim + Prog_Name) then
OpenURL(Drive);
end;
end;
procedure TForm1.Install_BtnClick(Sender: TObject);
var
_UpDate : TStringList;
begin
_UpDate := TStringList.Create;
With _UpDate do begin
add('cd ' + GetUserDir + 'Downloads');
add({$ifdef Windows}'move '
{$else ifdef Unix}'mv '{$endif} + Prog_Name + ' ' + Temp);
end;
{$ifdef Windows}
_UpDate.SaveToFile('run.bat');
ExecuteProcess('cmd.exe', GetCurrentDir + 'run.bat', []);
{$else ifdef Unix}
_UpDate.SaveToFile('run.sh');
ExecuteProcess('/usr/bin/exo-open', '.' + GetCurrentDir + '/run.sh', []);
{$endif}
_UpDate.Free;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FileExists(GetUserDir + 'Downloads' + PathDelim + Prog_Name) then begin
if Version(temp + Prog_Name) =
Version(GetUserDir + 'Downloads' + PathDelim + Prog_Name) then
Label1.Caption := 'Ihre Version ist Aktuell'
else
Label1.Caption := 'Version zur Installation:' + Version(GetUserDir + 'Downloads' + PathDelim + Prog_Name);
Label1.Visible := True;
Timer1.Enabled := False;
end;
end;
end.