Vývojářský blog Ondřeje Linharta

  Poslední články
  Období

RSS Feed RSS Feed

.NET Tips   2D   3D   Aplikace   ASP.NET   C#   C++   HTML+CSS   Internet   Javascript   Office   Silverlight   SQL   VB.NET   VB6   VbNet.cz   Vista   VS   Život, vesmír a vůbec   Všechny články

My.Settings u mobilních aplikací

Při vývoji mobilních aplikací (aplikace pro Windows Mobile 5.x, 6.x nebo Windows CE) určitě narazíte na to, že zcela chybí podpora pro My.Settings - Visual Studiem (Visual Basicem) vytvořený kód pro přístup ke konfiguračním hodnotám vizuálně naklikaným ve vlastnostech projektu. Důvod proč to u mobilních aplikací není nechápu, stejně jako chybějící My.Application.Info, ze kterého jsou přístupné často používané položky jako např. ProductName (používám jako text záhlaví TaskDialogů/MessageBoxů).

Řešením je napsat jednoduchý modul a pro přístup ke konfiguračnímu XML souboru použít Smart Devices Framework, nepostradatelný soubor knihoven pro mobilní vývojáře. Konfigurační soubor je nejlepší pojmenovat stejně jako u desktopových aplikací (*.exe.config) a umístit ho do složky s programem. Vzhledem k tomu, že u mobilních Windows je pouze jeden uživatelský účet, nemá smysl řešit konfigurační hodnoty specifické pro jednotlivé uživatele. Bude pouze jeden konfigurační soubor pro celou aplikaci, ale narozdíl od desktopových aplikací může být i pro zápis (neřeší se ACL u složky Program Files). Formát konfiguračního souboru je téměř identický s desktopovou verzí, ale drobné odlišnosti tam jsou.

Ukázkový SmartDeviceApplication1.exe.config:

<?xml version='1.0' encoding='utf-8'?>
<SettingsFile>
  <SettingsGroups>
    <group name='Ftp' />
  </SettingsGroups>
  <Ftp>
    <Host>
      <Type>System.String</Type>
      <Value>169.254.0.2</Value>
    </Host>
    <Port>
      <Type>System.Int32</Type>
      <Value>22</Value>
    </Port>
  </Ftp>
</SettingsFile>

[Pokračování článku]

Datum: 28. 1. 2012 15:26
Diskuse: 1
Hodnocení: Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5     Zobrazeno: 79x

Kategorie: VB.NET, Aplikace        

Nástroj pro sledování stavu nabití baterie

Opět jsem měl trochu volného času a tak jsem se rozhodl napsat aplikaci, která by sledovala stav nabití baterie u notebooků nebo tabletů a zapisovala jej do protokolu. Bylo to hlavně z důvodu, že jsem chtěl znát přesnou výdrž baterie při běžném provozu v různých profilech napájení (Rovnováha, Úsporný režim) u mého tabletu Acer ICONIA TAB W500. Aplikace samozřejmě funguje i na jakémkoliv jiném tabletu nebo notebooku se systémem Windows.

Původně jsem jako cílové úložiště událostí zvažoval soubor CSV uložený ve složce s přístupem pro zápis pro všechny uživatele, ale nakonec jsem zvolil mnohem lepší protokol událostí systému Windows, který umožňuje události filtrovat, exportovat do běžných formátů a prohlížet na vzdáleném počítači. Už od začátku bylo jasné, že aplikace musí být řešena jako služba z důvodu běhu i bez přihlášeného uživatele.

