Tijdens het ontwikkelen van software op een WM5.0 apparaat kom je er vanzelf een keer achter.
Je applicatie moet verbinding maken met een server waarvoor je een certificaat nodig hebt om te kunnen synchroniseren (met Exchange bijvoorbeeld). Dit is tijdens de ontwikkeling natuurlijk mateloos irritant, aangezien je vaak op een test-server zit te werken en je daar geen duur certificaat op wilt, maar een test certificaat of iets dergelijks.
Deze wordt vaak niet goed gevalideerd door WM5.0, dus krijg je een foutmelding te zien in je applicatie, browser of ActiveSync.

Op PPC2002 en WM2003 pocket pc's had je nog de DisableCertCheck.exe applicatie http://www.microsoft.com/downloads/details.aspx?FamilyID=D88753B8-8B3A-4F1D-8E94-530A67614DF1&displaylang=en, maar die werkt niet meer op WM5.0.

Aangezien ik dit toch wilde uitschakelen ben ik op zoek gegaan naar een oplossing.

Wat blijkt? Je kunt gewoon zelf in het register gaan knoeien om de certificaten check uit te schakelen. Deze informatie heb ik hier gevonden http://winzenz.blogspot.com/2006/03/hacking-your-windows-mobile-50.html
Je moet gewoon in het register onder het pad
Hkey_Current_User\\Software\\Microsoft\\ActiveSync\\Partners
een value toevoegen.
Dit moet wel onder de value die van toepassing is op de server waarmee je wilt synchroniseren.
Onder die value voeg je de volgende DWORD key toe:

secure 0

Vanaf dat moment wordt het certificaat niet meer gecontroleerd en kun je weer lekker door gaan met synchroniseren.
Wanneer de controle weer van toepassing is kun je de waarde van secure gewoon weer wijzigen in 1 of de hele value verwijderen.

Zo blijkt wel weer dat registry hacking altijd moet gebeuren als je ontwikkelaar bent.

Nog iets leuks dat ik tegen kwam, is het draaien van Windows XP of Vista op je pocket pc.

Uiteraard draai je het OS niet zelf op de kleine apparaatjes, maar heeft het een skin die er op lijkt.
De theme's zijn al geschikt voor apparaten vanaf Windows Mobile 2002. Dus iedereen kan ze draaien.
http://www.downloadsquad.com/2007/06/11/how-to-make-windows-mobile-more-like-windows-mobile-minute/

Toch leuk

Wat ik vandaag tegen kwam tijdens het surfen.

Een pagina op de Microsoft website met alleen maar Windows Mobile webcasts. Erg handig en leuk voor de ontwikkelaars op dit medium.

Uiteraard moet je jezelf wel even registreren voordat de webcasts bekeken mogen worden, maar dat is het wel waard.

Zelf heb ik weinig tijd om ze te bekijken/beluisteren, maar ik vond het toch goed genoeg om te delen.

Bij deze dus:
http://www.microsoft.com/events/series/msdnmobility.mspx

Nog iets dat ik in de afgelopen weken nodig had was een HOSTS bestand op de pocket pc.

De eerder genoemde webservice werd namelijk op het interne netwerk bij ons op het werk geplaatst. Aangezien ik via ActiveSync m'n applicatie wilde debuggen en tegelijkertijd met de webservice wilde communiceren had ik een HOSTS bestand nodig.

Ja, ik weet dat je de webservice ook via het IP-adres kunt benaderen, dus http://192.1868.2.8/Webservice/Service.asmx.
Het vervelende is echter dat wanneer je een semi-release build maakt is dat je een zo representatief mogelijke build wilt maken.
Ik wilde dus de domeinnaam gebruiken die ook gebruikt wordt bij de klant van het product, dus bijvoorbeeld http://www.webservicedomein.nl/Webservice/Service.asmx.

Tegen beter weten in ging ik ongeveer 30 seconden zoeken naar een HOSTS bestand op de pocket pc. Deze bestaat niet, wat ik eigenlijk ook wel wist.
Omdat ik deze functionaliteit toch nodig had ben ik op zoek gegaan naar de oplossing.
Deze vond ik al redelijk snel via de Google discussiegroepen.
Op deze site http://windowsmobilepro.blogspot.com/2006/04/etchosts-file-equivalent-in-windows.html wordt namelijk uitgelegd hoe je zoiets voor elkaar kunt krijgen.
Via het register moet je een bepaalde host dus invoeren.

