Buenas, no el problema es que los complementos escritos para NVDA al ser ejecutados con las librerías que trae NVDA que son de 32 bits si pretendo por ejemplo ejecutar el comando en un Windows de 64 Bits no me deja, en una maquina virtualizada con Windows de 32 bits no hay ningún problema.

Bien el complemento que estoy haciendo es un lanzador de aplicaciones y comandos para CMD y PowerShell por lo que me encuentro con la limitación que hay comandos que necesitan ser lanzados en la misma arquitectura que el sistema.

Por ejemplo si el comando sfc /scannow lo llamo desde el complemento subiéndole privilegios no funciona desde un Windows de 64 Bits si desde uno de 32 Bits.

El usuario será quien añada sus propios comandos yo estoy usando ese para pruebas.

Bien con la clase que pase que desactiva el redireccionamiento del sistema de archivos funciona perfectamente haciendo lo que toca. Solo e tenido que hacer que el complemento detecte en que arquitectura esta si NVDA esta en un entorno ejecutándose de 32 Bits simplemente lanza el comando normal si detecta que está en 64 Bits desactivo el redireccionamiento del sistema de archivos y entonces ya se ejecuta correctamente, modifique algo el ejemplo que compartí para activar el redireccionamiento por si algo falla cuando se ejecuta el comando que deseamos o se produce un error critico el cual no deja volver a activarlo, para que no sea la clase la que lo active si no yo al acabar el hilo en el que lance el comando.

Realmente NVDA no necesita tener instalado Python ya que maneja los complementos escritos en Python como hace Calibre por poner un ejemplo.

Yo si tengo Python 3.8 64 Bits instalado que es con el que suelo programar pero también tengo el de 32 Bits para hacer las pruebas antes de portar el código a complemento ya que hay que adaptarlos a librerías propias que trae NVDA.

No obstante muchísimas gracias por su tiempo y el molestarse en contestar.

Un cordial saludo.

El 09/05/2021 a las 20:20, Chema Cortes escribió:
Buenas,

A ver si lo entiendo: has instalado python 32 en un windows 64bits para ejecutar NVDA, utilidad que usa librerías de 32 bits. No dices qué versión de python, ni si tienes otras instalaciones de python (que podrían ser de 64 bits).

El fallo que comentas que te da python es cuando intentas ejecutar sfc /scannow que, interpreto, no tiene relación alguna con NVDA. Por  lo que veo, es muy común que falle esta utilidad de escaneo de archivos, por lo que no se puede achacar ni a python ni a que sea de 32 bits.

Te recomiendo que primero intentes hacer funcionar sfc sin usar python. Revisa este artículo:

https://mundowin.com/la-proteccion-de-recursos-de-windows-no-pudo-iniciar-el-servicio-de-reparacion/ <https://mundowin.com/la-proteccion-de-recursos-de-windows-no-pudo-iniciar-el-servicio-de-reparacion/>

También consulta esta referencia sobre cómo forzar el uso de python 32bits o 64bits en windows:

https://docs.python.org/3/whatsnew/3.7.html#windows-only-changes <https://docs.python.org/3/whatsnew/3.7.html#windows-only-changes>

Saludos.


El vie, 7 may 2021 a las 22:22, Héctor J. Benítez Corredera (<facturasxebo...@gmail.com <mailto:facturasxebo...@gmail.com>>) escribió:

    Buenas, me contesto por si a alguien le puede servir.

    Esto explica mejor que yo lo que quería hacer, realmente
    desactivar el redireccionamiento del sistema de archivos.

    Esta la fuente.

    https://code.activestate.com/recipes/578035-disable-file-system-redirector/
    
<https://code.activestate.com/recipes/578035-disable-file-system-redirector/>

    Muchas gracias.

    El 07/05/2021 a las 2:07, Chema Cortes escribió:

    El jue, 6 may 2021 a las 20:18, Héctor J. Benítez Corredera
    (<facturasxebo...@gmail.com <mailto:facturasxebo...@gmail.com>>)
    escribió:

        winpath = os.path.join(os.environ['SystemRoot'], "SysNative",
        "cmd.exe") # Esta es la que debería funcionar en 32 bits

        #winpath = os.path.join(os.environ['SystemRoot'], "system32",
        "cmd.exe") Esta es la que funciona en 64 bits pero no en 32 bits

        #winpath = os.path.join(os.environ['SystemRoot'], "SysWOW64",
        "cmd.exe") No funciona

        ejecutaAdmin(winpath, "/c" + "sfc /scannow" + "&pause")



    Esta parte la ejecuta python, que es de 64 bits. No necesita
    emular nada, por lo que siempre accede a "system32".

    Creo que estás confundido con el funcionamiento de las
    aplicaciones 32 bits en win 64 bits. Todas las aplicaciones están
    programadas para acceder a system32, sean de 32 ó 64 bits. Es el
    sistema operativo quien deriva luego las aplicaciones de 32 bits
    a sysWOW64 de forma transparente. SysNative sería un truco para
    que las aplicaciones de 32 bits accedan a las DLLs de 64 bits que
    de verdad se encuentran en system32. Ni python ni cmd.exe se
    ejecutan en modo 32 bits; es NVDA la que entra en modo emulación
    32 bits cuando es ejecutada por una CPU x64.

    Dicho esto, no entiendo qué problema tienes para ejecutar NVDA. A
    todos los efectos, se debería comportar como una aplicación de 64
    bits normal
    ¿Da algún error o no funciona como se espera?



-- Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
    https://blog.ch3m4.org <https://blog.ch3m4.org>
    Buscador Python Hispano: http://busca.ch3m4.org
    <https://blog.ch3m4.org/pages/busqueda-python-es/>

    _______________________________________________
    Python-es mailing list
    Python-es@python.org  <mailto:Python-es@python.org>
    https://mail.python.org/mailman/listinfo/python-es  
<https://mail.python.org/mailman/listinfo/python-es>
    _______________________________________________
    Python-es mailing list
    Python-es@python.org <mailto:Python-es@python.org>
    https://mail.python.org/mailman/listinfo/python-es
    <https://mail.python.org/mailman/listinfo/python-es>



--
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales": https://blog.ch3m4.org <https://blog.ch3m4.org> Buscador Python Hispano: http://busca.ch3m4.org <https://blog.ch3m4.org/pages/busqueda-python-es/>

_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a