Během vývoje jsem narazil na mnoho nečekaných problémů, kromě nepohodlného ladění, které jsem vyřešil takto to byly hlavně potíže s účtem pro přihlášení služby. Většině služeb by měl stačit účet LocalService s omezeným oprávněním, ale během ladění služby docházelo k tolika bezpečnostním vyjímkám, jejichž původ se mi nechtělo řešit, že jsem nakonec zvolil bezproblémový LocalSystem. Další problém, se kterým jsem strávil dost času byl fakt, že pro příjem událostí ohledně napájení a řízení spotřeby je nutné, aby v aplikaci běžela smyčka zpráv, kterou služby standardně nemají. Podle MSDN se to dá řešit výběrem účtu LocalSystem (Místní systémový účet) a zaškrtnutím možnosti Povolit službě používání plochy, jenže v takovém případě se při vzniku události vždy zobrazí systémově modální dialogové okno s potvrzením interakce služby, což samozřejmě nepřipadá v úvahu. Zkusil jsem tedy spustit smyčku zpráv ručně pomocí Application.Run bez parametru s oknem, což opět nevedlo k žádnému výsledku (události prostě nenastávaly, přičemž stejný kód ve Windows Forms aplikaci fungoval bez problémů). Nakonec bylo nutné podle příkladu na MSDN vytvořit “dummy” prázdné okno, do kterého jsem umístil samotný kód pro sledování a zápis do protokolu událostí a také se přímo v něm napojují obslužné metody na systémové události. Samotný Framework má v sobě třídy a události týkající se napájení (Microsoft.Win32.SystemEvents.PowerModeChanged), ale použil jsem raději Windows API Code Pack, který má v tomto směru daleko větší možnosti (např. vyvolání události při změně schématu napájení).

Služba je velmi jednoduchá a funguje tak, že se do protokolu zapíše událost vždy když: Napájení ze sítě je odpojeno nebo připojeno, dojde ke změně schématu napájení, baterie je plně nabita, baterie dosáhla kritické hodnoty nabití (kritická hodnota nabití baterie v procentech je nastavitelná v konfiguračním souboru), nebo byl počítač převeden/probuzen z/do režimu spánku. Z výsledných záznamů v protokolu událostí se pak dá velmi snadno vypočítat přesná výdrž baterie v různých režimech.

Aplikaci včetně zdrojového kódu můžete stahovat zde, instalace a odinstalace služby se provádí dávkovými soubory Install.cmd (který zároveň spustí službu) a Uninstall.cmd (který v případě potřeby zastaví službu) ve složce Release. V projektu pochopitelně nedistribuji svůj podepisovací klíč Ondřej Linhart.snk, takže proveďte příslušné změny, pokud budete chtít zkompilovat sami.

[Pokračování článku]

Datum: 11. 1. 2012 17:00
Diskuse: 0
Hodnocení: Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5     Zobrazeno: 334x

Kategorie: VB.NET, Aplikace        

Usnadnění ladění služeb (Windows Service)

Služba (Windows Service) je speciální typ aplikace, která v systému může běžet na pozadí bez nutnosti přihlášení uživatele (běžné aplikace běží v relaci přihlášeného uživatele a dědí jeho přístupová oprávnění, služby obvykle běží pod speciálním systémovým účtem s omezenými oprávněními).

Pokud jste někdy psali službu ve Visual Studiu v některém z .NET jazyků, jistě víte, jaké je její ladění příšerný opruz. Běžně se při ladění postupuje tak, že po každé změně assembly služby se musí služba odregistrovat a opětovně zaregistrovat pomocí nástroje .NET Framework Installation Utility (InstallUtil.exe). Potom je možné službu ovládat pomocí správce služeb z Nástrojů pro správu.

K běžící službě se potom připojí z Visual Studia pomocí Tools/Attach to Process a dále se ladí běžným způsobem (zdrojové kódy služby samozřejmě musí být k dispozici). Uvědomte si, že toto je nutné opakovat při každé změně assembly, tedy např. po přidání nebo změně jediného řádku kódu. Krása a jednoduchost nastavení zarážek a stisknutí F5 u služeb standardně prostě není.

Hledal jsem poměrně dlouho, jak co nejvíce zjednodušit tento proces a nejlepší řešení (pro C#) jsem našel na CodeProjectu. Předem upozorňuji, že je nutné zasáhnout do vstupní metody Main v souboru *.Designer.*, což není příliš čisté řešení, ale je to to nejlepší co jsem našel. I v samotné metodě Main vytvořené Studiem je komentář, ze kterého lze vyčíst, že tam je možné provádět změny, takže to není taková prasárna, jako třeba měnit *.Designer.* u formulářů.

'Původní Service1.Designer.vb:
Shared Sub Main()
  Dim ServicesToRun() As System.ServiceProcess.ServiceBase

  ' More than one NT Service may run within the same process. To add
  ' another service to this process, change the following line to
  ' create a second service object. For example,
  '
  '   ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService}
  '
  ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1}

  System.ServiceProcess.ServiceBase.Run(ServicesToRun)
