Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Inno Setup Script gesucht (https://www.delphipraxis.net/206391-inno-setup-script-gesucht.html)

greenmile 16. Dez 2020 16:18

Inno Setup Script gesucht
 
Hallo zusammen,

sorry, mir ist kein besserer Titel eingefallen. Ich möchte ein Setup basteln, bei dem der User beim Start entscheiden kann, ob die EXE temporär (aus dem Tempverzeichnis) gestartet oder ins Programme-Verzeichnis installiert werden soll. Irgendwie funktioniert das aber alles nicht. Bin testhalber dazu übergegangen, ein weiteres Setup ("Installation") sowie die EXE selbst ("Temporär") als Files aufzunehmen und je nach Option zu starten. Das kanns aber auch nicht sein und ich finde leider keine Beispielcodes, wo genau das gemacht wird. Vielleicht ist mein Weg auch der einzig sinnvolle? Erscheint mir aber nicht so :)

Hat da ev jemand einen Beispielsource für mich, den ich übernehmen oder aus dem ich zumindest Ideen klauen kann? Das würde mir echt helfen.

TurboMagic 16. Dez 2020 16:31

AW: Inno Setup Script gesucht
 
Hast du schon auf der InnoSetup Webseite geschaut (falls hier keine Ideen kommen)?
Dort gibt's auch irgendso ein Google Forum oder so zu Inno Setup. Evtl. mal dort fragen, falls hier nix kommt.

himitsu 16. Dez 2020 16:35

AW: Inno Setup Script gesucht
 
Da es im Temp-Ordner nicht wirklich installiert wird (ein Uninstall-Eintrag in der Systemsteuerung ist unnötig),
wirst du hier wohl selbst kopieren und starten müssen und dann das setup selbst abbrechen (vielleicht gibt es dafür schon fertige Beispielcodes) .... denk ich mal?

bcvs 17. Dez 2020 07:16

AW: Inno Setup Script gesucht
 
Du könntest das DestDir für die exe variabel machen:
Etwas in der Art:
Code:
[Files]
Source: "MyProgram.exe"; DestDir: "{code:GetDestDir}";

[Run]
Filename: {code:GetDestDir}\MyProgram.exe; Description: MyProgram starten; Flags: nowait postinstall skipifsilent;


[Code ]
function GetDestDir:String;
begin
  if InstallTemp then
    result:=ExpandConstant('{tmp}')
  else
    result:=ExpandConstant('{app}');
end;
Dann brauchst du natürlich noch eine vorgeschaltete Seite, auf der der User die Auswahl treffen kann. Entsprechend muss dort die Variable InstallTemp gesetzt werden.

greenmile 17. Dez 2020 11:51

AW: Inno Setup Script gesucht
 
Zitat:

Zitat von TurboMagic (Beitrag 1479291)
Hast du schon auf der InnoSetup Webseite geschaut (falls hier keine Ideen kommen)?
Dort gibt's auch irgendso ein Google Forum oder so zu Inno Setup. Evtl. mal dort fragen, falls hier nix kommt.

Die Beispiele hatte ich als erstes durch, da war leider nichts brauchbares dabei.

Edelfix 17. Dez 2020 13:22

AW: Inno Setup Script gesucht
 
Wie sieht dein Quelltext aktuell aus?

greenmile 17. Dez 2020 14:38

AW: Inno Setup Script gesucht
 
Quick and Dirty, aber für den Moment besser als nix.
Wenn "temporär" angeklickt ist, überspringe ich einfach alles bis zur "Fertig für die Installation" Seite. Dort entpacke ich die EXE ins Temp Verzeichnis, starte sie und breche das Setup dann ab.

Code:
var
  UsagePage: TInputOptionWizardPage;

const
  Url        = 'https://www.google.de';
  Url_Caption = 'Google';

procedure UrlLabelClick(Sender: TObject);
  var
    errorCode : integer;
    myURL: String;
begin
  myURL := Url;
  ShellExec('open',myURL,'','',SW_SHOWNORMAL,ewNoWait,errorCode);
end;

procedure InitializeWizard;
  var
    UrlLabel :TNewStaticText;
    CancelBtn :TButton;
begin
  CancelBtn          := WizardForm.CancelButton;
  UrlLabel           := TNewStaticText.Create(WizardForm);
  UrlLabel.Top       := CancelBtn.Top + (CancelBtn.Height div 2) -(UrlLabel.Height div 2);
  UrlLabel.Left      := WizardForm.ClientWidth - CancelBtn.Left -CancelBtn.Width;
  UrlLabel.Font.Style := UrlLabel.Font.Style + [fsUnderline];
  UrlLabel.Cursor    := crHand;
  UrlLabel.Font.Color := clHighlight;
  UrlLabel.OnClick   := @UrlLabelClick;
  UrlLabel.Parent    := WizardForm;
  UrlLabel.Anchors   := [akLeft, akBottom];

  UrlLabel.Caption := ExpandConstant(Url_Caption);

  UsagePage := CreateInputOptionPage(wpInfoBefore,CustomMessage('ProgMode_What1'), '',CustomMessage('ProgMode_SelectTxt'),True, False);
  UsagePage.Add(CustomMessage('ProgMode_Txt_Install'));
  UsagePage.Add(CustomMessage('ProgMode_Txt_TempRun'));

  UsagePage.SelectedValueIndex := 0;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
 var ResultCode: Integer;
begin
  Result := true;
  if (CurPageID=wpReady) and (UsagePage.SelectedValueIndex=1) then begin
    ExtractTemporaryFile('myapp.exe');
    ExecAsOriginalUser(ExpandConstant('{tmp}\myapp.exe'), '-temp', '',SW_SHOWNORMAL, ewNoWait, ResultCode);
    WizardForm.Close;
    Result := false;
  end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm := (UsagePage.SelectedValueIndex=0);
end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
begin
  if (UsagePage.SelectedValueIndex=1) then Result := '';
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := false;
  If (UsagePage.SelectedValueIndex=1) then begin
    If (PageID = wpSelectDir) or (PageID = wpSelectProgramGroup) or (PageID = wpSelectTasks) or (PageID=wpFinished) then Result := true;
  End;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 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