Question

Je suis chargée d'écrire un programme d'installation avec un silverlight sur l'application du navigateur. Je dois.

  1. obtenir la version off un EXE locale
  2. vérifier un service Web pour voir qu'il est la version la plus récente
  3. télécharger un fichier zip si pas
  4. déballer le zip
  5. remplacer l'ancien EXE
  6. 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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top