Aangezien ik niet alles over ga typen, hier een quote:

How to make "hosts" in Windows Mobile devices for name resolution?

Although there is no hosts file in Pocket PC or Smartphone's file-system, registry is the place to put such name-IP mappings. To achieve this, add a subkey to HKEY_LOCAL_MACHINE\\Comm\\Tcpip\\Hosts for each machine name that must be resolved, then add binary values for the IP address (value name "ipaddr") and expiration time (value name "expiretime"). The following shows the export of a key entry that resolves the name "hello" to IP address 161.163.165.169. Expiretime is a huge number, indicating no expiration. For the sole purpose of name resolution, expiretime is not strictly needed.


[HKEY_LOCAL_MACHINE\\Comm\\Tcpip\\Hosts\\hello]
"ipaddr"=hex:a1,a3,a5,a9
"ExpireTime"=hex:99,99,99,99,99,99,99



Zoals is te zien moet je het IP-adres als binaire waarde opgeven en de hostnaam als key.
Tot mijn verbazing heeft dit tot 2x toe ook goed bij mij gewerkt.
Na die 2x lukte het me niet meer. Waarschijnlijk heb ik toen zelf iets fout gedaan met de verbinding of iets dergelijks.
Ik kan me ook herinneren dat ik het IP-adres heb omgedraaid, vanwege big-endian en little-endian systemen met het idee dat het zou kunnen helpen.
Ook heb ik geprobeerd om het gehele IP-adres in te vullen in het 'decimale' gedeelte van een binair veld in de registry editor.

Ik weet niet meer zeker welke oplossing goed heeft gewerkt.
Mocht je het nodig hebben, dan kun je ze altijd allemaal even proberen en anders even verder zoeken op de discussiegroepen. Volgens mij wijzen ze allemaal naar de ge-quote oplossing, maar zelf een beetje zoeken kan natuurlijk ook geen kwaad.

Om gelijk ook maar een technische post te plaatsen, bij deze dan maar.

Enkele weken geleden was ik druk bezig met m'n mobiele applicatie. Hier was ik bezig om een webservice aan te spreken. Voorheen lukte dit al goed, dus ik had hier ook geen problemen verwacht.
Nu had ik wel problemen met een connectie te maken met de webservice. Dat vond ik nogal raar, maar ach, dat is Windows Mobile programmeren per definitie.

Dus ik een mooi groot try-catch blok maken, zodat ik een nuttige foutmelding kon krijgen. Eenmaal in de catch aangekomen kreeg ik als enige melding Could not find resource assembly.
Normaliter betekend dat dat de applicatie de webservice niet kan vinden. Nou, daar was ik dus ook van uit gegaan. Dus druk op zoek naar een oplossing. Via Pocket IE was de webservice namelijk wel bereikbaar. Ook via m'n laptop, dus het kon niet aan de webservice liggen of de bereikbaarheid daarvan.
Ook crashte de applicatie niet bij het maken van de webservice variabele. Dat deed die pas bij het aanroepen van een functie.
Aangezien er ook geen error-codes in de exception waren had ik niet echt een idee hoe ik hiervoor een oplossing kon bedenken.
Uiteindelijk maar even zoeken op Google.

Hier had ik na een tijdje een nuttige pagina gevonden van het .Net CF Team.
Bij deze de http://blogs.msdn.com/netcfteam/archive/2004/08/06/210232.aspx
Kort samengevat staat hier dat je deze foutmelding normaliter niet zou mogen krijgen. Deze foutmelding komt alleen maar als je geen goede foutafhandeling in je code hebt.
Ach ja, geef de developer de schuld.
Vanwege het feit dat Windows Mobile apparaten (nog) niet enorm veel geheugen beschikbaar hebben, hebben ze bij MS besloten om niet alle foutmeldingen op het apparaat te installeren. Mocht je die toch tot je beschikking willen hebben, dan moet je System_SR_[Language].CAB installeren. Waarbij [Language vaak enu zal zijn.

Wat nou precies de fout was die ik had weet ik niet meer, aangezien dit alweer een dikke maand is geleden.
Toch is het wel nuttige informatie om te delen naar mijn idee.