2010-03-20 72 views
1

J'ai été chargé d'écrire un programme d'installation avec une application Silverlight hors navigateur. J'ai besoin de.Est-ce que Silverlight (SLOOB) peut démarrer un processus même en toute confiance?

  1. obtenir la version off un EXE locale
  2. check un service Web pour voir qu'il est la version la plus récente
  3. télécharger un fichier zip sinon
  4. déballer le zip
  5. écraser l'ancien EXE
  6. démarrer le EXE

Cette application d'installation est écrit dans .NET WinForms maintenant Bü t le framework .NET est un obstacle pour les personnes à télécharger.

La solution recommandée est d'utiliser un SLOOB mais je ne suis pas sûr de savoir comment attribuer une confiance totale. Si j'attribue une confiance totale, puis-je commencer un processus?

Merci

+0

L'application en cours d'installation est une application .NET? Si oui, en quoi le framework .NET est-il un obstacle pour l'installateur? – AnthonyWJones

Répondre

1

En regardant dans cela, je suppose que vous allez devoir créer le processus en utilisant WMI via l'interface COM. À la fin de la journée, cela rend cette option très difficile et très sujet à l'échec pour une foule de raisons (WMI étant désactivé ou sécurisé, l'utilisateur ne donnera pas toute confiance, etc.) Je suppose que vous seriez beaucoup mieux La création d'un paquet de déploiement .msi ou quelque chose de similaire qui était capable de sortir et télécharger le framework, si nécessaire. Il y a beaucoup de modèles de déploiement disponibles, presque tous qui se sentent supérieurs à celui-ci.

Cela dit, si vous allez faire ceci:

Pour obtenir l'objet COM, vous allez vouloir utiliser l'API AutomationFactory.CreateObject(...). Pour réellement faire le script WMI, vous allez vouloir créer l'objet WbemScripting.SWbemLocator en tant que racine. Tim Heuer provides a sample here.

À partir de là, utilisez la méthode ConnectServer pour obtenir un service WMI sur la machine nommée. Vous pouvez ensuite interroger le module Win32_Process pour créer de nouveaux processus. Edit: J'ai passé un peu de temps à travailler dessus et, même sur ma machine locale en tant qu'administrateur, je rencontre des problèmes de sécurité. Le code correct serait quelque chose de similaire à:

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