SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Silverlight 4, есть ли жизнь на
                 десктопе?




Евгений Жарков
Silverlight MVP/MCTS
Silverlight




                             Windows
          ПК
                             Phone 7




                 Вне
Браузер
               браузера
Out of browser (OOB)
•   Управление окном
•   Настройка внешнего вида окна
•   Размещения HTML внутри приложения
•   Окна уведомлений
•   Digital Rights Management (DRM)
•   Расширенные права
•   Доступ к файловой системе
•   COM
•   Интегрированная возможность обновления
Активация OOB
Конфигурация OOB
Инсталляция




Довели до ума
Доступ к
            буферу
            обмена




                       Прямой
  Кросс-
доменные
           Elevated    доступ к
                        папке
 запросы     trust       User




             COM
Установка доверенных приложений
Подпись XAP
Тихая установка XAP
                                    Инсталляция
/install:"xapFile" – where xapFile is the file name/file path to the .xap file., E.g.
/install:"c:tempsample.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}Yourfile.xap"
         /origin:"{urltoxapfile}/Yourfile.xap"
         /shortcut:desktop+startmenu

                                 Автозапуск
"%ProgramFiles%Microsoft Silverlightsllauncher.exe"
        /emulate:"Yourfile.xap"
        /origin:"http://blabla.com/Yourfile.xap"

                              Деинсталляция
"%ProgramFiles%Microsoft Silverlightsllauncher.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 "$PROGRAMFILESTestOOB"

XPStyle on

Section
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer
  File "Silverlight.exe"
  ExecWait "$INSTDIRSilverlight.exe /q /doNotRequireDRMPrompt"
  File “TestOOB.xap"
  ExecWait '"$PROGRAMFILESMicrosoft Silverlightsllauncher.exe"
          /install:"$INSTDIRTestOOB.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)%Microsoft
Silverlightsllauncher.exe"
) else (
::We're on 32-bit
  set sllauncherlocation="%ProgramFiles%Microsoft
Silverlightsllauncher.exe"
)
:: run SL
%sllauncherlocation% /overwrite /emulate:“TestOOB.xap"
/origin:"http://blabla/TestOOB.xap"
Мои документы

                     我的文件
         My                  Eigene
      Documents              Dateien



Mes docum
  ents                            Documents




   Мои                                    Τα
документы                              έγγραφά
                                         μου
Batch Script User Folder

Извлекаем правильный адрес директории “Мои документы” из
                        реестра


