Dienstag, 24. Januar 2006

hybride Anwendungen - Anwendungen für das .NET Framework und das .NET Compact Framework

Manchmal gibt es Anforderungen an Applikationen, welche im ersten Augenblick sich ganz einfach anhören. Dazu gehört, das eine Compact Framework (CF) Anwendung auch auf dem Desktop laufen soll. Doch was passiert, wenn diese Applikation nur eine Instanz haben darf? Okay, unter dem Pocket PC kein Thema, da funktioniert es eh so, dass nur eine Instanz läuft, und bei wiederholtem Auruf, die Anwendung in den Vordergrund geholt wird. Was ist aber mit dem Desktop, wenn es sich um die gleich Anwendung handelt und man nur die Methoden des CF zur Verfügung hat? Dann sind die üblichen Methoden mit Mutex etc. ganz schnell passé.

Eine passable Möglichkeit ist die Nutzung von "FindWindow" aus der user32.dll. Diese ist zwar nur auf dem Desktop verfügbar (beim PPC befindet sich die Funktion in der coredll.dll), was jedoch nicht weiter stört.

Über einen DLLImport ist die Funktion aus der user32.dll schnell eingebunden. Was passiert aber, wenn diese Funktion im PPC aufgerufen wird? Die Antwort ist einfach: GARNICHTS. Diese Funktion wird einfach übergangen Um es jedoch sauberer zu machen, sollte man über System.Environment die entsprechende Plattform zurückgeben lassen, und nur bei Bedarf per if/else ausführen lassen.

Über diese kleine Hilfe ist es ganz schnell möglich, auch auf dem Desktop eine Applikation zu bauen, welche nur eine Instanz besitzt.

CF Applikationen auf dem Desktop debuggen

Auch dieses Phänomen kommt schnell auf, wenn man Hybrid-Applikationen baut, welche auf dem Desktop und PPC laufen müssen.
Oft ist es nötig, für diese Applikation zusätziche Implementationen zu schreiben, welche auf dem PPC garnicht ausgeführt werden. Wie nun also testen?

Hierbei gibt es einen kleinen Trick, welchen man anwenden kann. Man muss die Applikation ersteinmal als Debug kompilieren (STRG+SHIFT+B). Ein F5 bringt hier keinen weiter, da ansonsten die Anwendung deployed und auf dem Device ausgeführt wird. Stattdessen sollte die Applikation einen definierten Punkt haben, an der sie wartet (MessageBox, Hauptmaske o.ä.). Dann kann man sich eines kleinen Tricks behelfen: Über Debug->Prozesse... sucht man sich den zugehörigen Prozess aus, welchen man debuggen möchte. In diesem Fall unsere Applikation. Wenn nun der Debugger an die Applikation angehängt wurde, kann man, wie sonst auch gewohnt, die Applikation debuggen.

QTEK 8310 Debugging

Nachdem ich nun endlich mein Windows Mobile 5 Handy erhalten habe, wollte ich doch auch mal direkt ausprobieren, wie sich denn das Programmieren mit diesen Geräten gestaltet.
Ein beherztes "F5" im neuen Visual Studio 2005 brachte jedoch eine Fehlermeldung hoch, die besagt, dass es untersagt ist, RAPI Verbindungen über Active Sync zu nutzen.

Nach einigem Suchen fand ich heraus, dass es tatsächlich so war. Die Sicherheitseinstellungen durch den Hersteller erlaubten dies nicht.

Um diesen Misstand auszuräumen, musste hierzu die Policy diesbezüglich geändert werden. Doch diese lies sich mittels Provisioning auch nicht lösen, denn das zugehörige XML durfte aufgrund der Sicherheitseinstellungen nicht ausgeführt werden.

Hierzu der gefundene Text von Native Mobile:





When the first Windows Mobile 5 devices started to hit the market, some of my customers tested Data Port Wizard on them and found out that it would not work. There is a documented workaround on MSDN but one of my customers found a better way by setting a single registry value. As a matter of fact, setting HKLM\Security\Policies\Policies\00001001 to 1 will enable all RAPI activities on the device.

Setting this registry key corresponds to the following provisioning script:





"

Doch auch das Ändern der Registry mittels des Total Commander 2.0 for Windows Smartphone brachte nichts, da dieses nicht erlaubt war. Auch der Verweis auf das Unlocking brachte mich zuerst nicht weiter.

Dann aber entdeckte ich die Beschreibung in Bernt Lervik's Blogeintrag, welcher ein ähnliches Problem beschrieb.

Er benutzte einen Registryeditor der Firma HTC, welche das originale Gerät "Tornado" herstellt, was von QTEK als 8310 vertrieben wird. Dieser Editor war auch digital von HTC signiert, welches eine Änderung zuliess. Er nutzte es zum installieren von Zertifikaten für das direkte syncen per Active Sync mit Exchange.

Mit diesem Editor liessen sich die Registryeinstellungen, wie im o.g. Blogeintrag beschrieben ändern.

Hiernach folgte die Installation der zugehörigen Zertifikate (\Programme\Windows CE Tools\wce500\Windows Mobile 5.0 Smartphone SDK\Tools\SdkCerts.cab), sowie der beiden Provisioningfiles (die sich nun ausführen liessen, ohne mit einer Sicherheitsmeldung zu quittieren) SecurityOff.cpf aus dem Unterordner Securityconfiguration gefolgt von RapiAllowed.cpf aus dem Unterordner Rapisecurity.

Nach einem Neustart des Gerätes und einem erneuten Active Sync funktionierte dann auch das Deployment und Debugging. Auch liessen sich nun die Remote Tools des VS 2005 nutzen.

Doch VORSICHT:

Dieser Trick sollte wirklich nur für Entwicklungsgeräte genutzt werden, da hiermit auch für Dialer order sonstige Schadprogramme Tür und Tor geöffnet werden.
Für den Deploymentfall sollten andere Möglichkeiten in Betracht gezogen werden.