3

我计划构建一个下载管理器应用程序,并希望能够在用户单击站点按钮时启动该应用程序。该应用程序显然已经需要安装在客户端计算机上。

有几个原因需要使用 Silverlight 编写,但它们与问题并不真正相关。我只是提到它,以便人们不建议我使用另一种技术。

4

4 回答 4

1

从另外两个帖子 [ 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);

    }
}
于 2010-08-13T04:05:11.100 回答
0

是的。这是一个例子: http ://www.silverlight.net/content/samples/apps/facebookclient/sfcquickinstall.aspx

于 2010-06-02T15:14:29.943 回答
0

如果您同意在用户每次点击时安装该应用程序,这是可能的。

您还应该将应用程序设置为要求对其 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

于 2014-11-18T13:55:17.317 回答
0

我发现了一个技巧,可以从浏览器中的 silverlight 应用程序启动已安装的 silverlight OOB。这两个应用程序都应该被签署并具有更高的信任度。

  1. 当用户第一次安装 silverlight OOB 应用程序时,从桌面上的 OOB 应用程序的快捷方式文件中检索路径和参数值。(参考:我如何在 Silverlight OOB 中使用 Shell32.dll)如果您知道路径和参数值,则可以使用 Com Object 启动 OOB 应用程序。
  2. 将检索路径和参数值发送到浏览器中的 silverlight 应用程序。(参考: http: //msdn.microsoft.com/en-us/library/dd833063 (v=vs.95).aspx )
  3. 将路径和参数值存储在 cookie 中。
  4. 现在,浏览器中的 silverlight 应用程序能够使用 cookie 中的路径和参数值启动 silverlight OOB。

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

我希望这个技巧对你有用:)

于 2013-01-29T17:03:46.480 回答