Url-Aufruf nach Greenshot-Installation

Hallo zusammen,
nach der Installation des neo42-Pakets für „Greenshot.org Greenshot 1.3.296.0“ öffnet sich automatisch der Link „Thank you for using Greenshot“.

Das ist anscheinend sogar von Greenshot so gewollt:
How can I avoid Greenshot opening a browser window at the end of the installation process?

Der Url-Aufruf wird direkt vom Installer zum Abschluss des Installationsprozesses ausgelöst.
Kennt jemand eine Möglichkeit, das zu unterbinden?

Hallo zusammen,

auch per Ticketsystem haben uns Anfragen zu dem Thema erreicht:

Ja, nach der Installation des Pakets „Greenshot“ wird automatisch ein Browserfenster mit der Seite „Thank you for using Greenshot“ geöffnet wird. Dieses Verhalten ist vom Greenshot-Installer so vorgesehen und lässt sich nicht direkt über den Installer deaktivieren.

Wir haben im Paket bereits einen Workaround eingebaut, der versucht, den automatisch gestarteten Browserprozess direkt wieder zu beenden, sofern er die Greenshot-Webseite öffnet:
(Stop-NxtProcess -Name „commandline like ‚%http://getgreenshot%‘“ -IsWql $true)

Trotzdem erscheint auf einigen Computern ein Fenster, in dem gefragt wird, ob der Link mit dem Internet Explorer oder dem Edge geöffnet werden soll.

Auch dazu haben wir nun einen Workarround in das Paket eingebaut, der den entsprechenden Prozess (OpenWith.exe) direkt wieder beenden soll, falls dieser erkannt wird:
(Stop-NxtProcess -Name OpenWith)

Das Paket wurde heute mit selber Versionsnummer aber als Build 1 neu veröffentlicht.

2 „Gefällt mir“

Vielen Dank, werde ich heute gleich mal testen :slight_smile:

Den Fall mit der „OpenWith.exe“ konnten wir noch selber lösen mit einer eigenen Funktion, welche für 10 Sekunden nach der Installation alle 500 Millisekunden die Anwendung beendet, falls diese in den letzten 30 Sekunden erst geöffnet wurde.

Das Blockieren von HTTP- und HTTPS-Anfragen vor und bis zu 10 Sekunden nach der Installation der Anwendung hatte leider nicht funktioniert, wie gewollt (über DISM oder direkt in der Registry mit Verweis auf eine Dummy-Anwendung). Die HOSTS-Datei blockiert die Url ja nur, aber der Browser öffnet sich trotzdem.

Funktioniert leider :frowning: die Url öffnet sich weiterhin im Standardbrowser.

Habe nun eine Lösung gefunden, die ich mal mit der Community teilen möchte:

Deploy-Application.ps1
Ergänzen zum Schluss von Funktion „CustomInstallAndReinstallAndSoftMigrationBegin“:

        Function Stop-ProcessDirectly {
	        [CmdLetBinding()]
	        Param (
		        [Parameter(Mandatory=$false)]
		        [string]$ProcessNameLike,
		        [Parameter(Mandatory=$false)]
		        [string]$ProcessWindowTitleLike,
		        [Parameter(Mandatory=$false)]
		        [string]$ProcessCommandlineLike,
		        [Parameter(Mandatory=$false)]
		        [int]$TimeOutInSeconds = 30,
		        [Parameter(Mandatory=$false)]
		        [int]$ProcessStartWithinThisLastSeconds = 0,
		        [Parameter(Mandatory=$false)]
		        [switch]$UseAfterCheck,
		        [Parameter(Mandatory=$false)]
		        [int]$AfterCheckTimeOutInSeconds = 5
	        )
        
            # Check for values
            [bool]$procN = !([string]::IsNullOrWhiteSpace($ProcessNameLike))
            [bool]$procW = !([string]::IsNullOrWhiteSpace($ProcessWindowTitleLike))
            [bool]$procC = !([string]::IsNullOrWhiteSpace($ProcessCommandlineLike))

            # Stop if every value is empty
            if (!($procN) -and !($procW) -and !($procC)) {return}

            # Stop processes after checking them every half second for a defined duration
            [int]$i=0; [int]$j=0; [bool]$found=$false; $timeNow = Get-Date
            while ($i -le ($TimeOutInSeconds*5)) {
                # Stop process for some more seconds if it will still start
                if ($found -and $UseAfterCheck) {
                    while ($j -le ($AfterCheckTimeOutInSeconds*5)) {
                        if ($procN) {$procByName = Get-Process -Name $ProcessNameLike -ErrorAction SilentlyContinue}
                        if ($procW) {$procByWindow = Get-Process -ErrorAction SilentlyContinue | ? {$_.MainWindowTitle -like $ProcessWindowTitleLike}}
                        if ($procC) {$procByCmd = Get-CimInstance -ClassName "Win32_Process" -ErrorAction SilentlyContinue | ? {$_.CommandLine -like $ProcessCommandlineLike}}
                        if ($ProcessStartWithinThisLastSeconds -gt 0) {
                            if ($procByName) {$procByName = $procByName | ? {$_.StartTime} | ? {($timeNow - $($_.StartTime)).Seconds -le $ProcessStartWithinThisLastSeconds}}
                            if ($procByWindow) {$procByWindow = $procByWindow | ? {$_.StartTime} | ? {($timeNow - $($_.StartTime)).Seconds -le $ProcessStartWithinThisLastSeconds}}
                            if ($procByCmd) {$procByCmd = $procByCmd | ? {$_.CreationDate} | ? {($timeNow - $($_.CreationDate)).Seconds -le $ProcessStartWithinThisLastSeconds}}
                        }
                        if ($procByName) {$procByName | Stop-Process -Force}
                        if ($procByWindow) {$procByWindow | Stop-Process -Force}
                        if ($procByCmd) {Stop-Process -Id $procByCmd.ProcessId -Force}
                        Start-Sleep -Milliseconds 200; $j++
                    }
                    break
                }

                # Stop process
                if ($procN) {$procByName = Get-Process -Name $ProcessNameLike -ErrorAction SilentlyContinue}
                if ($procW) {$procByWindow = Get-Process -ErrorAction SilentlyContinue | ? {$_.MainWindowTitle -like $ProcessWindowTitleLike}}
                if ($procC) {$procByCmd = Get-CimInstance -ClassName "Win32_Process" -ErrorAction SilentlyContinue | ? {$_.CommandLine -like $ProcessCommandlineLike}}
                if ($ProcessStartWithinThisLastSeconds -gt 0) {
                    if ($procByName) {$procByName = $procByName | ? {$_.StartTime} | ? {($timeNow - $($_.StartTime)).Seconds -le $ProcessStartWithinThisLastSeconds}}
                    if ($procByWindow) {$procByWindow = $procByWindow | ? {$_.StartTime} | ? {($timeNow - $($_.StartTime)).Seconds -le $ProcessStartWithinThisLastSeconds}}
                    if ($procByCmd) {$procByCmd = $procByCmd | ? {$_.CreationDate} | ? {($timeNow - $($_.CreationDate)).Seconds -le $ProcessStartWithinThisLastSeconds}}
                }
                if ($procByName) {$procByName | Stop-Process -Force; $found = $true}
                if ($procByWindow) {$procByWindow | Stop-Process -Force; $found = $true}
                if ($procByCmd) {Stop-Process -Id $procByCmd.ProcessId -Force; $found = $true}
                if ($found -and !($UseAfterCheck)) {break}
                Start-Sleep -Milliseconds 200; $i++
            }
        }

        Stop-ProcessDirectly -ProcessCommandlineLike "*http*//*getgreenshot.org*" -ProcessNameLike "OpenWith" `
            -TimeOutInSeconds 120 -ProcessStartWithinThisLastSeconds 30 -UseAfterCheck -AfterCheckTimeOutInSeconds 10

Verhindert zwar nicht komplett, dass das Browserfenster bzw. der Tap für Millisekunden kurz aufblinkt, aber es funktioniert.

2 „Gefällt mir“

Danke für das Teilen einer Lösung!

Der Code-Block müsste aber, denke ich, an “CustomInstallAndReinstallAndSoftMigrationEnd” oder (noch besser) an “CustomInstallAndReinstallEnd”, damit die Funktion nach der Installation ausgeführt wird und damit den zugehörigen Browser-Prozess killt.

Danke für das Teilen einer Lösung!

Der Code-Block müsste aber, denke ich, an “CustomInstallAndReinstallAndSoftMigrationEnd” oder (noch besser) an “CustomInstallAndReinstallEnd”, damit die Funktion nach der Installation ausgeführt wird und damit den zugehörigen Browser-Prozess killt.

Ggf. kann man den TimeOutInSeconds noch etwas herunterschrauben. Hatte den Fall, dass der Link in einem bereits geöffneten Browser-Fenster geöffnet wurde. Dort kann die Funktion den Tab dann nicht “killen” und das Paket wartet 2 Minuten, bis es weiterläuft.