Blog Home  Home Feed your aggregator (RSS 2.0)  
Peter Nowaks Mobile Blog - Thursday, March 04, 2010
Windows Phone in the cloud
 
 Thursday, March 04, 2010

Durch meine Reisetätigkeiten bin ich in letzter Zeit nicht dazu gekommen, einige News zu veröffentlichen.

Daher hier 2 Informationen, die jedoch wichtig genug sind, um dennoch gepostet zu werden.

WM 6.5.3 DTK released
Nachdem das WM 6.5 SDK erschienen ist, welches jedoch zu Problemen führte, ist nun final das Windows Mobile 6.5.3 DTK erschienen. Neben einigen neuen Funktionen und Emulator Images sein noch ein wichtiger Hinweis gewährt: Leider funktionieren die neuen Emulator Images nicht mit dem Cellular Emulator, da hier leider die Fake RIL verwendet wurde. Um den Cellular Emulator zu verwenden, sollten somit die “alten” 6.x Emulator Images verwendet werden.

Das DTK ist hier, u.a. mit deutschen Emulator Images, zum Download erhältlich.

Neue Entwicklerzertifikate
Mit dem 31.12. 2009 sind die im Windows Mobile SDK enthaltenen Entwicklerzertifikate abgelaufen.
Mittlerweile sind neue Zertifikate verfügbar. Wo man diese erhält und wie man diese installiert, erfährt man hier.

Thursday, March 04, 2010 8:25:57 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [4]    |  Trackback

Recently I’ve stumbled into an error on updating Assemblies within the GAC. The error occured on updating Assemblies within the GAC through updating via new DLLs within a CAB File.

Obviously the files were registered properly, but during runtime MissingMethodExceptions were thrown.

Therefore I created a little (specific) tool, which cleans the Registry and GAC Assemblies .Let’s assume, we have the file MyAssembly.dll registered and use the file MyAssembly.gac:

using System;

using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;
using Microsoft.Win32;
using System.Windows.Forms;

namespace CleanRegistry
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                RegistryKey regMain = Registry.LocalMachine.OpenSubKey(@"\SOFTWARE\Microsoft\.NETCompactFramework\Installer\Assemblies", true);
                if (regMain == null)
                {
                    return;
                }
                RegistryKey regTemp = regMain.OpenSubKey(@"3rdParty", true);
                regTemp.DeleteSubKey(@"MyAssembly.gac", false);
                regTemp.Flush();
                regTemp.Close();

                regTemp = regMain.OpenSubKey(@"Global", true);
                foreach (string valueName in regTemp.GetValueNames())
                {
                    if (valueName.StartsWith("MyAssembly"))
                    {
                        regTemp.DeleteValue(valueName, false);
                    }
                }
                regTemp.Flush();
                regTemp.Close();

                regTemp = regMain.OpenSubKey(@"Reference", true);
                foreach (string subKeyName in regTemp.GetSubKeyNames())
                {
                    if (subKeyName.StartsWith("MyAssembly"))
                    {
                        regTemp.DeleteSubKeyTree(subKeyName);
                    }
                }
                regTemp.Flush();
                regTemp.Close();
                foreach (string filename in Directory.GetFiles(@"\Windows", "GAC_MyAssembly.*.dll"))
                {
                    FileInfo fi = new FileInfo(filename);
                    fi.Attributes = FileAttributes.Normal;
                    fi.Delete();
                }
                MessageBox.Show("The cleaning was successfull.", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
            }
            catch
            {
                MessageBox.Show("The cleaning was NOT successfull.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);

            }
        }
    }
}

 

If you want to know more about the .NET CF GAC, I propse you shall read these articles.

Thursday, March 04, 2010 8:16:38 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]    |  Trackback
 Monday, January 25, 2010
