6

总结一下,众所周知,

a) Silverlight 预计由浏览器托管,并在隔离的沙箱中运行,因此不会出现任何安全问题

  1. Silverlight 不能直接访问文件系统,除了隔离的存储区域
  2. 没有直接的方法可以在 Silverlight 中打开像文件保存这样的常见对话框(尽管支持打开对话框)。

b) Silverlight 无法访问打印机等本地资源

有什么方法可以超越沙盒,以便我可以在本地托管 Silverlight 应用程序、读取文件并在需要时将它们保存回来、将数据移交给打印机等等。

更新:

完整的 WPF 不是我的选择吗?不。我还对跨平台解决方案感兴趣——例如,您可以在 Mono Web 浏览器控件中托管 Silverlight,这样您几乎可以在任何地方运行它。

这个想法是通过在某些领域(如持久性、资源访问等)提供关注点分离,在我的桌面上重用我为 web 构建的相同应用程序。场景:

1- 某种小工具容器,可以访问本地资源。2 - 基于桌面 Silver light 的媒体应用程序

更新:

我刚刚做了一个 POC,使我能够访问打印机并在本地保存文件,当然是通过我托管 Silverlight 应用程序的 shell。如果你不想,你可以看看我博客中的帖子

4

3 回答 3

8

我能想到的两种方法是,

创建一个“外壳”

使用 Web 浏览器控件在 Winforms 桌面应用程序中使用 Silverlight 托管 HTML 页面,并使用 HTML DOM 来回通信。然后我可以请求托管 shell 执行打印等操作。在此处查看详细信息

Mono 还有一个 Web 浏览器控件——基于 FireFox XULRunner 而不是 IE——尚未成功在其中加载 Silverlight。另一种选择可能是使用 Webkit。

桌面外壳

嵌入网络服务器

在 Host 应用程序中嵌入一个轻量级 Web 服务器,并处理执行此类操作的请求。您可能可以在 HTTP 之上定义一个协议,用于保存到本地文件夹、发送数据以打印等。

嵌入服务器

于 2008-12-15T07:48:46.763 回答
3

完整的 WPF 应用程序不适合您的情况吗?

您可能知道 Silverlight 使用 WPF 的一个子集,因此您可以相对容易地更改您的应用程序。

wpf 应用程序比在应用程序中捆绑 Web 服务器等更容易。

如您所知,在可预见的将来,您将无法通过 Silverlight 访问诸如打印机和文件(除了独立存储)之类的资源。

您可以在应用程序的单独部分将文件上传到网络服务器,然后在您的 silverlight 应用程序中从服务中读取这些文件。

根据您的打印要求(例如,如果您只想将所有内容发送到办公室打印机),您可以将您想要打印的信息发送到服务,然后该服务将为您打印。但是我猜你希望每台客户端机器都能够打印,在这种情况下这对你不起作用。

于 2008-12-15T08:20:19.053 回答
1

我也在尝试为桌面和 Silverlight 重用代码库。除了提到的之外,我知道还有两个选项

如果您直接引用(而不是项目引用)来自普通项目的 silverlight dll,它应该可以工作。这将让您为这两个项目引用一个 silverlight dll。

有两个指向同一组文件的项目文件(一个 wpf,一个 silverlight)。您可能不得不在这里和那里使用一些编译器标志,但这应该让您对两者使用相同的文件。

于 2008-12-15T14:23:53.347 回答