首先学习OOB应用。
SL提供了OUT-OF-Browser的功能,下面通过一个实例来学习下这个功能,在这个例子中使用到了WebBrowser功能。
首先新建一个工程,SLWebBrower
然后建立一个Install.xaml,xaml里有一个安装button,和一个显示安装内容的textBlock,如图:
这个按钮的事件其实很简单就是判断是否安装,如果没有就安装
代码如下:
private void button1_Click(object sender, RoutedEventArgs e)
{
if (App.Current.InstallState != InstallState.Installed)
{
App.Current.Install();
}
}
我们给页面添加一个安装状态的事件,在这个事件里判断当前应用程序的安装状态并在textBolck里显示相应的提示,代码如下:
public Install()
{
this .Loaded += new RoutedEventHandler(Install_Loaded);
InitializeComponent();
App.Current.InstallStateChanged += new EventHandler(Current_InstallStateChanged);
}
private void UpdateInstallState()
{
switch (App.Current.InstallState)
{
case InstallState.NotInstalled:
button1.Visibility = System.Windows.Visibility.Visible;
textBlock1.Text = " 请点击安装按钮,进行安装 " ;
break ;
case InstallState.Installing:
button1.Visibility = System.Windows.Visibility.Collapsed;
textBlock1.Text = " 正在安装,请稍后。。。 " ;
break ;
case InstallState.InstallFailed:
button1.Visibility = System.Windows.Visibility.Visible;
textBlock1.Text = " 安装失败,请重试 " ;
textBlock1.Foreground = new SolidColorBrush(Colors.Red);
break ;
case InstallState.Installed:
button1.Visibility = System.Windows.Visibility.Visible;
textBlock1.Text = " 安装完成! " ;
textBlock1.Foreground = new SolidColorBrush(Colors.Green);
break ;
}
}
做好了安装界面,我们再来看看mainpage里面的处理
在mainpage里面放一个textblock和一个WebBrowser控件,我们设定webBrowser的Source为http://localhost/Default.html;
这个将会在运行时会把Default.html加载入mainpage页面来,这样用户不知道窗体的这个位置是个网页;我们在这里在屏幕的右下角弹出一个小框,告诉用户
Default.html加载完毕,让用户知道软件在做什么。
是这么实现的,在webbrowser的LoadCompleted事件里,我们通过NotificationWindow窗体来实现这个功能,代码如下:
{
NotificationWindow nw = new NotificationWindow();
nw.Content = new TextBlock { Text = " HTML加载完成! " };
nw.Show( 5000 );
}
接下来我们要在app.cs的Application_Startup事件里添加一个判断,判断是不是OOB运行,如果不是就提示用户安装
代码如下:
private void Application_Startup(object sender, StartupEventArgs e)
{
if (App.Current.IsRunningOutOfBrowser && App.Current.HasElevatedPermissions)
{
this.RootVisual = new MainPage();
}
else
{
this.RootVisual = new Install();
}
}
public App()
{
if (App.Current.InstallState == System.Windows.InstallState.Installed)
{
App.Current.CheckAndDownloadUpdateCompleted += new CheckAndDownloadUpdateCompletedEventHandler(Current_CheckAndDownloadUpdateCompleted);
App.Current.CheckAndDownloadUpdateAsync();
}
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}
void Current_CheckAndDownloadUpdateCompleted(object sender, CheckAndDownloadUpdateCompletedEventArgs e)
{
if (e.UpdateAvailable && e.Error == null)
{
MessageBox.Show("应用程序已经安装,下次启动时生效");
}
else if (e.Error != null)
{
MessageBox.Show("安装失败"+e.Error.Message);
}
}
如果在本机执行这样就OK了,可以实现更新。如果发布就需要数字签名,这个研究了很久没搞定,学习的网站贴出来大家一起研究,谁研究明白烦请指点一二。
http://msdn.microsoft.com/library/dd550721(VS.95).aspx ;http://www.cnblogs.com/chuifeng/archive/2010/08/20/1804294.html
在研究OOB的时候有顺带的研究了安装离线程序到客户机
一个安装实例:
"C:\Program Files\Microsoft Silverlight\sllauncher.exe"
/install:"SLWebBrower.xap"
/origin:"http://192.168.1.101:8088/ClientBin/SLWebBrower.xap"
/shortcut:desktop+startmenu
/overwrites
以下是关于本地安装silverlight的xap的参数说明
安装
- /install:"xapFile" – 其中xapFile是文件名/文件路径.xap文件.,E.g. /install:"c:\temp\sample.xap"
- /origin:"xapURI" – 其中xapURI是在其中的.xap文件将已经从前来的URI,如果没有安装在命令行
- e.g. /origin:"http://example.com/sample.xap" . 这个URI将被作为原产地为安全目的的网站.例如,对于沙盒的应用,Silverlight的网络需要一个策略文件检查网络请求时域比其他源站点,起源也可作为一个应用程序的唯一的ID.该xapURI必须是绝对URI不是一个相对URI,而且必须开始为http:,通过https:或文件:.
- /overwrite -- (可选)将覆盖任何与该xapURI以前安装的xap.
删除
- /uninstall – 卸载指定的应用程序 /origin. 这是相同的/origin的作用被用来安装应用程序最初.
- /origin:"xapURI" – 相同/origin的情况下安装
有不对之处还请大家提出来共同进步。