Nachdem einige MVPs das Wochenende verbrachten, indem Sie ihre Installationen korrigierten, nachdem die Installation des Windows Mobile 6.5 SDKs ein Durcheinander anrichtete, ist nun vorübergehend die Downloadseite nicht erreichbar.
Wie es aussieht möchte man sich anscheinend dem Problem widmen.

Monday, January 25, 2010 6:29:26 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]   .NET Compact Framework  |  Trackback
 Saturday, January 23, 2010
Normalerweise erfolgt vor einem Release eine neuen Software irgendeine Form einer Ankündigung. Nicht so beim Windows Mobile 6.5 SDK, welches seit dem 22.1.2010 als Download verfügbar ist.[Update] Mehrere MVPs verbrachten das Wochenende ihre Systeme neu aufzusetzten, nachdem die SDK Installation einige Fehler verursacht.[/Update]
Dieses scheint das bisher verfügbare DTK abzulösen.
Leider hatte ich noch keine Zeit es mir anzuschauen, so dass ich hier nur das wiedergeben kann, was ich bisher darüber im Netz gefunden habe.
Das SDK gibt es, wie bei früheren Versionen auch, klassisch für Classic (ohne Touchscreen) als auch für Professional (mit Touchscreen) Geräte.

Die einzelnen Downloadpakete stehe für die folgenden Sprachen zur Verfügung:
  • 0804 CHS Chinese Simplified
  • 0409 USA English
  • 0407 GER German
  • 040c FRA French
  • 0410 ITA Italian
  • 0c0a ESN Spanish
  • 0411 JPN Japanese
Neben zusätzliche Dokumentation, Beispielen und Headerfiles beinhaltet es noch die Emulatorimages, wie auch Erweiterungen für Visual Studio 2008. Visual Studio 2010 wird, wie bekannt, nicht unterstützt.
Eine der Visual Studio Erweiterungen ist für das Erstellen und Debuggen von Widgets. Nick Randolph, MVP für Device Application Development hat bereits einen Post zu diesem Thema veröffentlicht.

[Update]

Peter Foot berichtet via Facebook, dass es sich bei den Emulatorimages um Windows Mobile in der Version 6.5.3 handelt.
Darüber hinaus scheint es so, dass das Windows Mobile 6 SDK vor der Installation des neuen SDKs deinstalliert werden sollte. Der Grund hierfür ist, dass ansonsten alle anderen Plattformen und Emulator Images aus dem Visual Studio verschwinden. Auch sind diese dann anscheinend nicht mehr im Device Emulator Manager vorhanden.

Saturday, January 23, 2010 9:41:50 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [1]   .NET Compact Framework | Windows Mobile  |  Trackback
 Friday, January 15, 2010

Wie es zu erwarten war, ist die Entwicklecommunity hinsichtlich Multitouch aktiv. So gibt es mittlerweile eine .NET CF Bibliothek von einem Entwickler namens SciLor, wodurch eigene Anwendungen Multitouch unterstützen können.

Zwar ist die Entwicklung noch in den Kinderschuhen – ein erster Schritt ist jedoch getan.

Die Bibliothek, sowie ein paar Samples finden sich hier.

Friday, January 15, 2010 9:40:35 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]   .NET Compact Framework | .NET Compact Framework 3.5 | Windows Mobile  |  Trackback
 Thursday, January 14, 2010

Wer aktuell versucht mobile Anwendungen oder Installationsdateien mit den Zertifikaten des Windows Mobile SDKs zu signieren erlebt eine kleine böse Überraschung: Die Zertifikate sind nicht mehr gültig.
Der Grund hierfür liegt darin, dass die Zertifikate mit dem 31.12.2009 abgelaufen sind.

Aus diesem Grund wurden neue Zertifikate im Windows Mobile Blog zur Verfügung gestellt. Zu finden sind diese mit entsprechenden Installationsanleitungen hier: http://windowsteamblog.com/blogs/wmdev/archive/2010/01/12/new-windows-mobile-developer-certificates.aspx

