Можно ли запустить приложение Silverlight 4 OOB с веб-страницы? - PullRequest
3 голосов
/ 02 июня 2010

Я планирую создать приложение менеджера загрузок и хотел бы иметь возможность запускать приложение, когда пользователь нажимает кнопку на сайте. Очевидно, что приложение уже должно быть установлено на клиентском компьютере.

Есть несколько причин, по которым это должно быть написано с использованием Silverlight, но они на самом деле не имеют отношения к вопросу. Я упоминаю об этом только для того, чтобы люди не предлагали мне использовать другую технологию.

Ответы [ 5 ]

2 голосов
/ 02 июня 2010

Я думаю, что это невозможно в соответствии с этим постом пост 1 и другим пост . Но я не знаю, изменит ли это MS в последней версии SL 4

1 голос
/ 13 августа 2010

Немного помял два других поста [ 1 ] и [ 2 ].

Но, конечно, это будет работать только для Windows, а не для Mac. Там вам придется вернуться к решению в стиле @ michael-s-scherotter .

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (Application.Current.HasElevatedPermissions && System.Windows.Interop.ComAutomationFactory.IsAvailable)
    {

        string run = "\""%ProgramFiles%\\Microsoft Silverlight\\sllauncher.exe"\" /emulate:"Silverface.xap" /origin:\"http://www.silverlight.net/content/samples/apps/facebookclient/ClientBin/Silverface.xap\" /overwrite";
        dynamic cmd = ComAutomationFactory.CreateObject("WScript.Shell");
        cmd.Run(run, 1, true);

    }
}
0 голосов
/ 18 ноября 2014

Это возможно, если вы соглашаетесь устанавливать приложение каждый раз, когда пользователь нажимает на него.

Вам также следует настроить приложение так, чтобы оно требовало повышенного доверия в настройках OOB.

Просто удалите приложение при запуске (например, в конструкторе главного окна):

if (Application.Current.HasElevatedPermissions && Application.Current.InstallState == InstallState.Installed)
{
    string launcherPath = string.Empty;
    using (dynamic shell = AutomationFactory.CreateObject("Shell.Application"))
    {
        string launcher64 = @"C:\Program Files (x86)\Microsoft Silverlight";
        string launcher32 = @"C:\Program Files\Microsoft Silverlight";

        dynamic folder64 = shell.NameSpace(launcher64);
        if (folder64 != null)
        {
            launcherPath = launcher64;
        }
        else
        {
            dynamic folder32 = shell.NameSpace(launcher32);
            if (folder32 != null)
            {
                launcherPath = launcher32;
            }
        }
    }

    using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))
    {
        var origin = Application.Current.Host.Source.OriginalString;
        var launchCmd = string.Format(@"""{0}\sllauncher.exe"" /uninstall /origin:""{1}""", launcherPath, origin);
        shell.Run(launchCmd);
    }
}

(код для удаления был взят из этого поста: http://www.wintellect.com/blogs/sloscialo/programmatically-uninstalling-silverlight-out-of-browser-application)

0 голосов
/ 29 января 2013

Я нашел трюк, который запускает установленную OOB Silverlight из приложения Silverlight в браузере. Оба приложения должны быть подписаны и иметь повышенное доверие.

  1. Когда пользователь устанавливает приложение Silverlight OOB в первый раз, извлеките значения пути и аргумента из файла ярлыка приложения OOB на рабочем столе. (ref: Как я могу использовать Shell32.dll в Silverlight OOB ) Если вам известны значения пути и аргумента, вы можете запустить приложение OOB, используя Com Object.
  2. Отправьте извлеченные пути и значения аргументов в приложение Silverlight в браузере. (ссылка: http://msdn.microsoft.com/en-us/library/dd833063(v=vs.95).aspx)
  3. Сохранить значения пути и аргумента в файле cookie.
  4. Теперь в браузере приложения silverlight есть возможность запустить OOB silverlight, используя значения пути и аргумента в файле cookie.

using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))
{
    shell.Run(launchPath);
}

Надеюсь, этот трюк вам пригодится :)

0 голосов
/ 02 июня 2010
...