《Silverlight4浏览器外模式及与操作系统交互详解》
立即解锁
发布时间: 2025-08-26 00:48:30 阅读量: 19 订阅数: 46 AIGC 


Silverlight 4商业应用开发指南
### 《Silverlight 4 浏览器外模式及与操作系统交互详解》
#### 1. 全屏模式相关设置
在 Silverlight 应用中,若要使应用在其他窗口置于其前方时仍保持全屏模式,可使用以下代码:
```csharp
Application.Current.Host.Content.FullScreenOptions =
System.Windows.Interop.FullScreenOptions.StaysFullScreenWhenUnfocused;
```
设置此选项后,下次尝试进入全屏模式时,系统会询问用户是否允许应用无论其他应用是否获得焦点都保持全屏模式。不过,若应用以提升信任的浏览器外(OOB)模式运行,此消息不会显示。需要注意的是,即便设置了 `FullScreenOptions` 属性为 `StaysFullScreenWhenUnfocused`,尝试显示打开/保存对话框仍会使应用返回正常模式。
全屏模式存在一些限制,主要是大部分键盘输入被禁用,这是为防止恶意 Silverlight 应用模仿 Windows 锁定屏幕,避免用户意外输入凭据被盗取。不过,鼠标输入正常,部分键盘按键也可使用,包括箭头键(上、下、左、右)、空格键、Tab 键、Page Up 键、Page Down 键、Home 键、End 键和 Enter 键,而 Escape 键会被 Silverlight 运行时捕获并退出全屏模式。若应用以提升信任的方式运行,则可解除此限制。
#### 2. 提升信任模式
在 Silverlight 4 之前,Silverlight 应用只能在沙盒模式(部分信任)下运行,这是为防止恶意应用损坏用户机器,但也极大限制了应用开发的可能性,例如:
- 无法在不通过打开/保存文件对话框与用户交互的情况下读写用户文件系统中的文件。
- 无法与用户机器上连接的硬件(如打印机、扫描仪、生物识别设备等)交互。
- 无法查询本地数据库引擎(如 SQL Server)。
- 无法与用户机器上安装的其他应用(如 Word 和 Excel)交互。
Silverlight 4 引入了提升信任模式,使应用至少能部分突破沙盒限制。此模式仅在应用以浏览器外模式运行时启用,能让应用与主机和操作系统集成,拥有更广泛的可能性和潜在用途。
#### 3. 启用提升信任
启用应用的提升信任权限步骤如下:
1. 通过项目属性打开“浏览器外设置”窗口属性。
2. 选中“在浏览器外运行时需要提升信任”复选框。
设置此选项后,安装对话框会有所不同。若对 XAP 文件进行签名,可使对话框更友好,将顶部的警告变为简单的询问是否安装应用的问题,并显示应用图标。
在调用任何需要提升信任的功能之前,需确保应用确实以提升信任权限运行。可通过检查当前 `Application` 对象的 `HasElevatedPermissions` 属性来判断:
```csharp
bool hasElevatedTrust = Application.Current.HasElevatedPermissions;
```
应用尝试使用需要提升信任的功能时,应先检查此属性。若应用大量使用需要提升信任的功能,通常会在通过浏览器访问时显示安装按钮,要求用户安装并以 OOB 模式运行。
#### 4. 文件系统访问
拥有提升信任权限后,应用可直接读写用户文件系统中用户配置文件内的文件夹,但尝试打开该位置之外的文件会抛出 `SecurityException` 异常。相关操作类位于 `System.IO` 命名空间,与完整 .NET 框架中的类类似,不过并非所有方法都已实现。
以下是一些在提升信任权限下可执行的文件系统任务:
- **获取特殊文件夹路径**:可使用 `Environment` 类的 `GetFolderPath` 方法,传入 `Environment.SpecialFolder` 枚举值来获取特定文件夹路径。例如,获取用户文档文件夹路径:
```csharp
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
```
需注意,并非 `Environment.SpecialFolders` 枚举中列出的所有特殊文件夹都可访问,如尝试获取机器的 Program Files 文件夹路径会抛出异常。
- **枚举文件夹内的文件和目录**:
- **枚举文件**:创建 `DirectoryInfo` 对象并使用其 `EnumerateFiles` 方法,可枚举文件夹内的文件。例如,枚举用户文档文件夹内的文件:
```csharp
string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
DirectoryInfo docPathInfo = new DirectoryInfo(docPath);
IEnumerable<FileInfo> docPathFiles = docPathInfo.EnumerateFiles();
foreach (FileInfo file in docPathFiles)
{
// 按需处理 FileInfo 对象
}
```
调用 `EnumerateFiles` 方法时,可使用其重载方法提供过滤模式和是否返回子目录中的文件。
- **枚举目录**:同样使用 `DirectoryInfo` 对象的 `EnumerateDirectories` 方法,可枚举文件夹内的子目录。例如:
```csharp
string docPat
```
0
0
复制全文
相关推荐









