Seite 1 von 1

Kann man Versionsfehler ignorieren?

Veröffentlicht: 11. Juli 2018 - 09:53 Uhr
von Eric
Hallo, ich verwende WAPT 1.5 Community. Ich habe ein Paket, das eine Anwendung per MSI mit `install_msi_if_needed` installiert. Dabei erhalte ich in WAPT immer die Fehlermeldung: „wurde installiert und der Deinstallationsschlüssel gefunden, aber die Version ist ungültig“. Trotz verschiedener Versuche konnte ich den Fehler nicht beheben. Im Grunde ist das für mich nicht so wichtig, da die Software korrekt installiert wird und einwandfrei funktioniert. Da jedoch ein anderes Paket davon abhängt, verhindert dieser Fehler die Installation dieses anderen Pakets. Kann man WAPT irgendwie anweisen, diesen Fehler zu ignorieren? Ich kenne bereits den Parameter `accept_returncodes`, aber er scheint in diesem Fall nicht anwendbar zu sein. Vielen Dank im Voraus für Ihre Hilfe.











Betreff: Ist es möglich, Versionsfehler zu ignorieren?

Veröffentlicht: 11. Juli 2018 - 10:23 Uhr
von Eric
Zur Klarstellung:

Die Versionsnummer in meiner Konfigurationsdatei ist exakt dieselbe wie die, die vom Befehl
`get-itemproperty HKLM:\software\wow6432node\microsoft\currentversion\uninstall\uninstall\* | select-object displayname, displayversion`

Betreff: Ist es möglich, Versionsfehler zu ignorieren?

Veröffentlicht: 11. Juli 2018 - 11:08 Uhr
von htouvet
Ich vermute, dass eine der Versionen auf 3 Komponenten basiert („1.2.3“) und die andere auf 4 Komponenten („1.2.3.0“)

Sie können die Version in der Funktion install_msi_if_needed mit dem Parameter erzwingen:
get_version: Stellen Sie eine Funktion bereit, die die aktuell installierte Version zurückgibt

Code: Alle auswählen

def my_get_version(soft):
    print(u'Version installée: %s' % soft['version'])
    return soft['version']

def install():
    install_msi_if_needed('setup.msi',get_version=my_get_version)

Betreff: Ist es möglich, Versionsfehler zu ignorieren?

Veröffentlicht: 11. Juli 2018 - 14:47 Uhr
von Eric
htouvet schrieb: Ich vermute, dass eine der Versionen auf 3 Komponenten basiert "1.2.3" und die andere auf 4 Komponenten "1.2.3.0"?
Da der PowerShell-Befehl genau die Versionsnummer zurückgibt, die ich in meiner Steuerdatei verwende, dachte ich nicht, aber ich gebe zu, dass ich nicht alle Feinheiten der Windows-Welt kenne; MSI und dergleichen :(

htouvet schrieb:

Code: Alle auswählen

def my_get_version(soft):
    print(u'Version installée: %s' % soft['version'])
    return soft['version']
Was soll ich dieser Funktion übergeben? (Ist die Variable „soft“ der Softwarename, ihr Schlüssel, der Speicherort der ausführbaren Datei nach der Installation...?)

DANKE
UND.

Betreff: Ist es möglich, Versionsfehler zu ignorieren?

Veröffentlicht: 17. Juli 2018 - 14:05 Uhr
von Eric
Guten Morgen,

Ich habe in den setuphelpers eine Funktion gefunden, die meine Frage zu beantworten schien:
get_msi_properties.
So wurde die Sache einfach:

Code: Alle auswählen

def install():
	print ('Installing sentinelRuntime')
	soft = get_msi_properties("Sentinel Runtime.msi")
	install_msi_if_needed('Sentinel Runtime.msi', '/q /norestart', get_version=soft['Version'])
Nur jetzt ist mir ein Fehler erlaubt:
Installation von Sentinel Runtime
TypeError: 'Unicode-Objekt ist nicht aufrufbar'

Und hier gestehe ich, dass ich langsam ein wenig die Fassung verliere...

Ein kurzer Tipp für alle, die noch nicht daran gedacht haben, wie man Setup-Helfer in der Konsole testet:
In der Python-Konsole genügt der einfache Befehl „import setuphelpers“. Das spart Zeit beim Testen des Codes ;-)
Ich weiß, es klingt albern, aber manchmal denken wir nicht an die einfachen Dinge und verschwenden dadurch viel Zeit...

