关于在桌面应用程序中使用Silverlight的想法?

时间:2008-12-15 07:46:43

标签: c# .net silverlight silverlight-2.0

总结一下,众所周知,

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

  1. Silverlight无法直接访问 到文件系统,除了 孤立的存储区域
  2. 没有     直接打开常用对话框的方法     类似于Silverlight中的文件保存(虽然支持Opendialog框)。
  3. b)Silverlight无法访问打印机等本地资源

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

    更新

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

    我的想法是重新使用我在桌面上为web构建的相同应用程序,通过在某些方面提供关注点分离 - 例如持久性,资源访问等。 方案:

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

    更新

    我刚做了一个POC,让我能够访问打印机并在本地保存文件,当然还有我在托管我的Silverlight应用程序的shell。如果你不想看看帖子here in my blog

3 个答案:

答案 0 :(得分:8)

我能想到的两种方式是,

创建“外壳”

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

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

Desktop Shell

嵌入网络服务器

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

Embedding A Server

答案 1 :(得分:3)

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

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

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

如果您知道,在可预见的将来,您无法通过Silverlight访问打印机和文件等资源(除了隔离存储)。

您可以将应用的单独部分上传到网络服务器,然后在服务的Silverlight应用中阅读这些内容。

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

答案 2 :(得分:1)

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

如果直接从正常项目中引用(而不是项目引用)silverlight dll,它应该可以工作。这将允许您为两个项目引用silverlight dll。

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