FOR /F "tokens=3 delims= " %%G IN ('REG QUERY
"HKCUSoftwareMicrosoftWindowsCurrentVersionExp
lorerShell Folders" /v "Personal"') DO (SET docsdir=%%G)
Многоязычный интерфейс
             Добавление поддерживаемых культур в файл проекта
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(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>
Многоязычный интерфейс
                          Регистрация ресурса
public class LocalizationResource : INotifyPropertyChanged
{
    private static Localization.Strings resource = new Localization.Strings();

    public Localization.Strings Strings
    {
        get { return resource; }
        set { OnPropertyChanged("Strings"); }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    #endregion
}
Многоязычный интерфейс

                    Переключение языка UI
Thread.CurrentThread.CurrentUICulture = new CultureInfo("uk-UA");

((LocalizationResource)Application.Current.Resources["Localizatio
n"]).Strings = new MyApplication.Localization.Strings();
COM
               Подключаем пространство имен
using System.Runtime.InteropServices.Automation;




             Создаем файлы в любом месте на ПК
using (dynamic fsoCom =
AutomationFactory.CreateObject("Scripting.FileSystemObject"))
{
    dynamic file = fsoCom.CreateTextFile(@"c:test.txt", true);
    file.WriteLine("Bloody Hell!");
    file.WriteLine("Silverlight is writing to C:");
    file.Close();
}
COM
              Пиним приложение на панель задач
using (dynamic ShellApplication =
ComAutomationFactory.CreateObject("Shell.Application"))
{
    dynamic commonPrograms = ShellApplication.NameSpace(23);
    string allUsersPath = commonPrograms.Self.Path;

    dynamic directory = ShellApplication.NameSpace(allUsersPath +
@"Accessories");
    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 (dynamic ShellApplication =
ComAutomationFactory.CreateObject("Shell.Application"))
{
    dynamic commonPrograms = ShellApplication.NameSpace(11);
    string allUsersPath = commonPrograms.Self.Path;

    dynamic directory = ShellApplication.NameSpace(allUsersPath +
@"Programs");
    dynamic link =
directory.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName +
".lnk");
    string OOBLink = link.Path;

    using (dynamic WShell =
ComAutomationFactory.CreateObject("WScript.Shell"))
    {
        WShell.RegWrite(@"HKLMSoftwareMicrosoftWindowsCurrentVersionRun"
                                    +
Deployment.Current.OutOfBrowserSettings.ShortName,
                                    OOBLink);
        MessageBox.Show("Please restart your machine and this application will
load on startup.");
    }
COM
                            Работа с ODBC
using (dynamic IDbConnection =
ComAutomationFactory.CreateObject("ADODB.Connection"))
using (dynamic IDbCommand =
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 /qn REBOOT=ReallySuppress
        INSTANCENAME="name" ADDLOCAL=ALL SECURITYMODE=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:AnyDirAnyFile.ext", @"c:AnyDirAnyFile2.ext", true);


                                       Exists
bool exist = ComToolkit.IO.File.Exists(@"c:AnyDirAnyFile.ext");


                                  WriteAllBytes
string[] contents = //some lines of text...
ComToolkit.IO.File.WriteAllLines(@"c:AnyDirAnyFile.ext", bytes);


                                        Open
 AdoFileStream stream =
 ComToolkit.IO.File.Open(@"c:AnyDirAnyFile.ext", System.IO.FileMode.OpenOrCrea
 te, System.IO.FileAccess.ReadWrite);
                           http://silverlightcom.codeplex.com/
Silverlight COM Toolkit
                             ComToolkit.Data
string connectionString = @"Provider=SQLOLEDB;Data
Source=servernamesqlexpress;Initial Catalog=databasename;User ID=username;
Password=password";
using (var connection = new ComToolkit.Data.AdoConnection(connectionString)) {
 connection.Open();
 var command = connection.CreateCommand();
 command.CommandText = "SELECT MyColumn FROM MyTable";
 var reader = command.ExecuteReader();
  while (reader.Read()) {
      object byindex = reader[0];
      object bystring = reader["MyColumn"];
      // для работы с динамическими свойства reader должен быть объявлен
          как dynamic
      //object bydynamic = reader.MyColumn;
}}


                        http://silverlightcom.codeplex.com/
Silverlight COM Toolkit
                    Асинхронный ComToolkit.Data
private ComToolkit.Data.AdoConnection connection;
private void ExecuteReaderAsyncSample() {
 connection = new ComToolkit.Data.AdoConnection(connectionString);
 connection.Open();
 var command = connection.CreateCommand();
 command.CommandText = "SELECT MyColumn FROM MyTable";

 command.ExecuteReaderCompleted += new
EventHandler<ComToolkit.Data.ExecuteReaderCompletedEventArgs>(command_Ex
ecuteReaderCompleted);

 command.ExecuteReaderAsync(); }

void command_ExecuteReaderCompleted(object
sender, ComToolkit.Data.ExecuteReaderCompletedEventArgs e) {
   //TODO: обрабатываем результат
}
                        http://silverlightcom.codeplex.com/
Работа с документами

              PDF




XPS
            Desktop      Microsoft
           Application    Office




              HTML
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"))
{
    int wdFormatWebArchive = 9; // MHT fileformat
    int wdDoNotSaveChanges = 0; // WdSaveOptions do not
save value

using (dynamic document = word.Documents.Open(tempDoc))
    {
       document.SaveAs("C:t.doc", ref wdFormatWebArchive);
    }
    word.Quit(ref wdDoNotSaveChanges);
}
События Office

                 Пример обработки Word документа
dynamic word = AutomationFactory.CreateObject("Word.Application");
word.Visible = true;

AutomationEvent searchEvent = AutomationFactory.GetEvent(word, "Quit");
searchEvent.EventRaised += (s, a) =>
{
    MessageBox.Show("Quit");
};

dynamic document = word.Documents.Open("C:test.doc");
Потоки и BackgroundWorker
var bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;

bw.DoWork += (s, a) => {
        var worker = sender as BackgroundWorker;
        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(new Dictionary<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.Navigatio
n"
  xmlns:uriMapper="clr-
namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigat
ion">
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(new Uri("/INeedThisPage", UriKind.Relative));
Управление окном
                      Ограничение размера окна
// App.xaml
private void Application_Startup(object sender, StartupEventArgs e)
{
    this.RootVisual = new MainPage();

    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 = new TextBlock();
block.Text = "Wassup!";

var nw = new NotificationWindow();
nw.Height = 50;
nw.Width = 300;
nw.Content = block;
nw.Show(3000);
Поздравляю, вы пережили этот доклад 

           Евгений Жарков
        eu.zharkov@gmail.com
                @2j2e




        Слушай
        подкаст
        2Гига

Weitere ähnliche Inhalte

Was ist angesagt?

Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиSQALab
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проектаYova Stoika
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Ontico
 
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинPositive Hack Days
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовSQALab
 
Александр Шаповал «Контейнеры Windows в Microsoft Azure и on-premise»
Александр Шаповал «Контейнеры Windows в Microsoft Azure и on-premise»Александр Шаповал «Контейнеры Windows в Microsoft Azure и on-premise»
Александр Шаповал «Контейнеры Windows в Microsoft Azure и on-premise»SpbDotNet Community
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...Ontico
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureAlexander Feschenko
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис ПаясьCodeFest
 
Опыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаОпыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаIlya Chesnokov
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектовRomero78
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17MoscowJS
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Ontico
 
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис РечкуновJSib
 

Was ist angesagt? (20)

Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проекта
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
 
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур ГильмуллинНейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
Нейронечёткая классификация слабо формализуемых данных | Тимур Гильмуллин
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Александр Шаповал «Контейнеры Windows в Microsoft Azure и on-premise»
Александр Шаповал «Контейнеры Windows в Microsoft Azure и on-premise»Александр Шаповал «Контейнеры Windows в Microsoft Azure и on-premise»
Александр Шаповал «Контейнеры Windows в Microsoft Azure и on-premise»
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows Azure
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
 
Опыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервисаОпыт разработки и тестирования RESTful JSON сервиса
Опыт разработки и тестирования RESTful JSON сервиса
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
 

Andere mochten auch

Overview of PaaS: Java experience
Overview of PaaS: Java experienceOverview of PaaS: Java experience
Overview of PaaS: Java experienceAlex Tumanoff
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Alex Tumanoff
 
Dependency injection with unity 2.0 Dmytro Mindra Lohika
Dependency injection with unity 2.0 Dmytro Mindra LohikaDependency injection with unity 2.0 Dmytro Mindra Lohika
Dependency injection with unity 2.0 Dmytro Mindra LohikaAlex Tumanoff
 
New features of Windows Phone 7.5
New features of Windows Phone 7.5New features of Windows Phone 7.5
New features of Windows Phone 7.5Alex Tumanoff
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений FirefoxAlex Tumanoff
 

Andere mochten auch (6)

Overview of PaaS: Java experience
Overview of PaaS: Java experienceOverview of PaaS: Java experience
Overview of PaaS: Java experience
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
 
Dependency injection with unity 2.0 Dmytro Mindra Lohika
Dependency injection with unity 2.0 Dmytro Mindra LohikaDependency injection with unity 2.0 Dmytro Mindra Lohika
Dependency injection with unity 2.0 Dmytro Mindra Lohika
 
New features of Windows Phone 7.5
New features of Windows Phone 7.5New features of Windows Phone 7.5
New features of Windows Phone 7.5
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений Firefox
 
JSF2
JSF2JSF2
JSF2
 

Ähnlich wie Silverlight 4, есть ли жизнь на десктопе

06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''DneprCiklumEvents
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Eugene Zharkov
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
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
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Vipolnenie komand na servere
Vipolnenie komand na servereVipolnenie komand na servere
Vipolnenie komand na servereygoltsev
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Vadim Kruchkov
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человекаNETFest
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...IT Event
 
C# Desktop. Занятие 15.
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.Igor Shkulipa
 

Ähnlich wie Silverlight 4, есть ли жизнь на десктопе (20)

06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
 
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)
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Vipolnenie komand na servere
Vipolnenie komand na servereVipolnenie komand na servere
Vipolnenie komand na servere
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...
 
C# Desktop. Занятие 15.
C# Desktop. Занятие 15.C# Desktop. Занятие 15.
C# Desktop. Занятие 15.
 

Mehr von Alex Tumanoff

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiAlex Tumanoff
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikAlex Tumanoff
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAlex Tumanoff
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony CoxAlex Tumanoff
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1Alex Tumanoff
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Alex Tumanoff
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...Alex Tumanoff
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevAlex Tumanoff
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoAlex Tumanoff
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsAlex Tumanoff
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковAlex Tumanoff
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapterAlex Tumanoff
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAlex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergAlex Tumanoff
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITAlex Tumanoff
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...Alex Tumanoff
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programmingAlex Tumanoff
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8Alex Tumanoff
 

Mehr von Alex Tumanoff (20)

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen Nedaskivskyi
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene Polonichko
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony Cox
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
 
Spring.new hope.1.3
Spring.new hope.1.3Spring.new hope.1.3
Spring.new hope.1.3
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton Vidishchev
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey Klimenko
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey Morenets
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей Рыбаков
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapter
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri Aizenberg
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в IT
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programming
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8
 

Silverlight 4, есть ли жизнь на десктопе

  • 1. Silverlight 4, есть ли жизнь на десктопе? Евгений Жарков Silverlight MVP/MCTS
  • 2. Silverlight Windows ПК Phone 7 Вне Браузер браузера
  • 3. Out of browser (OOB) • Управление окном • Настройка внешнего вида окна • Размещения HTML внутри приложения • Окна уведомлений • Digital Rights Management (DRM) • Расширенные права • Доступ к файловой системе • COM • Интегрированная возможность обновления
  • 7. Доступ к буферу обмена Прямой Кросс- доменные Elevated доступ к папке запросы trust User COM
  • 10. Тихая установка XAP Инсталляция /install:"xapFile" – where xapFile is the file name/file path to the .xap file., E.g. /install:"c:tempsample.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}Yourfile.xap" /origin:"{urltoxapfile}/Yourfile.xap" /shortcut:desktop+startmenu Автозапуск "%ProgramFiles%Microsoft Silverlightsllauncher.exe" /emulate:"Yourfile.xap" /origin:"http://blabla.com/Yourfile.xap" Деинсталляция "%ProgramFiles%Microsoft Silverlightsllauncher.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 "$PROGRAMFILESTestOOB" XPStyle on Section SetOutPath "$INSTDIR" SetOverwrite ifnewer File "Silverlight.exe" ExecWait "$INSTDIRSilverlight.exe /q /doNotRequireDRMPrompt" File “TestOOB.xap" ExecWait '"$PROGRAMFILESMicrosoft Silverlightsllauncher.exe" /install:"$INSTDIRTestOOB.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)%Microsoft Silverlightsllauncher.exe" ) else ( ::We're on 32-bit set sllauncherlocation="%ProgramFiles%Microsoft Silverlightsllauncher.exe" ) :: run SL %sllauncherlocation% /overwrite /emulate:“TestOOB.xap" /origin:"http://blabla/TestOOB.xap"
  • 16. Мои документы 我的文件 My Eigene Documents Dateien Mes docum ents Documents Мои Τα документы έγγραφά μου
  • 17. Batch Script User Folder Извлекаем правильный адрес директории “Мои документы” из реестра FOR /F "tokens=3 delims= " %%G IN ('REG QUERY "HKCUSoftwareMicrosoftWindowsCurrentVersionExp lorerShell Folders" /v "Personal"') DO (SET docsdir=%%G)
  • 18. Многоязычный интерфейс Добавление поддерживаемых культур в файл проекта <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(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. Многоязычный интерфейс Регистрация ресурса public class LocalizationResource : INotifyPropertyChanged { private static Localization.Strings resource = new Localization.Strings(); public Localization.Strings Strings { get { return resource; } set { OnPropertyChanged("Strings"); } } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } #endregion }
  • 23. Многоязычный интерфейс Переключение языка UI Thread.CurrentThread.CurrentUICulture = new CultureInfo("uk-UA"); ((LocalizationResource)Application.Current.Resources["Localizatio n"]).Strings = new MyApplication.Localization.Strings();
  • 24. COM Подключаем пространство имен using System.Runtime.InteropServices.Automation; Создаем файлы в любом месте на ПК using (dynamic fsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject")) { dynamic file = fsoCom.CreateTextFile(@"c:test.txt", true); file.WriteLine("Bloody Hell!"); file.WriteLine("Silverlight is writing to C:"); file.Close(); }
  • 25. COM Пиним приложение на панель задач using (dynamic ShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamic commonPrograms = ShellApplication.NameSpace(23); string allUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"Accessories"); 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 (dynamic ShellApplication = ComAutomationFactory.CreateObject("Shell.Application")) { dynamic commonPrograms = ShellApplication.NameSpace(11); string allUsersPath = commonPrograms.Self.Path; dynamic directory = ShellApplication.NameSpace(allUsersPath + @"Programs"); dynamic link = directory.ParseName(Deployment.Current.OutOfBrowserSettings.ShortName + ".lnk"); string OOBLink = link.Path; using (dynamic WShell = ComAutomationFactory.CreateObject("WScript.Shell")) { WShell.RegWrite(@"HKLMSoftwareMicrosoftWindowsCurrentVersionRun" + Deployment.Current.OutOfBrowserSettings.ShortName, OOBLink); MessageBox.Show("Please restart your machine and this application will load on startup."); }
  • 27. COM Работа с ODBC using (dynamic IDbConnection = ComAutomationFactory.CreateObject("ADODB.Connection")) using (dynamic IDbCommand = 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 /qn REBOOT=ReallySuppress INSTANCENAME="name" ADDLOCAL=ALL SECURITYMODE=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:AnyDirAnyFile.ext", @"c:AnyDirAnyFile2.ext", true); Exists bool exist = ComToolkit.IO.File.Exists(@"c:AnyDirAnyFile.ext"); WriteAllBytes string[] contents = //some lines of text... ComToolkit.IO.File.WriteAllLines(@"c:AnyDirAnyFile.ext", bytes); Open AdoFileStream stream = ComToolkit.IO.File.Open(@"c:AnyDirAnyFile.ext", System.IO.FileMode.OpenOrCrea te, System.IO.FileAccess.ReadWrite); http://silverlightcom.codeplex.com/
  • 31. Silverlight COM Toolkit ComToolkit.Data string connectionString = @"Provider=SQLOLEDB;Data Source=servernamesqlexpress;Initial Catalog=databasename;User ID=username; Password=password"; using (var connection = new ComToolkit.Data.AdoConnection(connectionString)) { connection.Open(); var command = connection.CreateCommand(); command.CommandText = "SELECT MyColumn FROM MyTable"; var reader = command.ExecuteReader(); while (reader.Read()) { object byindex = reader[0]; object bystring = reader["MyColumn"]; // для работы с динамическими свойства reader должен быть объявлен как dynamic //object bydynamic = reader.MyColumn; }} http://silverlightcom.codeplex.com/
  • 32. Silverlight COM Toolkit Асинхронный ComToolkit.Data private ComToolkit.Data.AdoConnection connection; private void ExecuteReaderAsyncSample() { connection = new ComToolkit.Data.AdoConnection(connectionString); connection.Open(); var command = connection.CreateCommand(); command.CommandText = "SELECT MyColumn FROM MyTable"; command.ExecuteReaderCompleted += new EventHandler<ComToolkit.Data.ExecuteReaderCompletedEventArgs>(command_Ex ecuteReaderCompleted); command.ExecuteReaderAsync(); } void command_ExecuteReaderCompleted(object sender, ComToolkit.Data.ExecuteReaderCompletedEventArgs e) { //TODO: обрабатываем результат } http://silverlightcom.codeplex.com/
  • 33. Работа с документами PDF XPS Desktop Microsoft Application Office HTML
  • 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")) { int wdFormatWebArchive = 9; // MHT fileformat int wdDoNotSaveChanges = 0; // WdSaveOptions do not save value using (dynamic document = word.Documents.Open(tempDoc)) { document.SaveAs("C:t.doc", ref wdFormatWebArchive); } word.Quit(ref wdDoNotSaveChanges); }
  • 39. События Office Пример обработки Word документа dynamic word = AutomationFactory.CreateObject("Word.Application"); word.Visible = true; AutomationEvent searchEvent = AutomationFactory.GetEvent(word, "Quit"); searchEvent.EventRaised += (s, a) => { MessageBox.Show("Quit"); }; dynamic document = word.Documents.Open("C:test.doc");
  • 40. Потоки и BackgroundWorker var bw = new BackgroundWorker(); bw.WorkerReportsProgress = true; bw.DoWork += (s, a) => { var worker = sender as BackgroundWorker; 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(new Dictionary<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.Navigatio n" xmlns:uriMapper="clr- namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigat ion">
  • 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(new Uri("/INeedThisPage", UriKind.Relative));
  • 43. Управление окном Ограничение размера окна // App.xaml private void Application_Startup(object sender, StartupEventArgs e) { this.RootVisual = new MainPage(); 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 = new TextBlock(); block.Text = "Wassup!"; var nw = new NotificationWindow(); nw.Height = 50; nw.Width = 300; nw.Content = block; nw.Show(3000);
  • 45. Поздравляю, вы пережили этот доклад  Евгений Жарков eu.zharkov@gmail.com @2j2e Слушай подкаст 2Гига