Может ли Silverlight (SLOOB) запустить процесс даже при полном доверии?

StackOverflow https://stackoverflow.com/questions/2483252

Вопрос

Мне было поручено написать установщик с приложением silverlight out of browser.Мне нужно это сделать.

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

Это установочное приложение сейчас написано на .NET WinForms, но .NET framework является препятствием для загрузки людьми.

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

Спасибо

Это было полезно?

Решение

Изучая это, я подозреваю, что вам придется создать процесс с использованием 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);

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top