modello di script setup.py

Domande sul packaging WAPT / Richieste e assistenza sui pacchetti Wapt.
Regole del forum
Regole del forum della community
* Supporto in inglese su www.reddit.com/r/wapt
* Supporto della community in francese disponibile su questo forum
* Si prega di anteporre [RISOLTO] al titolo dell'argomento se è stato risolto.
* Si prega di non modificare un argomento contrassegnato con [RISOLTO]. Aprire un nuovo argomento facendo riferimento a quello precedente.
* Specificare la versione di WAPT installata, la versione completa e il numero di build (2.2.1.11957 / 2.2.2.12337 / ecc.) nonché l'edizione Enterprise/Discovery.
* Le versioni 1.8.2 e precedenti non sono più supportate. Le uniche domande accettate relative alla versione 1.8.2 riguardano l'aggiornamento a una versione supportata (2.1, 2.2, ecc.).
* Specificare il sistema operativo del server (Linux/Windows) e la versione (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Specificare il sistema operativo della macchina di amministrazione/creazione dei pacchetti e della macchina con l'agente problematico, se applicabile (Windows 7/10/11/Debian 11/ecc.).
* Evitare di porre più domande quando si apre una discussione, altrimenti potrebbe essere ignorata. Se ci sono più discussioni, aprirle separatamente, preferibilmente una dopo l'altra e non tutte contemporaneamente (ovvero, non intasare il forum).
* Includere frammenti di codice, screenshot e altre immagini direttamente nel post. I link a Pastebin, Bitly e altri siti di terze parti verranno sistematicamente rimossi.
* Come in qualsiasi forum della community, il supporto è fornito volontariamente dai membri. Se si necessita di supporto commerciale, è possibile contattare il reparto vendite di Tranquil IT al numero 02.40.97.57.55
così37
Messaggi: 23
Registrazione: 10 aprile 2016 - 13:43

2 maggio 2016 - 22:26

Salve,

avrei bisogno di un modello per eseguire i seguenti passaggi:

verificare se il software è installato sul computer client; se è installato, disinstallarlo e quindi reinstallarlo; se non è installato, installarlo.


Grazie in anticipo.
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

3 maggio 2016 - 09:10

!!! Compatibile solo dalla versione 1.3.5 in poi, credo!!!

Per installare solo se il software non è presente o la versione è precedente:

Exe:

Codice: Seleziona tutto

def install ():
     install_exe_if_needed('vlc-2.2.2-win32.exe',silentflags='/S --no-qt-privacy-ask --no-qt-updates-notif',key='VLC media player',min_version='2.2.2',killbefore=['vlc.exe'],accept_returncodes=[0],timeout=300)
 
MSI (più semplice):

Codice: Seleziona tutto

def install ():
   install_msi_if_needed('install_flash_player_21_active_x.msi',killbefore=['iexplore.exe'])
Nella maggior parte dei casi, la disinstallazione preventiva non è necessaria, ma non sempre.
Per avviare una disinstallazione:

Codice: Seleziona tutto

      softname = 'Scribus'
      versionsoft = '15.007.20033'
      check_installed_soft = installed_softwares(softname)
      if check_installed_soft:
             for uninstall in check_installed_soft:
                if Version(uninstall['version']) < Version(versionsoft):
                   key=uninstall['key']
                   if installed_softwares(uninstallkey=key):
                      cmd = WAPT.uninstall_cmd(uninstall['key'])
                      run(cmd)
Tuttavia, questo metodo può talvolta causare problemi.
Infatti, nell'esempio stiamo cercando un software con il nome Scribus.
Ma se nel nostro software, un programma si chiama "Sribus plugin extra"
Bene, anche questo ci passerà.

In questo caso, il file setup.py dovrà essere più specifico

Simone
così37
Messaggi: 23
Registrazione: 10 aprile 2016 - 13:43

3 maggio 2016 - 10:05

Ecco il mio script per installare Visual Studio 2005 Tools per Office Second Edition Runtime (vstor2005.exe):

Codice: Seleziona tutto

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

uninstallkey = ["{388E4B09-3E71-4649-8921-F44A3A2954A7}"]
uninstallstring = ['msiexec /qb /uninstall {388E4B09-3E71-4649-8921-F44A3A2954A7}']

def install ():
     install_exe_if_needed('vstor2005.exe', '/q',accept_returncodes=[0],timeout=300)

	
def uninstall():
      softname = 'Visual Studio 2005 Tools pour Office Second Edition Runtime'
      versionsoft = '8.0.50727.940'
      check_installed_soft = installed_softwares(softname)
      if check_installed_soft:
             for uninstall in check_installed_soft:
                if uninstall['version'] == versionsoft:
                   cmd = 'msiexec /qb /uninstall {388E4B09-3E71-4649-8921-F44A3A2954A7}'
                   run(cmd)


Il codice sembra funzionare solo se vstor2005 non è installato; tuttavia, quando vstor2005 è già installato, ecco il messaggio di errore:

Codice: Seleziona tutto

C:\Windows\system32>wapt-get install C:\Users\x\Desktop\Nuxeo\enm
-vstor2005
Installing WAPT file C:\Users\x\Desktop\Nuxeo\enm-vstor2005
2016-05-03 10:13:38,529 CRITICAL Fatal error in install script: EWaptSetupExcept
ion: Fatal error : Setup vstor2005.exe has been and uninstall key None found but
 version is not good:
Traceback (most recent call last):
  File "C:\wapt\common.py", line 3178, in install_wapt
    exitstatus = setup.install()
  File "C:\Users\x\Desktop\Nuxeo\enm-vstor2005\setup.py", line 8,
 in install
    install_exe_if_needed('vstor2005.exe','/q',accept_returncodes=[0],timeout=30
0)
  File "C:\wapt\setuphelpers.py", line 3416, in install_exe_if_needed
    error('Setup %s has been and uninstall key %s found but version is not good'
 % (exe,key))
  File "C:\wapt\setuphelpers.py", line 3524, in error
    raise EWaptSetupException(u'Fatal error : %s' % reason)
EWaptSetupException: Fatal error : Setup vstor2005.exe has been and uninstall ke
y None found but version is not good

FATAL ERROR : EWaptSetupException: Fatal error : Setup vstor2005.exe has been an
d uninstall key None found but version is not good
Ultima modifica di so37 il 3 maggio 2016 alle 10:16, modificato 1 volta.
così37
Messaggi: 23
Registrazione: 10 aprile 2016 - 13:43

3 maggio 2016 - 10:10

Quando disinstallo questo pacchetto, dovrebbe essere disinstallato con il comando che

Codice: Seleziona tutto

msiexec /qb /uninstall {388E4B09-3E71-4649-8921-F44A3A2954A7}
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

3 maggio 2016 - 10:28

Un problema dopo l'altro...

Se non viene specificata una min_version (come nel tuo caso), install_exe_if_needed leggerà la versione dalle proprietà del file eseguibile (se l'eseguibile è formattato correttamente). Sei sicuro di non voler specificare una min_version?

Inoltre, nel tuo comando non è presente l'argomento chiave.

Ci occuperemo della disinstallazione più avanti.
così37
Messaggi: 23
Registrazione: 10 aprile 2016 - 13:43

3 maggio 2016 - 10:38

Non sono del tutto sicuro a cosa si riferisca min_version, ma se è preferibile farlo, perché no? Per quanto riguarda l'eseguibile, la versione di vstor2005.exe è 8.0.50727.940. È questo che ti interessa?
così37
Messaggi: 23
Registrazione: 10 aprile 2016 - 13:43

3 maggio 2016 - 10:44

Ecco le modifiche apportate a def install:

Codice: Seleziona tutto

def install ():
     install_exe_if_needed('vstor2005.exe','/q',min_version='8.0.50727.940',key='Visual Studio 2005 Tools pour Office Second Edition Runtime',accept_returncodes=[0],timeout=300)	
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

7 maggio 2016 - 13:00

È stato corretto un piccolo errore in setuphelpers.py

https://github.com/tranquilit/WAPT/comm ... 84de4f0488.

È possibile che il tuo problema derivasse da lì,

Simon.
così37
Messaggi: 23
Registrazione: 10 aprile 2016 - 13:43

9 maggio 2016 - 09:07

Ecco il mio modello attuale:

Codice: Seleziona tutto

# -*- coding: utf-8 -*-
import subprocess
from setuphelpers import *
import os
import time
import platform

uninstallkey = []
uninstallstring = ['msiexec /qb /uninstall {B0E8A140-26FA-43C7-AA0F-03691E6DBB02}']


def install():
  global uninstallkey
  from common import Wapt
  softname = 'Nuxeo MSIE Browser Extension'
  versionsoft = '2.1.3'
  check_installed = installed_softwares(softname)
  # si cette liste globale n est pas vide, on check chaque logiciel
  if check_installed:
             # boucle pour chaque logiciel trouvée
             for uninstall in check_installed:
                      cmd = "msiexec /qb /uninstall {B0E8A140-26FA-43C7-AA0F-03691E6DBB02}"
                      run(cmd)

  if iswin64():
        killalltasks('iexplore.exe')
        run("Nuxeo-MSIEBrowserExtension.msi /quiet /norestart")

  else:
        killalltasks('iexplore.exe')
        print run("Nuxeo-MSIEBrowserExtension.msi /quiet /norestart")


def uninstall():
  softname = 'Nuxeo MSIE Browser Extension'
  versionsoft = '2.1.3'
  check_installed = installed_softwares(softname)
  # si cette liste globale n est pas vide, on check chaque logiciel
  if check_installed:
             # boucle pour chaque logiciel trouvée
             for uninstall in check_installed:
                      cmd = "msiexec /qb /uninstall {B0E8A140-26FA-43C7-AA0F-03691E6DBB02}"
                      run(cmd)


Esiste un'opzione migliore? È sufficientemente ottimizzata?
così37
Messaggi: 23
Registrazione: 10 aprile 2016 - 13:43

11 maggio 2016 - 13:52

Dopo aver impostato WAPTService sui privilegi di amministratore, le cose sono migliorate; tuttavia, quando eseguo lo script che ho copiato sopra, ricevo il seguente messaggio di errore:

Codice: Seleziona tutto

"id"	"description"	"summary"	"start_date"	"logs"
10	Installation of test-nuxeobrowser (=2.1.3-6) (task #10)	Exception: Error during install of test-nuxeobrowser (=2.1.3-6): errors in packages test-nuxeobrowser	2016-05-11T13:51:41.573000	Installing test-nuxeobrowser
Exception: Error during install of test-nuxeobrowser (=2.1.3-6): errors in packages test-nuxeobrowser
Traceback (most recent call last):
  File "C:\wapt\waptservice\waptservice.py", line 2063, in run
    self.running_task.run()
  File "C:\wapt\waptservice\waptservice.py", line 1323, in pwrapper
    return func(*arg, **kwargs)
  File "C:\wapt\waptservice\waptservice.py", line 1383, in run
    self._run()
  File "C:\wapt\waptservice\waptservice.py", line 1807, in _run
    ','.join([ p[1].package for p in self.result['errors']]),
Exception: Error during install of test-nuxeobrowser (=2.1.3-6): errors in packages test-nuxeobrowser

Bloccato