2008-12-15 60 views
5

总之,大家都知道,有关在桌面应用程序中使用Silverlight的想法?

一)Silverlight是预期由浏览器来托管,并运行在一个隔离的沙盒,这样就不会有任何安全问题

  1. Silverlight的唐“T直接访问 文件系统,比 孤立的存储区域
  2. 没有 直接的方法来打开通用对话框 盒子,像是文件保存在Silverlight(支持虽然Opendialog箱)等。

B)的Silverlight无法访问本地资源,如打印机

什么是超越沙箱的方式,让我可以在本地托管Silverlight应用程序,阅读文件,并保存他们回来,如果需要,将数据交给打印机,等等..

更新:

到处是WPF是不是我的选择?不,我也对跨平台解决方案感兴趣 - 例如,您可以在Mono Web浏览器控件中托管Silverlight,以便您可以在任何地方运行它。

的想法是重新使用我建立了我的桌面网络中,通过在某些领域提供的关注点分离相同的应用程序 - 比如坚毅,资源访问等 方案:

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

更新:

我只是做了一个POC,使我能够通过在那里我主持我的Silverlight壳本地访问打印机和保存文件,当然应用。如果你wan't你可以在后一看here in my blog

回答

8

两种方式我能想到的是,

创建一个“壳”

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

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

Desktop Shell

嵌入Web服务器

嵌入轻重量网与宿主应用程序处理请求的服务器,并执行这些操作。您可以在HTTP之上定义一个协议,例如保存到本地文件夹,发送数据以进行打印等。

Embedding A Server

+0

嵌入式web服务器?对于客户端应用程序?这可能有点过分。 – gn22 2009-12-17 23:40:38

+0

是的,当你没有更好的选择 – amazedsaint 2010-01-19 11:09:26

3

是一个完整的WPF应用程序不适合自己情况的选择?

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

一个wpf应用程序比捆绑在您的应用程序中的web服务器等更容易。

在可预见的将来,您不会通过Silverlight访问资源,例如打印机和文件(除了隔离存储),正如您所知。

你可以有一个单独的应用程序部分上传文件到网络服务器,然后从服务中读取你的Silverlight应用程序。

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

+0

这个想法是不使用WPF - 这样我就会得到两个代码库。另外,请参阅我的更新,就像我现在从我的Silverlight应用程序访问打印机一样。 :) – amazedsaint 2008-12-15 11:35:21

1

我正在尝试为desktop和silverlight重用一个代码库。除了提到的两个选项之外,还有两个选项

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

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