Pregunta

Me han encargado con la escritura de un instalador con un Silverlight de aplicación del navegador. Necesito.

  1. obtener la versión de un archivo EXE locales
  2. active un servicio web para ver que es la versión más reciente
  3. descargar una postal si no
  4. descomprimir el zip
  5. sobrescribir la antigua EXE
  6. 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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top