Silverlight peut (SLOOB) démarrer un processus, même avec une confiance totale?
-
21-09-2019 - |
Question
Je suis chargée d'écrire un programme d'installation avec un silverlight sur l'application du navigateur. Je dois.
- obtenir la version off un EXE locale
- vérifier un service Web pour voir qu'il est la version la plus récente
- télécharger un fichier zip si pas
- déballer le zip
- remplacer l'ancien EXE
- démarrer le EXE
Cette application d'installation est écrit dans .NET WinForms maintenant, mais 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 je cède la pleine confiance puis-je commencer un processus.
Merci
La solution
En regardant dans cela, je pense que vous allez devoir créer le processus en utilisant WMI via l'interface COM. A la fin de la journée, qui rend cette option très difficile et très sujet à l'échec en raison d'une foule de raisons (WMI être désactivé ou sécurisé, l'utilisateur ne donnera pas confiance totale, etc.) Je suppose que vous seriez beaucoup mieux de la création d'un package de déploiement .msi ou quelque chose de similaire qui a pu sortir et télécharger le cadre, le cas échéant. Il y a beaucoup de modèles de déploiement disponibles, presque tous, qui se sentent supérieurs à celle-ci.
Cela dit, si vous allez faire ceci:
Pour obtenir l'objet COM, vous allez vouloir utiliser l'API AutomationFactory.CreateObject(...)
. Tim Heuer fournit un exemple ici.
Pour faire réellement le script WMI, vous allez vouloir créer l'objet WbemScripting.SWbemLocator
comme la racine. A 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 de travail à ce sujet et, même sur ma machine locale en tant qu'administrateur, je suis en cours d'exécution dans les 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);
Autres conseils
Silverlight 4 aura le soutien à quelque chose comme ceci: http://timheuer.com/blog/archive/2010/03/15/whats-new-in-silverlight-4-rc-mix10.aspx#sllauncher