Buenas, lo primero gracias por contestar.

En efecto estoy ya bastante confundido ya que creo que de todo lo que ley al final se me lio todo.

Bien además creo que no he sabido explicarme quizás consecuencia de mi lio. A ver si lo consigo hiendo al grano.

Bien NVDA carga correctamente y mi complemento también.

El problema viene cuando tengo que llamar desde el complemento cargado por NVDA a CMD.EXE.

Bien tengo claro que una vez que usamos ctypes.windll.shell32.ShellExecuteW cuando llamo a CMD.EXE es como si lo llamara desde el ejecutar de Windows, por lo tanto puede ser llamado desde cualquier parte.

Pues si ejecuto lo siguiente en Python de 64 bits todo funciona correcto:

ctypes.windll.shell32.ShellExecuteW(

None,

'runas',

'cmd.exe',

'/c'+'sfc /scannow'+'&pause',

10)

Bien al ejecutar lo anterior eleva privilegios y ejecuta el escaneo de integridad.

Mi problema viene que si la misma línea es ejecutada desde el complemento de NVDA que usa Python 32 bits me eleva la petición pero me da el siguiente mensaje al ejecutarse:

Protección de recursos de Windows no pudo iniciar el servicio de reparación.

Presione una tecla para continuar . . .

Bien en la consola donde me muestra eso en el titulo me pone que se llamó a cmd.exe desde:

C:\Windows\SysWOW64\cmd.exe

Bien si la misma línea compruebo desde Python 32 pero ahora directamente desde el interprete no desde el que lleva NVDA me da exactamente lo mismo.

Bien a partir de ahí es cuando empecé a liarme con los distintos directorios de sistema system32, SysWOW64 Y SysNative.

Y empecé a hacer pruebas apuntando directamente a llamar a cmd desde esos directorios.

Bien pues el problema es ese si NVDA fuese una aplicación de 64 bits me ejecutaría sin problema la llamada para hacer el diagnostico de sistema, pero al ser de 32 bits me encuentro que no me deja.

Bien con otros comandos que no necesitan de subir privilegios por ejemplo un simple:

Dir c:/s/p

No hay problemas pero si en aquellos que tengo que subir privilegios y no entiendo exactamente el por qué.

Bien como dije es un lanzador el cual el usuario a través de una interface podrá crearse sus atajos y guardarlos, el que quiera hacer un simple listado de directorios no tendrá problema. Pero el que realmente quiera ejecutar herramientas del sistema tipo sfc o DISM y tener su línea de comandos guardada esto que estoy intentando no le funcionara.

Por lo que estoy apunto de descartarlo pero me parecía una opción a añadir muy útil por el tiempo que puede ahorrar a alguien que use muchos comandos y poderlos tener a una sola combinación de tecla.

Espero haber explicado ahora un poco mejor mi problema, como comento estoy tan liado que ya ni eso se.

De nuevo muchas gracias.

Un cordial saludo

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
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