Thursday, January 14, 2010 6:47:26 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]   .NET Compact Framework | .NET Compact Framework 3.5 | Visual Studio | Windows Mobile  |  Trackback
 Friday, January 01, 2010
Ich wünsche allen Lesern ein frohes neues Jahr und hoffe, daß alle die Feiertage gut überstanden haben. Auch ich habe diese Tage sehr genossen und im Kreise der Familie und Freunde mich gut erhohlt.

Den ersten Blogpost nehme ich daher auch zum Anlass meine Gedanken zum letztem Jahr und zum eben angefangenen zu äussern.

Was war

2009 war ein durchwachsenes Jahr.
Als ich zum ersten Mal einen Blick auf Windows Mobile 6.5 werfen durfte, war mein erster Gedanke "Das kann doch nicht deren Ernst sein...". Ich tat mich anfangs sehr schwer damit, das neue Windows Mobile zu mögen. Doch der Eindruck änderte sich.
Viele gehen heute immer noch davon aus, daß 6.5 der "iPhone Killer" ist. Das war jedoch nie der Gedanke bei dieser Version, weswegen ich mir für dieses Jahr wünsche, hierüber nicht mehr über dieses Thema diskutieren zu müssen, wie ich es beispielsweise letztes Jahr auf der TechEd in Berlin zu Genüge tat.
Es ging bei 6.5 immer darum, eine verbesserte Bedienung zu bieten; nach Möglichkeit ohne Stift und am Besten mit dem Daumen.
Der neue "Heute-Bildschirm" alias CHome hat dies als Erstes gut ermöglicht. Zwar kann man offiziell keine Plugins hierfür selbst erstellen, doch findet man im Internet einige Beschreibungen, wie es doch geht. Die neuen und größeren Menüs sind auch sehr sinnvoll.
Die Gesture API, mittlerweile auch durch diverse gute Wrapper im managed Code möglich, ermöglicht es mittels Programmierung auch, diese Schnittstelle in seiner eigenen Anwendung zu verwenden und sie somit aufzupepppen.
Da das System jedoch erst spät im Jahr zur Verfügung stand, wo Simon Hackfort, Patrick Getzmann und ich auch in unserer zugehörigen Webcastserie die Neuerungen vorgestellt haben, nahmen wir das erste Halbjahr eher dazu Best Practices in einer anderen Webcastserie darauf einzugehen.
Diejenigen, die nicht genug von der Enttwicklung für Windows Mobile und Windows Embedded CE bekommen konnten, trafen sich Anfang Dezember auf der MobileGuru konferenz. Hier wurden neben Einsteigerthemen auch Themen behandelt, welche selbst für mich neu waren und ich mir diese Session somit gerne angesehen habe.
Kurz zusammengefasst: 2009 war für mich neben Windows Mobile 6.5 das Jahr, wo es darum galt sich mit aktuellen Technologien zu beschäftigen, als auch zu schauen, was die anderen Hersteller aktuell machen.

Was wird

Anderen Systeme haben aufgeholt: Android scheint langsam erwachsen zu werden - das iPhone OS kann ztem Jahr auch endlich Copy & Paste. ;-)
Ich denke, dass bbei Android dieses Jahr noch viel gefeilt werden wird. Beim iPhone mag ich jedoch keine Prognose machen. Zwar hört man Gerüchte, dass dieses Jahr ein neues 4G Gerät kommen soll was wesentliche Hardwareverbesserungen haben soll doch sehe ich persönlich aktuell nicht, wohin es mit dem OS gehen soll. Es hat zwar Detailverbesserungen bis zur Version 3.0 erfahren und wurde aufpoliert. Doch auch das System wird alt - das Basisbetriebssystem hat sich gegenüber der ersten Version nur marginal verändert. Ich höre immer öfter, dass viele Personen im privatem Umfeld auf andere Geräte umsteigen; Firmen begreifen auch immer öfter, dass das iPhone im Consumerbereich angesiedelt ist und für den Businessbereich nur in einem bestimmten Umfang geeignet ist.
Viel interessanter finde ich da den Umstand, dass man seitens Microsoft nichts konkres zu einem Nachfolger hört. Es wird zwar mit Hochdruck daran gearbeitet und es soll riesig werden - mehr Informationen gibt es jedoch nicht.
Bleibt abzuwarten, wann und was man dazu hören wird.
Wer letztes Jahr nicht an der MobileGuru konferenz teilnehmen konnte, wird wahrscheinlich im 2. Halbjahr diesen Jahres eine Chance haben.

