OOB应用、OOB更新以及WebBrowser
首先学习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窗体来实现这个功能,代码如下:
private void webBrowser1_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
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的情况下安装
有不对之处还请大家提出来共同进步。