Página 1 de 1

manipulación del perfil de usuario

Publicado: 15 de diciembre de 2020 - 13:54
por cyrilg
Hola,
estoy intentando instalar un paquete de actualización de Firefox de la versión 52.9esr a la 68.9esr.
El problema es que esta actualización crea un nuevo perfil de usuario predeterminado.
La idea es hacer una copia de seguridad del archivo C:\Users\Username\AppData\Roaming\Mozilla\Firefox\profiles.ini en otra carpeta durante la instalación (en mi ejemplo, C:\temp) y luego restaurarlo a su ubicación original una vez finalizada la instalación, para conservar el acceso al perfil de usuario (que contiene marcadores, contraseñas, etc.).

Para ello, tengo: `
from setuphelpers import *

uninstallkey = []

def install():
#copiando el archivo profiles.ini de AppData a c:\Temp
print('guardando el archivo profiles.ini')
filecopyto(user_appdata()+'\Mozilla\Firefox\profiles.ini','c:\Temp')

#terminando el proceso Firefox.exe
print('cerrando Firefox')
killalltasks("firefox.exe")

#actualizando a Firefox 68.9.0esr (32 bits)
print('actualizando a Firefox 68.9.0esr (32 bits)')
install_exe_if_needed("Firefox Setup 68.9.0esr.exe",'/s',key='')

.....

Todo va bien cuando ejecuto mi instalación desde PyScripter en mi máquina de desarrollo (con Windows 10 Pro); Copia correctamente el archivo profiles.ini de C:\Users\Username\AppData\Roaming\Mozilla\Firefox\ a C:\Temp.

Cuando ejecuto la instalación de mi paquete desde la consola en otra máquina (servidor Debian 9, Wapt 1.7.4), obtengo un error de instalación:
IOError: [Errno 2] No existe tal archivo o directorio: u'C:\\Windows\\system32\\config\\systemprofile\\AppData\\Roaming\\Mozilla\\Firefox\\profiles.ini'

Está buscando el archivo profiles.ini en el lugar incorrecto.

He probado varios métodos, incluyendo `
from os import path

appdatapath = path.expandvars('%APPDATA%')
filecopyto(appdatapath+'\Mozilla\Firefox\profiles.ini','c:\Temp')`

, pero el problema persiste: el paquete funciona correctamente en mi máquina de desarrollo con PyScripter, pero obtengo el mismo error al intentar instalarlo desde la consola en otra máquina de prueba.

Hay un detalle que se me escapa: ¿por qué mi script busca el archivo en la ubicación correcta al instalarlo desde PyScripter, y luego lo busca en `C:\Windows\system32\config\systemprofile\AppData\Roaming\Mozilla\Firefox` al instalarlo desde la consola?

Gracias de antemano por su ayuda.
Atentamente,
Cyril G

Re: Manipulación del perfil de usuario

Publicado: 17 de diciembre de 2020 - 14:32
por Aedenth
Hola,

cuando pruebas tu paquete desde PyScripter, la instalación se realiza en el contexto de tu usuario.

Cuando ejecutas la instalación en otra máquina, la instalación se realiza como el usuario SYSTEM, que no tiene un perfil en el sentido tradicional.

Si solo tienes un usuario en la máquina, tendrás que recuperar el nombre del último perfil de usuario que inició sesión y usar esa información para construir la ruta correcta a C:\users\

No estoy seguro de si WAPT tiene una función para recuperar el último usuario autenticado en una máquina.
Consulta la documentación de WAPT; de lo contrario, debe existir una clave de registro que contenga esa información.

Re: Manipulación del perfil de usuario

Publicado: 17 de diciembre de 2020 - 14:44
por htouvet
en setuphelpers:

Código: Seleccionar todo

get_last_logged_on_user()
-> devuelve midominio\usuario

para un usuario local

.\usuario

También

Código: Seleccionar todo

get_loggedinusers()
devuelve una lista ['usuario']

Lista de perfiles de máquinas:

Código: Seleccionar todo

 local_users_profiles()
['C:\\Windows\\ServiceProfiles\\LocalService',
 'C:\\Windows\\ServiceProfiles\\NetworkService',
 'C:\\Users\\htouvet',
 'C:\\Users\\user1']