Può Silverlight (SLOOB) avviare un processo, anche con piena fiducia?
-
21-09-2019 - |
Domanda
Sono stato incaricato con la scrittura di un programma di installazione con un silverlight di applicazione browser. Ho bisogno di.
- ottenere la versione fuori un EXE locale
- controllare un servizio web per vedere che è la versione più recente
- scaricare una cerniera se non
- scompattare lo zip
- sovrascrivere il vecchio EXE
- avviare il file EXE
Questa applicazione di installazione viene scritto in .NET WinForms, ma ora il framework .NET è un ostacolo per le persone a scaricare.
La soluzione consigliata è quella di utilizzare uno SLOOB però non sono sicuro come assegnare piena fiducia. Se assegno piena fiducia posso avviare un processo.
Grazie
Soluzione
Guardando in questo, ho il sospetto che si sta andando ad avere per creare il processo utilizzando WMI tramite l'interfaccia COM. Alla fine della giornata, che rende questo una scelta molto difficile e molto soggetto a fallimento a causa di una serie di motivi (WMI essere disabile o garantite, l'utente non darà piena fiducia, ecc) ho il sospetto che sarebbe molto meglio off la creazione di un pacchetto di distribuzione .msi o qualcosa di simile che è stato in grado di uscire e scaricare il quadro, se necessario. Ci sono un sacco di modelli di implementazione disponibili, quasi tutti che si sentono superiori a questa.
Detto questo, se avete intenzione di fare questo:
Per ottenere l'oggetto COM, si sta andando a voler utilizzare l'API AutomationFactory.CreateObject(...)
. Tim Heuer fornisce un esempio qui.
Per fare in realtà lo scripting WMI, si sta andando a voler creare l'oggetto WbemScripting.SWbemLocator
come la radice. Da lì, utilizzare il metodo ConnectServer
per ottenere un servizio WMI sulla macchina di nome. È quindi possibile interrogare il modulo Win32_Process
per creare nuovi processi.
Edit: ho passato un po 'di tempo a lavorare su questo e, anche sulla mia macchina locale come Admin sto correndo in problemi di sicurezza. Il codice corretto sarebbe qualcosa di simile 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);
Altri suggerimenti
Silverlight 4 avrà il supporto per qualcosa di simile: http://timheuer.com/blog/archive/2010/03/15/whats-new-in-silverlight-4-rc-mix10.aspx#sllauncher