Betreff: Ist es möglich, Versionsfehler zu ignorieren?

Veröffentlicht: 18. Juli 2018 - 12:22 Uhr
von Eric
Guten Morgen,

Nach unzähligen Versuchen, Fehlern und Korrekturen... bin ich nun hier.

Code: Alle auswählen

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []

def get_sentinel_version(soft="Sentinel Runtime.msi"):
    sentiProps = get_msi_properties(soft)
    sentiVers = str(sentiProps['Version'])
    #print('Type de sentiVers : ' type(sentivers))
    return sentiVers

def install():
    print('installing unilim-sentinelRuntime')
    install_msi_if_needed('Sentinel Runtime.msi', '/q /norestart', get_version=get_sentinel_version)
In meinem vorherigen Code hatte ich einen Fehler, weil get_version ein "aufrufbares Objekt" und nicht einen "String" erwartete, daher die Funktion (ich hatte vorher nicht verstanden, warum sie da war).
Nun, ich darf einen Fehler machen:
TypeError: Das erste Argument von MSIOpenDatabase() muss ein String sein, kein Dictionary
Ich habe versucht, das Problem mit der str()-Funktion in meiner Funktion zu beheben, aber es hat nicht funktioniert.

Ich verschicke immer wieder Flaschenpost, in der Hoffnung, dass eines Tages eine davon jemanden inspiriert ;-)

UND.

Betreff: Ist es möglich, Versionsfehler zu ignorieren?

Veröffentlicht: 18. Juli 2018 - 22:56 Uhr
von Sfonteneau
In Ihrem Fall ist der Test nicht aussagekräftig

Ziel dieses Manövers ist es, wapt anzuweisen, die Softwareversion nicht im Deinstallationsschlüssel der Software, sondern an anderer Stelle zu suchen.

Mit get_version kann man wapt die Versionsnummer der Software mitteilen.

Beispiel unter Verwendung der Naps-Software:

Code: Alle auswählen

       def versnaps2(key):
                return key['name'].replace('NAPS2 ','')

        install_exe_if_needed('naps2-5.3.3-setup.exe',silentflags='/VERYSILENT',key='NAPS2 (Not Another PDF Scanner 2)_is1',get_version=versnaps2)
        
Wapt wird angewiesen, die Version anhand des Softwarenamens zu ermitteln.

In Ihrem Code versuchen Sie, die Versionsnummer aus der MSI-Datei im Paket abzurufen. Das macht keinen Sinn.

Um Ihr Problem zu lösen, können Sie die min_version auch einfach ändern, indem Sie install_msi_if... aufrufen, anstatt get_version zu verwenden

https://github.com/tranquilit/WAPT/blob ... s.py#L3815

Betreff: Ist es möglich, Versionsfehler zu ignorieren?

Veröffentlicht: 21. Juli 2018 - 10:45 Uhr
von Eric
Hallo, vielen Dank für Ihre Antwort. Ich habe mich entschieden, von vorne anzufangen, und das Problem mit dem Versionskonflikt besteht nun nicht mehr. Es ist ziemlich seltsam; der einzige Unterschied zu meinem ursprünglichen Skript ist, dass ich `silent_options` nicht in den Parametern angegeben habe (tatsächlich sind `/q` und `/norestart` in `install_msi_if_needed` bereits standardmäßig gesetzt, das ist mir im Code aufgefallen), und deshalb funktioniert es. Ich kann es mir nicht erklären… Durch dieses Problem habe ich zwar viel Zeit verloren, aber ich habe durch meine Tests und Ihre Antworten viel über die Funktionsweise von WAPT gelernt, was mir später sehr nützlich sein wird. Vielen Dank .