Puede Silverlight (SLOOB) iniciar un proceso, incluso con plena confianza?
-
21-09-2019 - |
Pregunta
Me han encargado con la escritura de un instalador con un Silverlight de aplicación del navegador. Necesito.
- obtener la versión de un archivo EXE locales
- active un servicio web para ver que es la versión más reciente
- descargar una postal si no
- descomprimir el zip
- sobrescribir la antigua EXE
- iniciar el EXE
Esta aplicación instalador está escrito en .NET WinForms ahora, pero el marco .NET es un obstáculo para que la gente descarga.
La solución recomendada es utilizar un SLOOB Sin embargo no estoy seguro de cómo asignar plena confianza. Si le asigno plena confianza puedo iniciar un proceso.
Gracias
Solución
Mirando en esto, sospecho que va a tener que crear el proceso mediante WMI a través de la interfaz COM. Al final del día, lo que hace que esta opción sea muy difícil y muy sujeto a un fallo debido a una serie de razones (WMI ser discapacitados o asegurados, el usuario no dará plena confianza, etc.) Sospecho que sería mucho mejor de crear un paquete de implementación .msi o algo similar que fue capaz de salir y descarga el marco, si es necesario. Hay una gran cantidad de modelos de implementación disponibles, casi todos los cuales se sienten superiores a éste.
Dicho esto, si usted va a hacer esto:
Para conseguir el objeto COM, vas a querer utilizar la API AutomationFactory.CreateObject(...)
. Tim Heuer ofrece una muestra aquí.
En realidad para hacer las secuencias de comandos de WMI, vas a querer crear el objeto WbemScripting.SWbemLocator
como la raíz. A partir de ahí, utilice el método ConnectServer
para obtener un servicio WMI en el equipo llamado. A continuación, puede interrogar al módulo de Win32_Process
para crear nuevos procesos.
Edit: me pasé un poco de tiempo trabajando en esto y, aunque en mi máquina local como Admin estoy corriendo en problemas de seguridad. El código correcto sería algo similar a:
dynamic locatorService = AutomationFactory.CreateObject("WbemScripting.SWbemLocator");
dynamic wmiService = locatorService.ConnectServer("winmgmts:{impersonationLevel=impersonate,authentationLevel=Pkt}//./root/cimv2");
dynamic process = wmiService.Get("Win32_Process");
dynamic createParameters = process.Methods_["Create"].InParameters.SpawnInstance_;
createParameters.CommandLine = "cmd.exe";
wmiService.ExecMethod("Win32_Process", "Create", createParameters);
Otros consejos
Silverlight 4 tendrá soporte para algo como esto: http://timheuer.com/blog/archive/2010/03/15/whats-new-in-silverlight-4-rc-mix10.aspx#sllauncher