Может ли Silverlight (SLOOB) запустить процесс даже при полном доверии? - PullRequest
1 голос
/ 20 марта 2010

Мне было поручено написать установщик с помощью Silverlight из браузера. Мне нужно.

  1. получить версию с локального EXE
  2. проверьте веб-сервис, чтобы увидеть, что это самая последняя версия
  3. скачать почтовый индекс, если нет
  4. распакуйте почтовый индекс
  5. перезаписать старый EXE
  6. запустить EXE

Это приложение-установщик теперь написано на .NET WinForms, но .NET Framework является препятствием для загрузки пользователями.

Рекомендованным решением является использование SLOOB, однако я не уверен, как назначить полное доверие. Если я назначу полное доверие, могу ли я начать процесс.

Спасибо

Ответы [ 2 ]

1 голос
/ 21 марта 2010

Silverlight 4 будет поддерживать что-то вроде этого: http://timheuer.com/blog/archive/2010/03/15/whats-new-in-silverlight-4-rc-mix10.aspx#sllauncher

1 голос
/ 21 марта 2010

Глядя на это, я подозреваю, что вам придется создавать процесс с использованием WMI через интерфейс COM. В конце концов, это делает этот вариант очень сложным и очень подверженным сбоям по целому ряду причин (WMI отключен или защищен, пользователь не будет полностью доверять и т. Д.) Я подозреваю, что вам будет намного лучше от создания пакета развертывания .msi или чего-то подобного, который мог выйти и загрузить фреймворк, если это необходимо. Доступно множество моделей развертывания, почти все из которых чувствуют себя лучше этой.

Тем не менее, если вы собираетесь сделать это:

Чтобы получить COM-объект, вам нужно использовать AutomationFactory.CreateObject(...) API. Тим Хойер предоставляет образец здесь.

Чтобы на самом деле выполнять сценарии WMI, вам нужно создать объект WbemScripting.SWbemLocator в качестве корневого. Оттуда используйте метод ConnectServer, чтобы получить службу wmi на указанной машине. Затем вы можете запросить модуль Win32_Process для создания новых процессов.

Редактировать: Я потратил немного времени, работая над этим, и даже на своем локальном компьютере с правами администратора я сталкиваюсь с проблемами безопасности. Правильный код будет выглядеть примерно так:

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