2010 hat jedoch bereits super angefangen. Ich freue mich sehr, dass es neben Torsten Weber und mir seit heute einen neuen Device Application Development MVP insbesondere für native Code in der DACH-Region gibt: Patrick Getzmann. Herzlichen Glückwunsch Patrick. Es freut mich sehr.

So viel zu meinem persönlichen Rückblick und einer kleinen Vorschau auf dieses Jahr.

Ich wünsche daher nochmal allen Lesern ein frohes neues Jahr und hoffe, dass wir alle dieses Jahr wieder interessantes erleben werden.
 

Friday, January 01, 2010 10:59:56 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]   Personal  |  Trackback
 Thursday, December 24, 2009
Sollte man die Weihnachtsgeschenke für seine Lieben bereits gekauft haben, so kommt man meist zum eher unangenehmen Teil: Dem Verpacken.
Dies gilt jedoch auch für Anwendungen, die auf einem mobilen Gerät installiert werden sollen. Hierfür gibt es das CAB-Datei Format.
 
Um eine entsprechende Installationsdatei zu erstellen, nehmen wir einmal an, dass wir die zu verpackenden Dateien unter c:\HelloWorld abgelegt haben.
Die Dateien, welche dort vorliegen müssen, sind die HelloWorld.exe, welche installiert werden soll, sowie die HelloWorld.inf Datei, welche die Informationen für den CabWizard vorbehält, um eine CAB-Datei erzeugen zu können.


Hier nun der Inhalt der INF-Datei dazu. Hierbei hat die Programmiersprache diesmal keine Relevanz:

[SOURCE FILE]
Name=CHelloWorld.cab
Path=C:\HelloWorld\HelloWorld.cab
AllowUninstall=TRUE

[Version]
Signature="$Chicago$"
CESignature="$Windows CE$"
Provider="Company"

[CEStrings]
AppName="HelloWorld"
InstallDir="%CE1%\CHelloWorld"

[CEDevice]
ProcessorType=0
VersionMin=0.0
VersionMax=0.0
BuildMin=0
BuildMax=0

[SourceDisksNames]
1=,Source1,,

[SourceDisksFiles]
"HelloWorld.exe"=1

[CopyFiles1]
"HelloWorld.exe",,,0x00000001

[DestinationDirs]
CopyFiles1=0,"%CE1%\HelloWorld"

[DefaultInstall]
CopyFiles=CopyFiles1


Wird nun auf der Kommandozeile der Befehl "c:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe" "Company HelloWorld2.inf" ausgeführt (Pfad ist natürlich hinsichtlich seinen Gegebenheiten anzupassen), so findet sich im entsprechenden Zielordner die CAB-Installationsdatei wieder.
Weitere Informationen zum CAB-Wizard erhalten Sie hier:http://msdn.microsoft.com/de-de/library/cc433670%28VS.71%29.aspx


Das war es mit dem Adventskalender für dieses Jahr und wünschen Ihnen ein frohes Fest.

Patrick & Peter

Thursday, December 24, 2009 9:34:40 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]   WMDevAdventskalender09  |  Trackback
 Wednesday, December 23, 2009
So kurz vor weihnachten sollte der Weihnachtsbaum hell leuchten. Warum auch nicht dann die LED des Bluetoothmoduls des Gerätes zum Blinken bringen?
Nichts einfacher als das, in dem man das Bluetooth Modul aktiviert.

