AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Delphi Silent Installation / EULA Abfrage umgehen
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Silent Installation / EULA Abfrage umgehen

Ein Thema von bernhard_LA · begonnen am 19. Jul 2022 · letzter Beitrag vom 25. Jul 2022
 
MTranel

Registriert seit: 29. Mär 2022
6 Beiträge
 
#8

AW: Delphi Silent Installation / EULA Abfrage umgehen

  Alt 20. Jul 2022, 16:59
In einem Versuch Embarcadero dazu zu bringen endlich aufzuwachen poste ich hier diesen Unfall eines Scripts, welches wir nutzen um Delphi mit Packer automatisiert zu installieren. Es handelt sich natürlich um einen Auszug (Rest dürfte selbsterklärend für Leute sein die schon mal ne Exe mit Powershell gestartet haben) der speziell mit WMI das neu gespawnte EULA Window sucht und mit Window Messages die Y-Taste verschickt.
/AcceptEULA ist ein gelöstes Problem im Setup-Bereich - verstehe einfach nicht Embarcadero das verkacken konnte.

Code:
$SetupProcess = Start-Process -FilePath $SetupPath -ArgumentList "$arguments" -PassThru -NoNewWindow
$Signature = @"
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern bool AttachConsole(uint dwProcessId);

    [DllImport("kernel32.dll")]
    public static extern IntPtr GetConsoleWindow();

    [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
    public static extern bool FreeConsole();

    [DllImport("user32.dll")]
    public static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
"@

Add-Type -Namespace Win32 -Name Funcs -MemberDefinition $Signature -PassThru | Out-Null

$StartTime = Get-Date
do {
    $TimeElapsed = $(Get-Date) - $StartTime
    if ($($TimeElapsed).TotalMinutes -ge 5) {
        Write-Output "Could not find EULA choice process after 5 minutes."
        throw
    }
    Start-Sleep -Seconds 1
    $SetupProcessId = Get-WmiObject Win32_Process | Where-Object {$_.ProcessName -eq "Setup.tmp"} | Select-Object -ExpandProperty ProcessId
    $CmdProcessId = Get-WmiObject Win32_Process | Where-Object {$_.ParentProcessId -eq $SetupProcessId} | Select-Object -ExpandProperty ProcessId
} until ($CmdProcessId -ne 0)

$WM_KEYDOWN = 0x0100
$VK_Y_KEY = 0x59

[Win32.Funcs]::FreeConsole() | Out-Null
[Win32.Funcs]::AttachConsole($CmdProcessId) | Out-Null
$Handle = [Win32.Funcs]::GetConsoleWindow()
[Win32.Funcs]::PostMessage($Handle, $WM_KEYDOWN, $VK_Y_KEY, 0) | Out-Null
[Win32.Funcs]::FreeConsole() | Out-Null
Man muss PowerShell/dotnet natürlich verstehen aber ich glaube das sollte nicht das größte Problem sein.

Geändert von MTranel (20. Jul 2022 um 17:05 Uhr) Grund: Ganz vergessen wir sind im deutschen Forum
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz