Pagina 1 di 1

Pacchetto di prova PSIM

Pubblicato: 21 giugno 2023 - 10:24
di gaelds
Buongiorno,
Sto cercando di creare un pacchetto per la demo PSIM 2021B. La chiave di disinstallazione è effettivamente nel registro, ma si trova in HKEY_CURRENT_USER:

Codice: Seleziona tutto

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\6305213B-44F4-476B-85A0-EB506EDB8E01_is1
L'installazione funziona lasciando "Chiave" vuota in install_exe_if_needed, ma per la disinstallazione non posso usare disinstalla_cmd()Questo indica
"ERRORE FATALE: 2: Impossibile aprire la chiave Software\Microsoft\Windows\CurrentVersion\Uninstall\['6305213B-44F4-476B-85A0-EB506EDB8E01_is1']"
Esiste un altro modo per usare questa chiave per disinstallare? Oppure è necessario usare il comando `run(r'%s /verysilent' % uninstall_string)`?

Ecco il codice per il mio setup.py:

Codice: Seleziona tutto

# -*- coding: utf-8 -*-
from setuphelpers import *
setup_binary_name = glob.glob("PSIM*.exe")[0]
app_name  = "_".join(setup_binary_name.split("_")[:2])
app_dir = makepath('C:\Powersim')
app_dir_binaries = makepath(app_dir,"_".join(setup_binary_name.split("_")[:3]))
binary_name = "PSIM.exe"
kill_list = [binary_name]
shortcutsdir = makepath(common_desktop(),'Logiciels','Elec - Automatisme')
uninstallkey_psim = ['6305213B-44F4-476B-85A0-EB506EDB8E01_is1']
uninstall_string = r'%s\unins000.exe' %app_dir_binaries

def install():
    print(r'Suppression des anciens PSIM')
    run_notfatal(r'C:\Powersim\PSIM11.1.1_Demo\unins000.exe /verysilent')
    run_notfatal(r'MsiExec.exe /qn /X{D46F2B61-FEE0-46AF-B57F-0EF74F0ECC98}')
    if isfile(makepath(shortcutsdir,'PSIM.lnk')):
        remove_file(makepath(shortcutsdir,'PSIM.lnk'))
        
    print(r'Installation de %s' % app_name)
    killalltasks(kill_list)
    install_exe_if_needed(setup_binary_name,
        silentflags='/VERYSILENT /SUPPRESSMSGBOXES /NORESTART',
        key='',
        min_version='2021b'
    )

    print(r'Création du raccourci %s dans %s' %(app_name,shortcutsdir))
    if not isdir(shortcutsdir):
        mkdirs(shortcutsdir)
    create_shortcut(makepath(shortcutsdir,'%s.lnk' %app_name), target=makepath(app_dir_binaries,binary_name))
    remove_desktop_shortcut('PSIM License Monitor')
    remove_desktop_shortcut(app_name)

def uninstall():
    print(r"Desinstallation de %s" %app_name)
    killalltasks(kill_list)
    ##uninstall_cmd(uninstallkey_psim)
    run_notfatal(r'%s /verysilent' % uninstall_string)
    if  isfile(makepath(shortcutsdir,'%s.lnk' %app_name)):
        remove_file(makepath(shortcutsdir,'%s.lnk' %app_name))
    if isdir(app_dir):
        remove_tree(app_dir)

def audit():
    if isfile(makepath(app_dir_binaries,binary_name)):
        return("OK")
    else:
        return("Erreur : %s est introuvable !" %binary_name)
         

In secondo luogo, senza la funzione "audit()" o con un semplice return("OK"), ottengo sempre un errore: "Audit interrotto a causa di un'eccezione: indice dell'elenco fuori intervallo"

Re: Pacchetto di prova PSIM

Pubblicato: 26 giugno 2023 - 11:20
di dcardon
Ciao Gaël,

la variabile `uninstall_key` ti permette di sovrascrivere la chiave di disinstallazione fornita dal software, ma non la scrive nel registro di sistema.

Quindi non ci sono molti altri modi per farlo oltre a quello che hai descritto per il processo di disinstallazione.

Dato che la chiave non è registrata nella posizione corretta nel registro di sistema, penso che sarebbe ancora meglio non specificare affatto `uninstall_key`. Altrimenti, la funzione `def audit()` tenterà di cercarla nel registro di sistema (questo è il comportamento predefinito se non è definita alcuna funzione di audit nel pacchetto). Questo deve generare il messaggio di errore che ricevi, che non è molto elegante e che correggeremo.

Se il software sta cercando di creare la chiave in HKCU, è perché pensa di installarsi nell'ambiente utente. Dovremmo verificare se esiste un flag per forzare un'installazione a livello di sistema. In caso contrario, contatta lo sviluppatore per vedere se può correggere il funzionamento del suo software. Altrimenti, puoi mettere questo software nella categoria "podoware" (software sviluppato con i piedi :-) ).

Cordiali saluti,

Denis

Re: Pacchetto di prova PSIM

Pubblicato: 26 giugno 2023 - 19:24
di gaelds
Grazie a Jimmy e Morgan che hanno eseguito il debug di questo pacchetto per me questo pomeriggio. Questo podoware si installa e non restituisce più errori sulla console, per me è sufficiente ;)

Codice: Seleziona tutto

setup_binary_name = glob.glob("PSIM*.exe")[0]
è stato sostituito da

Codice: Seleziona tutto

setup_binary_name = 'PSIM_2021b_Demo_64bit_Setup.exe'
La versione e il timeout sono stati modificati nel comando install_exe_if_needed:

Codice: Seleziona tutto

install_exe_if_needed(setup_binary_name,
        silentflags='/VERYSILENT /SUPPRESSMSGBOXES /NORESTART',
        key='',
        min_version='',
        timeout=900
    )

Codice: Seleziona tutto

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

setup_binary_name = 'PSIM_2021b_Demo_64bit_Setup.exe'
app_name  = "_".join(setup_binary_name.split("_")[:2])
app_dir = makepath('C:\Powersim')
app_dir_binaries = makepath(app_dir,"_".join(setup_binary_name.split("_")[:3]))
binary_name = "PSIM.exe"
kill_list = [binary_name]
uninstallkey_psim = ['F8C0340D-A8CE-4B15-96C0-D3F6A564A9DF_is1']
uninstall_string = r'%s\unins000.exe' %app_dir_binaries

def install():
    if isfile(makepath(shortcutsdir,'PSIM.lnk')):
        remove_file(makepath(shortcutsdir,'PSIM.lnk'))
    print(r'Installation de %s' % app_name)
    killalltasks(kill_list)

    install_exe_if_needed(setup_binary_name,
        silentflags='/VERYSILENT /SUPPRESSMSGBOXES /NORESTART',
        key='',
        min_version='',
        timeout=900
    )

def uninstall():
    print(r"Desinstallation de %s" %app_name)
    killalltasks(kill_list)
    run_notfatal(r'%s /verysilent' % uninstall_string)
    if isdir(app_dir):
        remove_tree(app_dir)

Re: Pacchetto di prova PSIM

Pubblicato: 26 giugno 2023 - 22:44
di vcardon
Mi piace il modo in cui hai usato la parola "podoware", l'abbiamo inventata noi :)