Dabei gilt zu beachten, dass dieses Beispiel nur auf Geräten funktioniert, die den Microsoft Bluetooth Stack verwenden.

C++

#include "bthutil.h"
#pragma comment(lib, "Bthutil.lib")

...

DWORD dwMode = 0;
BthGetMode(&dwMode);
if(dwMode==BTH_POWER_OFF || dwMode==BTH_CONNECTABLE)
{
    BthSetMode(BTH_DISCOVERABLE);
}



C#

In C# ist es auch an dieser Stelle nötig, mittels P/Invoke auf die nötige DLL zu zu greifen, um auf die entsprechenden Informationen zu erhalten.
Somit hier das Snippet:

...
public enum RadioMode
{
    Off = 0,
    Connectable = 1,
    Discoverable = 2
}

static class Program
{
    [DllImport("BthUtil.dll")]
    private static extern int BthGetMode(out RadioMode dwMode);

    [DllImport("BthUtil.dll")]
    private static extern int BthSetMode(RadioMode dwMode);

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [MTAThread]
    static void Main()
    {
        RadioMode rm = RadioMode.Off;
        BthGetMode(out rm);
        if (rm == RadioMode.Off || rm== RadioMode.Connectable)
        {
            BthSetMode(RadioMode.Discoverable);   
        }
    }
}
...


Patrick & Peter

Wednesday, December 23, 2009 12:09:00 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]   WMDevAdventskalender09  |  Trackback
 Tuesday, December 22, 2009
In vielen Fenstern und Wohnungen findet man zur Weihnachtszeit eine ganze Menge an Lichterketten und sonstiger beleuchteter Weihnachtsdekoration.
Das manuelle Einschalten dieser vielen Lichterketten und Lämpchen kann eine zeitraubende Beschäftigung werden.
Gleiches gilt auch für Windows Mobile Applikationen die durchgehend laufen sollen. Wenn der Anwender diese Applikationen manuell starten muss dauert dies natürlich auch eine Weile.
Wäre es nicht angenehmer wenn dies automatisch geschehen würde?
Mit folgendem Codeschnipsel kann aus der eigenen Anwendung heraus, beispielsweise per Optionsdialog, eine Autostartverknüpfung angelegt werden.

C++

//Dies ist eigentlich das gleiche Schnipsel wie Türchen Nummer 8
//jedoch wird diesmal die CSIDL_STARTUP verwendet.
//Autostart Ordner auslesen
WCHAR szShortcutPath[MAX_PATH*2] = L"\0";
SHGetSpecialFolderPath(NULL,szShortcutPath,CSIDL_STARTUP,0);
wcscat(szShortcutPath,L"\\MeinShortcut.lnk");
//Modulnamen auslesen
WCHAR szModulePath[MAX_PATH*2] = L"\0";
GetModuleFileName(GetModuleHandle(NULL), szModulePath, MAX_PATH);
//Shortcut erstellen
SHCreateShortcut(szShortcutPath,szModulePath);



In C# ist es diesmal nicht notwendig P/Invoke zu nutzen, um an diese Informationen zu kommen. Die Klasse Environment hierfür reicht völlig.
Hier also das Snippet:

C#

...
[DllImport("coredll.dll")]
private static extern int SHCreateShortcut(StringBuilder szShortcut, StringBuilder szTarget);
...
[MTAThread]
static void Main()
{

   StringBuilder shortcut = new StringBuilder(System.Environment.GetFolderPath(Environment.SpecialFolder.Startup)+@"\MeinShortcut.lnk");
   StringBuilder target = new StringBuilder(@"\windows\calc.exe");
   SHCreateShortcut(shortcut, target);
}
...


Patrick & Peter

Tuesday, December 22, 2009 9:01:04 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]   WMDevAdventskalender09  |  Trackback
Copyright © 2010 Peter Nowak. All rights reserved.
DasBlog 'Portal' theme by Johnny Hughes.