SlideShare una empresa de Scribd logo
1 de 47
Silverlight. To OOB or not to OOB Евгений Жарков Silverlight MVP/MCTS
Silverlight Windows Phone 7 ПК Браузер Вне браузера
Out of browser (OOB) Управление окном Настройка внешнего вида окна Размещения HTML внутри приложения Окна уведомлений Digital Rights Management (DRM) Расширенные права Доступ к файловой системе COM Интегрированная возможность обновления
Активация OOB
КонфигурацияOOB
Инсталляция Довели до ума
Установка доверенных приложений
Подпись XAP
Тихая установка XAP Инсталляция /install:"xapFile" – where xapFile is the file name/file path to the .xap file., E.g. /install:"c:empample.xap" /origin:"xapURI" – where xapURI is the URI where the .xap file would've come from if not installed at the commandline e.g. /origin:"http://example.com/sample.xap" .  This URI will be used as the site of origin for security purposes. For example, for sandboxed applications, Silverlight networking requires a policy file check when making network requests to domains other than the site of origin.  The origin also serves as a unique ID for the application.  The xapURI must be an absolute URI not a relative URI, and must start with http:, https:, or file:. /overwrite -- (optional) Overwrites any previously installed .xap with that xapURI. Деинсталляция /uninstall  – Uninstalls the application specified in /origin. This is the same /origin value that was used to install the app originally. /origin:"xapURI" – same as /origin for the install case
Тихая установка XAP Установка sllauncher.exe  /install:"{LocalPathToXapFile}ourfile.xap"  /origin:"{urltoxapfile}/Yourfile.xap"  /shortcut:desktop+startmenu Автозапуск "%ProgramFiles%icrosoft Silverlightllauncher.exe"  /emulate:"Yourfile.xap" 	 /origin:"http://blabla.com/Yourfile.xap" Деинсталляция "%ProgramFiles%icrosoft Silverlightllauncher.exe"  /uninstall  /origin:"http://blabla.com/Yourfile.xap"
Тихая установка Silverlight /q- quiet install or upgrade. This installs or upgrades Silverlight without seeing the GUI. When Silverlight is installed quietly, by default privacy related features such as DRM protected media playback and the Silverlight auto-update feature will be configured to prompt the user for permission on 1st use of the respective features. The Silverlight auto-update feature requires administrative rights so non-admin users will not be prompted. /doNotRequireDRMPrompt - turns off the 1st use prompt allowing content protected by Digital Rights Management (DRM) to play without requiring any end-user intervention. When Silverlight is installed quietly, DRM Playback is set to prompt on 1st use by default. /ignorewarnings - non-fatal warnings will not be reflected in the quiet installer return code but will instead return zero indicating success. /noupdate - disables the Silverlight internal auto-updater. /qu - quiet uninstall. This uninstalls Silverlight without seeing the GUI.
Тихая установка Silverlight Результирующая строка Silverlight.exe /q /doNotRequireDRMPrompt
NSIS Script Example Name “Test Out of Browser Installer" OutFile “TextOOBInstaller.exe" InstallDir "$PROGRAMFILESestOOB" XPStyle on Section SetOutPath "$INSTDIR" SetOverwriteifnewer     File "Silverlight.exe" ExecWait "$INSTDIRilverlight.exe /q /doNotRequireDRMPrompt"     File “TestOOB.xap" ExecWait '"$PROGRAMFILESicrosoft Silverlightllauncher.exe" 	/install:"$INSTDIRestOOB.xap"   	/origin:"http://blabla.com/TestOOB.xap"  	/shortcut:desktop+startmenu' SectionEnd
Batch Script :: Is this a 64-bit machine? @echo off if exist "%ProgramFiles(x86)%" ( :: We're on 64-bit   set sllauncherlocation="%ProgramFiles(x86)%icrosoft Silverlightllauncher.exe" ) else ( ::We're on 32-bit   set sllauncherlocation="%ProgramFiles%icrosoft Silverlightllauncher.exe" ) :: run SL %sllauncherlocation% /overwrite /emulate:“TestOOB.xap" /origin:"http://blabla/TestOOB.xap"
Мои документы 我的文件 My Documents EigeneDateien Mes documents Documents Мои документы Τα έγγραφά μου
Batch Script User Folder Извлекаем правильный адрес директории “Мои документы” из реестра FOR /F "tokens=3 delims= " %%G IN ('REG QUERY "HKCUoftwareicrosoftindowsurrentVersionxplorerhell Folders" /v "Personal"') DO (SET docsdir=%%G)
Многоязычный интерфейс Добавление поддерживаемых культур в файл проекта <?xmlversion="1.0"encoding="utf-8"?> <ProjectToolsVersion="4.0"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">   <PropertyGroup>     <ConfigurationCondition=" '$(Configuration)' == '' ">Debug</Configuration>     <PlatformCondition=" '$(Platform)' == '' ">AnyCPU</Platform> <!– настройки --> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>     <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>     <SilverlightApplication>true</SilverlightApplication>     <SupportedCultures>en-US,ru-RU,uk-UA</SupportedCultures>     <XapOutputs>true</XapOutputs>
Многоязычный интерфейс Добавляем ресурсы с локализованным текстом
Многоязычный интерфейс Установить модификатор доступа в Public
Многоязычный интерфейс Регистрация ресурса <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MyApplication" x:Class=“MyApplication.App">   <Application.Resources> <local:LocalizationResource x:Key="Localization" />   </Application.Resources> </Application>
Многоязычный интерфейс Регистрация ресурса     publicclassLocalizationResource : INotifyPropertyChanged     { privatestaticLocalization.Strings resource = newLocalization.Strings(); publicLocalization.Strings Strings         { get { return resource; } set { OnPropertyChanged("Strings"); }         }         #regionINotifyPropertyChanged Members publiceventPropertyChangedEventHandlerPropertyChanged; privatevoidOnPropertyChanged(stringpropertyName)         { if (PropertyChanged != null)             { PropertyChanged(this, newPropertyChangedEventArgs(propertyName));             }         }         #endregion }
Многоязычный интерфейс Переключение языка UI Thread.CurrentThread.CurrentUICulture = newCultureInfo("uk-UA");             ((LocalizationResource)Application.Current.Resources["Localization"]).Strings = newMyApplication.Localization.Strings();
COM Подключаем пространство имен usingSystem.Runtime.InteropServices.Automation; Создаем файлы в любом месте на ПК using (dynamicfsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject")) { dynamic file = fsoCom.CreateTextFile(@"c:est.txt", true); file.WriteLine("Bloody Hell!"); file.WriteLine("Silverlight is writing to C:"); file.Close(); }
COM Пиним приложение на панель задач using (dynamicShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamiccommonPrograms = ShellApplication.NameSpace(23); stringallUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"ccessories"); dynamic link = directory.ParseName("Calculator.lnk"); dynamic verbs = link.Verbs(); for (int i = 0; i < verbs.Count(); i++)     { dynamic verb = verbs.Item(i); if (verb.Name.Replace(@"&", string.Empty).ToLower() == "pin to taskbar")         { verb.DoIt();         }     } }
COM Добавляем OOB-приложение в автозагрузку using (dynamicShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamiccommonPrograms = ShellApplication.NameSpace(11); stringallUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"rograms"); dynamic link = directory.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName + ".lnk"); stringOOBLink = link.Path; using (dynamicWShell = ComAutomationFactory.CreateObject("WScript.Shell"))     { WShell.RegWrite(@"HKLMoftwareicrosoftindowsurrentVersionunquot; + Deployment.Current.OutOfBrowserSettings.ShortName, OOBLink); MessageBox.Show("Please restart your machine and this application will load on startup.");     } }
COM Работа с ODBC using (dynamicIDbConnection = ComAutomationFactory.CreateObject("ADODB.Connection")) using (dynamicIDbCommand = ComAutomationFactory.CreateObject("ADODB.Command")) { IDbConnection.ConnectionString = "driver={SQL Server};"+                                  "server=.;uid=sa;pwd=password;database=Northwind"; IDbConnection.Open(); IDbCommand.ActiveConnection = IDbConnection; IDbCommand.CommandText = @"INSERT INTO [Northwind].[dbo].[Region]                     ([RegionID], [RegionDescription]) VALUES (10, 'BLa')"; IDbCommand.Execute(); }
Тихая установка MSSQL Express sqlexpr32.exe -q /norebootchk /qnREBOOT=ReallySuppressINSTANCENAME="name" ADDLOCAL=ALLSECURITYMODE=SQL 	SAPWD="password" SQLAUTOSTART=1 DISABLENETWORKPROTOCOLS=0 Compact Edition msiexec /quit /i SSCERuntime-ENU-x86.msi
Silverlight COM Toolkit http://silverlightcom.codeplex.com/
Silverlight COM Toolkit Copy ComToolkit.IO.File.Copy(@"c:nyDirnyFile.ext", @"c:nyDirnyFile2.ext", true); Exists bool exist = ComToolkit.IO.File.Exists(@"c:nyDirnyFile.ext"); WriteAllBytes string[] contents = //some lines of text...ComToolkit.IO.File.WriteAllLines(@"c:nyDirnyFile.ext", bytes); Open AdoFileStream stream = ComToolkit.IO.File.Open(@"c:nyDirnyFile.ext", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite); http://silverlightcom.codeplex.com/
Silverlight COM Toolkit ComToolkit.Data stringconnectionString = @"Provider=SQLOLEDB;DataSource=servernameqlexpress;InitialCatalog=databasename;User ID=username; Password=password"; using (var connection = newComToolkit.Data.AdoConnection(connectionString)) {  connection.Open();  varcommand = connection.CreateCommand();  command.CommandText= "SELECT MyColumn FROM MyTable";  varreader = command.ExecuteReader();  while(reader.Read()) {  objectbyindex = reader[0];  objectbystring = reader["MyColumn"];  //для работы с динамическими свойства reader должен быть объявлен как dynamic //object bydynamic = reader.MyColumn; } } http://silverlightcom.codeplex.com/
Silverlight COM Toolkit Асинхронный ComToolkit.Data privateComToolkit.Data.AdoConnection connection;  privatevoidExecuteReaderAsyncSample() { connection = newComToolkit.Data.AdoConnection(connectionString);  connection.Open();  varcommand = connection.CreateCommand();  command.CommandText= "SELECT MyColumn FROM MyTable"; command.ExecuteReaderCompleted+= new EventHandler<ComToolkit.Data.ExecuteReaderCompletedEventArgs>(command_ExecuteReaderCompleted);  command.ExecuteReaderAsync(); }  voidcommand_ExecuteReaderCompleted(object sender, ComToolkit.Data.ExecuteReaderCompletedEventArgs e) {  //TODO: обрабатываем результат } http://silverlightcom.codeplex.com/
Работа с документами
XML Paper Specification(XPS) Позитивные факторы В основе лежит ZIP, XML, XAML. Разработан Microsoft и Ecma International, 2006 год Возможность относительно легкой конвертации в XAML Родная поддержка в Windows Vista/7 Негативные факторы Windows XP SP2 требует наличие .NET Framework 3 иXPS Document Viewer
PDF Позитивные факторы Бесплатные компоненты для обработки PDF-документа Возможность разместить документ в WebBrowserпри наличии Adobe Acrobat плагина Негативные факторы Платные компоненты для обработки и отображения в Silverlight-приложении
HTML Позитивные факторы Возможно разместить внутри элемента управления WebBrowser Негативные факторы Невозможно открывать локальные файлы внутри WebBrowser Невозможно задать заголовочную информацию в WebBrowser Невозможно открыть MHT-файлы Следует собирать все ресурсы в единый HTML-файл, включая изображения, используя Data URI, который имеет ограничение в 32КБ
Microsoft Office (Word, Excel, PowerPoint) Позитивные факторы Работа с документами через COM Негативные факторы Отсутствует родная поддержкав Silverlight
Microsoft Office (Word, Excel, PowerPoint) Пример обработки Word документа using(dynamic word = AutomationFactory.CreateObject("Word.Application")) { intwdFormatWebArchive = 9; // MHT fileformat intwdDoNotSaveChanges = 0; // WdSaveOptions do not save value using(dynamic document = word.Documents.Open(tempDoc))     { document.SaveAs("C:.doc", refwdFormatWebArchive);     } word.Quit(refwdDoNotSaveChanges); }
События Office  Пример обработки Word документа dynamic word = AutomationFactory.CreateObject("Word.Application"); word.Visible = true; AutomationEventsearchEvent = AutomationFactory.GetEvent(word, "Quit"); searchEvent.EventRaised += (s, a) => { MessageBox.Show("Quit"); }; dynamic document = word.Documents.Open("C:est.doc");
Потоки и BackgroundWorker varbw = newBackgroundWorker(); bw.WorkerReportsProgress = true; bw.DoWork+= (s, a) => { varworker = sender asBackgroundWorker; worker.ReportProgress(0, "Сейчас начнем"); MessageBox.Show("Работаем"); worker.ReportProgress(100, «Закончили"); }; bw.ProgressChanged+= (s, a) =>{ MessageBox.Show("Current state" + a.ProgressPercentage.ToString()); // сложные объекты могут передаваться в e.UserState     }; bw.RunWorkerCompleted+= (s, a) => { MessageBox.Show("Done"); }; bw.RunWorkerAsync(newDictionary<string, object> {          { "file", "test.doc"},         { "region", "Ukraine"}     });
Navigation Framework Подключение пространства имен в XAML <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation">
Navigation Framework Добавление Frame <navigation:Frame x:Name="ContentFrame" Source="/Action"> <navigation:Frame.UriMapper> <uriMapper:UriMapper> <uriMapper:UriMapping Uri=""MappedUri="/Pages/Action.xaml"/> <uriMapper:UriMapping Uri="/{pageName}"MappedUri="/Pages/{pageName}.xaml"/> </uriMapper:UriMapper> </navigation:Frame.UriMapper> </navigation:Frame> Переход на другую страницу NavigationService.Navigate(newUri("/INeedThisPage", UriKind.Relative));
Управление окном Ограничение размера окна // App.xaml privatevoidApplication_Startup(object sender, StartupEventArgs e) { this.RootVisual= newMainPage(); App.Current.Host.Content.Resized += (s, a) =>          { App.Current.MainWindow.Height = 650; App.Current.MainWindow.Width = 1000;         }; } Развернуть окно App.Current.MainWindow.WindowState= WindowState.Maximized;
Notification Window var block = newTextBlock(); block.Text = "Wassup!"; varnw = newNotificationWindow(); nw.Height = 50; nw.Width = 300; nw.Content = block; nw.Show(3000);
Хочу работать с архивами http://slsharpziplib.codeplex.com/ ZipOutputStreamzipOutStream = newZipOutputStream(File.Create("my.zip")); ZipEntryfileZipEntry = newZipEntry(name);  zipOutStream.PutNextEntry(fileZipEntry);  FileStreamfileStream= File.Open(filePath, FileMode.Open);  byte[] buffer = newbyte[fileStream.Length];  fileStream.Read(buffer, 0, buffer.Length);  zipOutStream.Write(buffer, 0, buffer.Length);  zipOutStream.CloseEntry();
Silverlight 5
Поздравляю, вы пережили этот доклад Вопросы ? Слушай подкаст 2Гига Евгений Жарков eu.zharkov@gmail.com @2j2e

Más contenido relacionado

La actualidad más candente

Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийsnowytoxa
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовPyNSK
 
Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency InjectionPlatonov Sergey
 
Easy selenium test automation on python
Easy selenium test automation on pythonEasy selenium test automation on python
Easy selenium test automation on pythonMykhailo Poliarush
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Moscow.pm
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about AtlasArtem Sokovets
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
Микрофреймворки PHP
Микрофреймворки PHPМикрофреймворки PHP
Микрофреймворки PHPEkaterina Giganova
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojoAnton Ukolov
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDEISsoft
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работыPaul Stashevsky
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 

La actualidad más candente (20)

Selenium vs AJAX
Selenium vs AJAXSelenium vs AJAX
Selenium vs AJAX
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложений
 
Automation testing desktop applications
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applications
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
 
Практика использования Dependency Injection
Практика использования Dependency InjectionПрактика использования Dependency Injection
Практика использования Dependency Injection
 
Easy selenium test automation on python
Easy selenium test automation on pythonEasy selenium test automation on python
Easy selenium test automation on python
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about Atlas
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
Микрофреймворки PHP
Микрофреймворки PHPМикрофреймворки PHP
Микрофреймворки PHP
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojo
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 

Destacado

04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''DneprCiklumEvents
 
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apSergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apDneprCiklumEvents
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''DneprCiklumEvents
 
Power point rosa
Power point rosaPower point rosa
Power point rosaloreana8
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''DneprCiklumEvents
 
Disciplina fiscale degli incentivi sul fotovoltaico 2011
Disciplina fiscale degli incentivi sul fotovoltaico 2011Disciplina fiscale degli incentivi sul fotovoltaico 2011
Disciplina fiscale degli incentivi sul fotovoltaico 2011EnergymasterIt
 
Vladimir kozhayev handmade isometry
Vladimir kozhayev handmade isometryVladimir kozhayev handmade isometry
Vladimir kozhayev handmade isometryDneprCiklumEvents
 

Destacado (7)

04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apSergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''
 
Power point rosa
Power point rosaPower point rosa
Power point rosa
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
Disciplina fiscale degli incentivi sul fotovoltaico 2011
Disciplina fiscale degli incentivi sul fotovoltaico 2011Disciplina fiscale degli incentivi sul fotovoltaico 2011
Disciplina fiscale degli incentivi sul fotovoltaico 2011
 
Vladimir kozhayev handmade isometry
Vladimir kozhayev handmade isometryVladimir kozhayev handmade isometry
Vladimir kozhayev handmade isometry
 

Similar a 06 net saturday eugene zharkov ''silverlight. to oob or not to oob''

Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеAlex Tumanoff
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demomegakott
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?Oleksandr Torosh
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflowit-people
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
WAF наше все?!
WAF наше все?!WAF наше все?!
WAF наше все?!Dmitry Evteev
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionAndrew Petukhov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.Дмитрий Бумов
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkGeorgy Turevich
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 

Similar a 06 net saturday eugene zharkov ''silverlight. to oob or not to oob'' (20)

Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопе
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Browser Persistence Bynet
Browser Persistence BynetBrowser Persistence Bynet
Browser Persistence Bynet
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demo
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
Изоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, HuntflowИзоморфные приложения и Python - Виталий Глибин, Huntflow
Изоморфные приложения и Python - Виталий Глибин, Huntflow
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
WAF наше все?!
WAF наше все?!WAF наше все?!
WAF наше все?!
 
Безопасность веб-приложений: starter edition
Безопасность веб-приложений: starter editionБезопасность веб-приложений: starter edition
Безопасность веб-приложений: starter edition
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend Framework
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 

Más de DneprCiklumEvents

Convert estimates to plans (Maxym Mykhalchuk Ciklum)
Convert estimates to plans (Maxym Mykhalchuk Ciklum)Convert estimates to plans (Maxym Mykhalchuk Ciklum)
Convert estimates to plans (Maxym Mykhalchuk Ciklum)DneprCiklumEvents
 
Time management training (Vadim Tikanov Ciklum)
Time management training (Vadim Tikanov Ciklum)Time management training (Vadim Tikanov Ciklum)
Time management training (Vadim Tikanov Ciklum)DneprCiklumEvents
 
Pavel yuriychuk svg in game development
Pavel yuriychuk svg in game developmentPavel yuriychuk svg in game development
Pavel yuriychuk svg in game developmentDneprCiklumEvents
 
Vitaly hit' abc_of_game_development
Vitaly hit' abc_of_game_developmentVitaly hit' abc_of_game_development
Vitaly hit' abc_of_game_developmentDneprCiklumEvents
 
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''DneprCiklumEvents
 
03 net saturday anton samarskyy ''document oriented databases for the .net pl...
03 net saturday anton samarskyy ''document oriented databases for the .net pl...03 net saturday anton samarskyy ''document oriented databases for the .net pl...
03 net saturday anton samarskyy ''document oriented databases for the .net pl...DneprCiklumEvents
 
02 net saturday roman gomolko ''mvvm in javascript using knockoutjs''
02 net saturday roman gomolko ''mvvm in javascript using knockoutjs''02 net saturday roman gomolko ''mvvm in javascript using knockoutjs''
02 net saturday roman gomolko ''mvvm in javascript using knockoutjs''DneprCiklumEvents
 
Segey Glebov tips and tricks for modern mobile project management
Segey Glebov tips and tricks for modern mobile project managementSegey Glebov tips and tricks for modern mobile project management
Segey Glebov tips and tricks for modern mobile project managementDneprCiklumEvents
 
Pavel kravchenko obj c runtime
Pavel kravchenko obj c runtimePavel kravchenko obj c runtime
Pavel kravchenko obj c runtimeDneprCiklumEvents
 
Kirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталяхKirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталяхDneprCiklumEvents
 
Dmitry pilipenko i os gamekit
Dmitry pilipenko i os gamekitDmitry pilipenko i os gamekit
Dmitry pilipenko i os gamekitDneprCiklumEvents
 

Más de DneprCiklumEvents (12)

Convert estimates to plans (Maxym Mykhalchuk Ciklum)
Convert estimates to plans (Maxym Mykhalchuk Ciklum)Convert estimates to plans (Maxym Mykhalchuk Ciklum)
Convert estimates to plans (Maxym Mykhalchuk Ciklum)
 
Time management training (Vadim Tikanov Ciklum)
Time management training (Vadim Tikanov Ciklum)Time management training (Vadim Tikanov Ciklum)
Time management training (Vadim Tikanov Ciklum)
 
Pavel yuriychuk svg in game development
Pavel yuriychuk svg in game developmentPavel yuriychuk svg in game development
Pavel yuriychuk svg in game development
 
Vitaly hit' abc_of_game_development
Vitaly hit' abc_of_game_developmentVitaly hit' abc_of_game_development
Vitaly hit' abc_of_game_development
 
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
 
03 net saturday anton samarskyy ''document oriented databases for the .net pl...
03 net saturday anton samarskyy ''document oriented databases for the .net pl...03 net saturday anton samarskyy ''document oriented databases for the .net pl...
03 net saturday anton samarskyy ''document oriented databases for the .net pl...
 
02 net saturday roman gomolko ''mvvm in javascript using knockoutjs''
02 net saturday roman gomolko ''mvvm in javascript using knockoutjs''02 net saturday roman gomolko ''mvvm in javascript using knockoutjs''
02 net saturday roman gomolko ''mvvm in javascript using knockoutjs''
 
Taras Kalapun ui testing
Taras Kalapun ui testingTaras Kalapun ui testing
Taras Kalapun ui testing
 
Segey Glebov tips and tricks for modern mobile project management
Segey Glebov tips and tricks for modern mobile project managementSegey Glebov tips and tricks for modern mobile project management
Segey Glebov tips and tricks for modern mobile project management
 
Pavel kravchenko obj c runtime
Pavel kravchenko obj c runtimePavel kravchenko obj c runtime
Pavel kravchenko obj c runtime
 
Kirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталяхKirill Zotin клиент серверное взаимодействие под android в деталях
Kirill Zotin клиент серверное взаимодействие под android в деталях
 
Dmitry pilipenko i os gamekit
Dmitry pilipenko i os gamekitDmitry pilipenko i os gamekit
Dmitry pilipenko i os gamekit
 

06 net saturday eugene zharkov ''silverlight. to oob or not to oob''

  • 1. Silverlight. To OOB or not to OOB Евгений Жарков Silverlight MVP/MCTS
  • 2. Silverlight Windows Phone 7 ПК Браузер Вне браузера
  • 3. Out of browser (OOB) Управление окном Настройка внешнего вида окна Размещения HTML внутри приложения Окна уведомлений Digital Rights Management (DRM) Расширенные права Доступ к файловой системе COM Интегрированная возможность обновления
  • 7.
  • 10. Тихая установка XAP Инсталляция /install:"xapFile" – where xapFile is the file name/file path to the .xap file., E.g. /install:"c:empample.xap" /origin:"xapURI" – where xapURI is the URI where the .xap file would've come from if not installed at the commandline e.g. /origin:"http://example.com/sample.xap" .  This URI will be used as the site of origin for security purposes. For example, for sandboxed applications, Silverlight networking requires a policy file check when making network requests to domains other than the site of origin.  The origin also serves as a unique ID for the application.  The xapURI must be an absolute URI not a relative URI, and must start with http:, https:, or file:. /overwrite -- (optional) Overwrites any previously installed .xap with that xapURI. Деинсталляция /uninstall  – Uninstalls the application specified in /origin. This is the same /origin value that was used to install the app originally. /origin:"xapURI" – same as /origin for the install case
  • 11. Тихая установка XAP Установка sllauncher.exe /install:"{LocalPathToXapFile}ourfile.xap" /origin:"{urltoxapfile}/Yourfile.xap" /shortcut:desktop+startmenu Автозапуск "%ProgramFiles%icrosoft Silverlightllauncher.exe" /emulate:"Yourfile.xap" /origin:"http://blabla.com/Yourfile.xap" Деинсталляция "%ProgramFiles%icrosoft Silverlightllauncher.exe" /uninstall /origin:"http://blabla.com/Yourfile.xap"
  • 12. Тихая установка Silverlight /q- quiet install or upgrade. This installs or upgrades Silverlight without seeing the GUI. When Silverlight is installed quietly, by default privacy related features such as DRM protected media playback and the Silverlight auto-update feature will be configured to prompt the user for permission on 1st use of the respective features. The Silverlight auto-update feature requires administrative rights so non-admin users will not be prompted. /doNotRequireDRMPrompt - turns off the 1st use prompt allowing content protected by Digital Rights Management (DRM) to play without requiring any end-user intervention. When Silverlight is installed quietly, DRM Playback is set to prompt on 1st use by default. /ignorewarnings - non-fatal warnings will not be reflected in the quiet installer return code but will instead return zero indicating success. /noupdate - disables the Silverlight internal auto-updater. /qu - quiet uninstall. This uninstalls Silverlight without seeing the GUI.
  • 13. Тихая установка Silverlight Результирующая строка Silverlight.exe /q /doNotRequireDRMPrompt
  • 14. NSIS Script Example Name “Test Out of Browser Installer" OutFile “TextOOBInstaller.exe" InstallDir "$PROGRAMFILESestOOB" XPStyle on Section SetOutPath "$INSTDIR" SetOverwriteifnewer File "Silverlight.exe" ExecWait "$INSTDIRilverlight.exe /q /doNotRequireDRMPrompt" File “TestOOB.xap" ExecWait '"$PROGRAMFILESicrosoft Silverlightllauncher.exe" /install:"$INSTDIRestOOB.xap" /origin:"http://blabla.com/TestOOB.xap" /shortcut:desktop+startmenu' SectionEnd
  • 15. Batch Script :: Is this a 64-bit machine? @echo off if exist "%ProgramFiles(x86)%" ( :: We're on 64-bit set sllauncherlocation="%ProgramFiles(x86)%icrosoft Silverlightllauncher.exe" ) else ( ::We're on 32-bit set sllauncherlocation="%ProgramFiles%icrosoft Silverlightllauncher.exe" ) :: run SL %sllauncherlocation% /overwrite /emulate:“TestOOB.xap" /origin:"http://blabla/TestOOB.xap"
  • 16. Мои документы 我的文件 My Documents EigeneDateien Mes documents Documents Мои документы Τα έγγραφά μου
  • 17. Batch Script User Folder Извлекаем правильный адрес директории “Мои документы” из реестра FOR /F "tokens=3 delims= " %%G IN ('REG QUERY "HKCUoftwareicrosoftindowsurrentVersionxplorerhell Folders" /v "Personal"') DO (SET docsdir=%%G)
  • 18. Многоязычный интерфейс Добавление поддерживаемых культур в файл проекта <?xmlversion="1.0"encoding="utf-8"?> <ProjectToolsVersion="4.0"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <ConfigurationCondition=" '$(Configuration)' == '' ">Debug</Configuration> <PlatformCondition=" '$(Platform)' == '' ">AnyCPU</Platform> <!– настройки --> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion> <SilverlightApplication>true</SilverlightApplication> <SupportedCultures>en-US,ru-RU,uk-UA</SupportedCultures> <XapOutputs>true</XapOutputs>
  • 19. Многоязычный интерфейс Добавляем ресурсы с локализованным текстом
  • 20. Многоязычный интерфейс Установить модификатор доступа в Public
  • 21. Многоязычный интерфейс Регистрация ресурса <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MyApplication" x:Class=“MyApplication.App"> <Application.Resources> <local:LocalizationResource x:Key="Localization" /> </Application.Resources> </Application>
  • 22. Многоязычный интерфейс Регистрация ресурса publicclassLocalizationResource : INotifyPropertyChanged { privatestaticLocalization.Strings resource = newLocalization.Strings(); publicLocalization.Strings Strings { get { return resource; } set { OnPropertyChanged("Strings"); } } #regionINotifyPropertyChanged Members publiceventPropertyChangedEventHandlerPropertyChanged; privatevoidOnPropertyChanged(stringpropertyName) { if (PropertyChanged != null) { PropertyChanged(this, newPropertyChangedEventArgs(propertyName)); } } #endregion }
  • 23. Многоязычный интерфейс Переключение языка UI Thread.CurrentThread.CurrentUICulture = newCultureInfo("uk-UA"); ((LocalizationResource)Application.Current.Resources["Localization"]).Strings = newMyApplication.Localization.Strings();
  • 24. COM Подключаем пространство имен usingSystem.Runtime.InteropServices.Automation; Создаем файлы в любом месте на ПК using (dynamicfsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject")) { dynamic file = fsoCom.CreateTextFile(@"c:est.txt", true); file.WriteLine("Bloody Hell!"); file.WriteLine("Silverlight is writing to C:"); file.Close(); }
  • 25. COM Пиним приложение на панель задач using (dynamicShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamiccommonPrograms = ShellApplication.NameSpace(23); stringallUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"ccessories"); dynamic link = directory.ParseName("Calculator.lnk"); dynamic verbs = link.Verbs(); for (int i = 0; i < verbs.Count(); i++) { dynamic verb = verbs.Item(i); if (verb.Name.Replace(@"&", string.Empty).ToLower() == "pin to taskbar") { verb.DoIt(); } } }
  • 26. COM Добавляем OOB-приложение в автозагрузку using (dynamicShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamiccommonPrograms = ShellApplication.NameSpace(11); stringallUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"rograms"); dynamic link = directory.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName + ".lnk"); stringOOBLink = link.Path; using (dynamicWShell = ComAutomationFactory.CreateObject("WScript.Shell")) { WShell.RegWrite(@"HKLMoftwareicrosoftindowsurrentVersionunquot; + Deployment.Current.OutOfBrowserSettings.ShortName, OOBLink); MessageBox.Show("Please restart your machine and this application will load on startup."); } }
  • 27. COM Работа с ODBC using (dynamicIDbConnection = ComAutomationFactory.CreateObject("ADODB.Connection")) using (dynamicIDbCommand = ComAutomationFactory.CreateObject("ADODB.Command")) { IDbConnection.ConnectionString = "driver={SQL Server};"+ "server=.;uid=sa;pwd=password;database=Northwind"; IDbConnection.Open(); IDbCommand.ActiveConnection = IDbConnection; IDbCommand.CommandText = @"INSERT INTO [Northwind].[dbo].[Region]                    ([RegionID], [RegionDescription]) VALUES (10, 'BLa')"; IDbCommand.Execute(); }
  • 28. Тихая установка MSSQL Express sqlexpr32.exe -q /norebootchk /qnREBOOT=ReallySuppressINSTANCENAME="name" ADDLOCAL=ALLSECURITYMODE=SQL SAPWD="password" SQLAUTOSTART=1 DISABLENETWORKPROTOCOLS=0 Compact Edition msiexec /quit /i SSCERuntime-ENU-x86.msi
  • 29. Silverlight COM Toolkit http://silverlightcom.codeplex.com/
  • 30. Silverlight COM Toolkit Copy ComToolkit.IO.File.Copy(@"c:nyDirnyFile.ext", @"c:nyDirnyFile2.ext", true); Exists bool exist = ComToolkit.IO.File.Exists(@"c:nyDirnyFile.ext"); WriteAllBytes string[] contents = //some lines of text...ComToolkit.IO.File.WriteAllLines(@"c:nyDirnyFile.ext", bytes); Open AdoFileStream stream = ComToolkit.IO.File.Open(@"c:nyDirnyFile.ext", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite); http://silverlightcom.codeplex.com/
  • 31. Silverlight COM Toolkit ComToolkit.Data stringconnectionString = @"Provider=SQLOLEDB;DataSource=servernameqlexpress;InitialCatalog=databasename;User ID=username; Password=password"; using (var connection = newComToolkit.Data.AdoConnection(connectionString)) { connection.Open(); varcommand = connection.CreateCommand(); command.CommandText= "SELECT MyColumn FROM MyTable"; varreader = command.ExecuteReader(); while(reader.Read()) { objectbyindex = reader[0]; objectbystring = reader["MyColumn"]; //для работы с динамическими свойства reader должен быть объявлен как dynamic //object bydynamic = reader.MyColumn; } } http://silverlightcom.codeplex.com/
  • 32. Silverlight COM Toolkit Асинхронный ComToolkit.Data privateComToolkit.Data.AdoConnection connection; privatevoidExecuteReaderAsyncSample() { connection = newComToolkit.Data.AdoConnection(connectionString); connection.Open(); varcommand = connection.CreateCommand(); command.CommandText= "SELECT MyColumn FROM MyTable"; command.ExecuteReaderCompleted+= new EventHandler<ComToolkit.Data.ExecuteReaderCompletedEventArgs>(command_ExecuteReaderCompleted); command.ExecuteReaderAsync(); } voidcommand_ExecuteReaderCompleted(object sender, ComToolkit.Data.ExecuteReaderCompletedEventArgs e) { //TODO: обрабатываем результат } http://silverlightcom.codeplex.com/
  • 34. XML Paper Specification(XPS) Позитивные факторы В основе лежит ZIP, XML, XAML. Разработан Microsoft и Ecma International, 2006 год Возможность относительно легкой конвертации в XAML Родная поддержка в Windows Vista/7 Негативные факторы Windows XP SP2 требует наличие .NET Framework 3 иXPS Document Viewer
  • 35. PDF Позитивные факторы Бесплатные компоненты для обработки PDF-документа Возможность разместить документ в WebBrowserпри наличии Adobe Acrobat плагина Негативные факторы Платные компоненты для обработки и отображения в Silverlight-приложении
  • 36. HTML Позитивные факторы Возможно разместить внутри элемента управления WebBrowser Негативные факторы Невозможно открывать локальные файлы внутри WebBrowser Невозможно задать заголовочную информацию в WebBrowser Невозможно открыть MHT-файлы Следует собирать все ресурсы в единый HTML-файл, включая изображения, используя Data URI, который имеет ограничение в 32КБ
  • 37. Microsoft Office (Word, Excel, PowerPoint) Позитивные факторы Работа с документами через COM Негативные факторы Отсутствует родная поддержкав Silverlight
  • 38. Microsoft Office (Word, Excel, PowerPoint) Пример обработки Word документа using(dynamic word = AutomationFactory.CreateObject("Word.Application")) { intwdFormatWebArchive = 9; // MHT fileformat intwdDoNotSaveChanges = 0; // WdSaveOptions do not save value using(dynamic document = word.Documents.Open(tempDoc)) { document.SaveAs("C:.doc", refwdFormatWebArchive); } word.Quit(refwdDoNotSaveChanges); }
  • 39. События Office Пример обработки Word документа dynamic word = AutomationFactory.CreateObject("Word.Application"); word.Visible = true; AutomationEventsearchEvent = AutomationFactory.GetEvent(word, "Quit"); searchEvent.EventRaised += (s, a) => { MessageBox.Show("Quit"); }; dynamic document = word.Documents.Open("C:est.doc");
  • 40. Потоки и BackgroundWorker varbw = newBackgroundWorker(); bw.WorkerReportsProgress = true; bw.DoWork+= (s, a) => { varworker = sender asBackgroundWorker; worker.ReportProgress(0, "Сейчас начнем"); MessageBox.Show("Работаем"); worker.ReportProgress(100, «Закончили"); }; bw.ProgressChanged+= (s, a) =>{ MessageBox.Show("Current state" + a.ProgressPercentage.ToString()); // сложные объекты могут передаваться в e.UserState }; bw.RunWorkerCompleted+= (s, a) => { MessageBox.Show("Done"); }; bw.RunWorkerAsync(newDictionary<string, object> { { "file", "test.doc"}, { "region", "Ukraine"} });
  • 41. Navigation Framework Подключение пространства имен в XAML <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation">
  • 42. Navigation Framework Добавление Frame <navigation:Frame x:Name="ContentFrame" Source="/Action"> <navigation:Frame.UriMapper> <uriMapper:UriMapper> <uriMapper:UriMapping Uri=""MappedUri="/Pages/Action.xaml"/> <uriMapper:UriMapping Uri="/{pageName}"MappedUri="/Pages/{pageName}.xaml"/> </uriMapper:UriMapper> </navigation:Frame.UriMapper> </navigation:Frame> Переход на другую страницу NavigationService.Navigate(newUri("/INeedThisPage", UriKind.Relative));
  • 43. Управление окном Ограничение размера окна // App.xaml privatevoidApplication_Startup(object sender, StartupEventArgs e) { this.RootVisual= newMainPage(); App.Current.Host.Content.Resized += (s, a) => { App.Current.MainWindow.Height = 650; App.Current.MainWindow.Width = 1000; }; } Развернуть окно App.Current.MainWindow.WindowState= WindowState.Maximized;
  • 44. Notification Window var block = newTextBlock(); block.Text = "Wassup!"; varnw = newNotificationWindow(); nw.Height = 50; nw.Width = 300; nw.Content = block; nw.Show(3000);
  • 45. Хочу работать с архивами http://slsharpziplib.codeplex.com/ ZipOutputStreamzipOutStream = newZipOutputStream(File.Create("my.zip")); ZipEntryfileZipEntry = newZipEntry(name); zipOutStream.PutNextEntry(fileZipEntry); FileStreamfileStream= File.Open(filePath, FileMode.Open); byte[] buffer = newbyte[fileStream.Length]; fileStream.Read(buffer, 0, buffer.Length); zipOutStream.Write(buffer, 0, buffer.Length); zipOutStream.CloseEntry();
  • 47. Поздравляю, вы пережили этот доклад Вопросы ? Слушай подкаст 2Гига Евгений Жарков eu.zharkov@gmail.com @2j2e