Buenas, me gustaría hacer una consulta a ver si me sacáis del lio que llevo.

Bien estoy haciendo un complemento para una aplicación de accesibilidad la cual es un lector de pantalla exactamente NVDA.

https://github.com/nvaccess/nvda <https://github.com/nvaccess/nvda>

Bien dicho lector permite hacer complementos en Python usando librerías internas del propio lector referidas a accesibilidad y otras que lleva por ejemplo wxpython pudiendo hacer interfaces graficas.

Cuando el lector se carga, carga los complementos que están en Python sin compilar ni nada.

Bien NVDA es una aplicación de 32 bits por lo que cuando carga los complementos se cargan en 32 bits.

Ahora viene mi problema, mi complemento pretende ser un launcher rápido de funciones ya sea poder lanzar rápidamente una aplicación portable o instalable, un lanzador de comandos CMD y PowerShell.

Mi problema viene con CMD y con comandos que necesiten ser elevados con privilegios de Administrador.

Bien e modificado a mis necesidades la respuesta 2 de aquí:

https://stackoverflow.com/questions/41896638/how-to-run-a-script-with-elevated-privilege-on-windows

Bien pego un código el cual estoy usando para pruebas y luego termino de explicar.

import ctypes

import os

def ejecutaAdmin(aplicacion, parametros=False):

try:

if parametros == False:

ctypes.windll.shell32.ShellExecuteW(

None,

'runas',

aplicacion,

None,

None,

10)

else:

ctypes.windll.shell32.ShellExecuteW(

None,

'runas',

aplicacion,

parametros,

None,

10)

except:

print("Error")

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

Bien si quiero ejecutar el comando de cmd sfc /scannow en un Windows de 64 bits pero llamado desde una aplicación de 32 bits y con privilegios elevados ya que el comando lo requiere no hay manera.

E leído sobre el directorio virtual SysNative pero por más que apunto a él tampoco funciona.

Bien creo entender y seguramente sea mal que no es posible ejecutar un comando que implica arreglar problemas de un entorno de 64 bits desde un cmd de 32.

Pero mi problema es si deseara ejecutar otros comandos directamente con privilegios.

Bien como habéis podido comprobar estoy liado por completo, a ver si me podéis echar algo de luz.

Muchísimas gracias y perdón por el tostón.

Cordiales saludos

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

Responder a