End Sub

'Upravený Service1.Designer.vb:
Shared Sub Main()
#If Not Debug Then
  Dim ServicesToRun() As System.ServiceProcess.ServiceBase
  ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1}
  System.ServiceProcess.ServiceBase.Run(ServicesToRun)
#Else
  Dim service As New Service1
  service.OnStart(Nothing)
#End If
End Sub

[Pokračování článku]

Datum: 8. 1. 2012 19:19
Diskuse: 3
Hodnocení: Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5     Zobrazeno: 289x

Kategorie: VB.NET, C#, Aplikace        

Jak se zbavit reklamy v aplikaci Windows Live Messenger

Konverzační program Windows Live Messenger, který používám a který mi plně vyhovuje má jednu nepříjemnou vlastnost. V hlavním okně aplikace se ve spodní části zobrazuje otravná blikající reklama, převážně na služby Windows Live a spřátelené produkty.

Reklamy se do tohoto okénka načítají dynamicky a při troše snahy lze vysondovat odkud. Potom lze jednoduše tyto adresy přesměrovat v souboru HOSTS na místní vyhrazenou adresu localhost a reklamám je konec. Nemusíte mít strach, že potom něco přestane fungovat, protože níže uvedené adresy slouží skutečně jen pro načítání reklam (maximálně se vám stejné reklamy nebudou zobrazovat na různých webech Microsoftu). Soubor HOSTS se nachází ve složce C:\Windows\system32\drivers\etc. Otevřít ho můžete v Poznámkovém bloku a na jeho konec přidejte následující text:

127.0.0.1 rad.msn.com
127.0.0.1 global.msads.net
127.0.0.1 rss.video.msn.com
127.0.0.1 ads1.msn.com
127.0.0.1 rad.live.com
127.0.0.1 specials.uk.msn.com

Výsledný efekt je okénko bez reklam, pouze s logem Windows Live Messengeru (Messenger je potřeba po úpravě souboru HOSTS restartovat).

Messenger

[Zobrazit článek]

Datum: 19. 11. 2011 22:35
Diskuse: 7
Hodnocení: Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5Hodnocení: 5/5     Zobrazeno: 432x

Kategorie: Aplikace        

Novinky ve Visual Studiu 2011 v kostce

Dnes byla oznámena Developer Preview verze Visual Studia 2011. Včetně Team Foundation Serveru 2011 (systém pro správu zdrojového kódu úzce spolupracující s VS) je k dispozici ke stažení pro předplatitele MSDN. Z oficiálních zdrojů lze vyčíst, že mezi hlavní novinky VS11 bude patřit:

  • Podpora Windows 8 (uživatelské rozhraní Metro)
  • Podpora HTML5 a CSS3 ve webových aplikacích
  • Prohlížení a základní modelování 3D objektů hodící se při vývoji her
  • Vizuální návrh shader programů (specializované programy pro grafické efekty běžící v GPU)
  • Pokročilá analýza duplicitního kódu, který je možné refaktorizovat do společných metod
  • Možnost žádosti o revizi kódu odpovědnými členy projektu (spolupráce s TFS)
  • Zjednodušené testování aplikací bez nutnosti předchozího plánování
  • .NET Framework 4.5 (asynchronní programování, MVC4, Windows Azure…)

Pro mne tedy vůbec žádný důvod k přechodu z verze 2008.

[Pokračování článku]

Datum: 14. 9. 2011 23:28
Diskuse: 14
Hodnocení: Hodnocení: 3,5/5Hodnocení: 3,5/5Hodnocení: 3,5/5Hodnocení: 3,5/5Hodnocení: 3,5/5     Zobrazeno: 1122x

Kategorie: VS        

 Strana 1 z 4 (článků: 17) 1234Další »»» 
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.