Domanda

Sono stato incaricato con la scrittura di un programma di installazione con un silverlight di applicazione browser. Ho bisogno di.

  1. ottenere la versione fuori un EXE locale
  2. controllare un servizio web per vedere che è la versione più recente
  3. scaricare una cerniera se non
  4. scompattare lo zip
  5. sovrascrivere il vecchio EXE
  6. 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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top