<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.windows.com/utility/feedstylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Windows Mobile 6 Developer Blog</title><link>http://blogs.windows.com/windows_phone/b/wmdev/default.aspx</link><description /><dc:language>en-US</dc:language><generator>7.x Production</generator><item><title>Drive App Downloads with Marketplace Deeplinking</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2010/03/25/drive-app-downloads-with-marketplace-deeplinking.aspx</link><pubDate>Thu, 25 Mar 2010 20:31:42 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:802288db-4345-4cc0-a25a-0058598b93f5</guid><dc:creator>Daniel Bouie</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;With this post we’re rolling out a new feature to help Windows Phone 6 developers market their applications: deeplinking with the new “Get It Now” Windows Phone &lt;a href="http://download.microsoft.com/download/5/C/4/5C4319CC-D2B6-44C8-9305-7F028ABCB107/WindowsPhoneGetItNow.zip"&gt;logo&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/1_5F00_1F4CEB6D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1" border="0" alt="1" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/1_5F00_thumb_5F00_7E5978C5.png" width="240" height="79" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;A Windows Phone 6 deeplink points users directly to your application details page on either the Marketplace website, or the Marketplace on-device client. When used with the new logo, deeplinking to the Marketplace website is perfect for email marketing, or for telling users who come to your website how to find your Windows Phone 6 apps. &lt;/p&gt;  &lt;p&gt;Deeplinking to the client is even more powerful because you can embed the link within an app.&amp;#160; When a user clicks on a client deeplink it will open the marketplace client directly to the details page of the linked application, giving you a great way to help users try new products, or to convert free trial downloads into paid transactions.&lt;/p&gt;  &lt;p&gt;Another great thing is that your deeplinks will always point to the latest published version of the linked apps, within your user’s home market. So, you won’t need to go back and change your deeplinks every time you publish an update.&amp;#160; Deeplinks are currently limited to applications within the user’s market; however we expect to roll-out cross-market deeplinking in the near future.&lt;/p&gt;  &lt;p&gt;Let’s take a closer look at how deeplinking works, starting with the web experience.&amp;#160; &lt;/p&gt;  &lt;p&gt;The first thing to do is download the new “Get It Now on Windows Phone” logo artwork and license agreement &lt;a href="http://download.microsoft.com/download/5/C/4/5C4319CC-D2B6-44C8-9305-7F028ABCB107/WindowsPhoneGetItNow.zip"&gt;here&lt;/a&gt;. You can use deeplinks without the artwork, but it’s free, easy to access, and comes in several different languages, so why not go ahead and download it?&lt;/p&gt;  &lt;p&gt;Now, let’s build a deeplink for a specific app. Deeplinking uses a parameter called Link ID, so let’s grab the Link ID for the app you want to link to.&amp;#160; You can find this within the Marketplace developer portal by following these steps:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/25_5F00_08AA9D26.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2[5]" border="0" alt="2[5]" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/25_5F00_thumb_5F00_0046C7CF.png" width="375" height="125" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;ol&gt;   &lt;li&gt;Sign into the portal at &lt;a href="http://developer.windowsphone.com"&gt;developer.windowsphone.com&lt;/a&gt; using your Windows Live ID and password. &lt;/li&gt;    &lt;li&gt;Click on the “Your apps” tab to open your dashboard. &lt;/li&gt;    &lt;li&gt;Click on View Product Details for any published app.&amp;#160; Alternatively, you could click on View Product Details from the settings drop-down menu on the Products view.&amp;#160; (You could also do this for apps pending certification, but the link won’t work properly until the app is published). &lt;/li&gt;    &lt;li&gt;Scroll down to the bottom of the product details page, and copy the 32-character Link ID listed under Additional Information. &lt;/li&gt; &lt;/ol&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/3_5F00_6CB9682D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="3" border="0" alt="3" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/3_5F00_thumb_5F00_131B4B79.png" width="296" height="67" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once you have the link, create a new URL of the format:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://marketplace.windowsphone.com/details.aspx?appId=LinkID"&gt;https://marketplace.windowsphone.com/details.aspx?appId=LinkID&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Link ID is the 32-character string copied in step 4.&amp;#160; Now, link to this URL in your app-specific marketing communications, using the “Get It Now” artwork&lt;/p&gt;  &lt;p&gt;That’s it.&amp;#160; When a user clicks on that link, they will go directly to the details page for your app on the Marketplace website.&amp;#160; It’s important to remember that while the Link ID will remain constant for any updates to an app, there may be different Link IDs for Standard and Professional apps.&amp;#160; So, if you have apps for both Standard and Professional devices, you’ll need to get the unique Link ID for each of those apps, and point your users to the different versions appropriately.&amp;#160; Also, if they are not already signed in with Windows Live ID, users will be reminded to do so before they can download or purchase the app from the Marketplace website.&lt;/p&gt;  &lt;p&gt;Now let’s take a look at deep linking on the on-device client.&amp;#160; First you’ll need to grab the 32-character Link ID by following steps 1-4 in the deeplinking for web instructions above.&amp;#160; Once you have the LinkID, the best way is to use it is to add a new button control to your app.&amp;#160; You can even use the “Get It Now” artwork as the visual for the button control, like we did in this demo app screenshot.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/4_5F00_248BAC51.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="4" border="0" alt="4" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/4_5F00_thumb_5F00_58BFD597.png" width="182" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once the control is placed, add an action to launch a process from the control using:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;System.Diagnostics.Process.Start(&amp;quot;\\Windows\\WMMarketplaceFullClient.exe&amp;quot;, &amp;quot;/appid:LinkID&amp;quot;);&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Where Link ID is the 32-character string you grabbed above.&lt;/p&gt;  &lt;p&gt;When the app is compiled, a click on the button control will open the Marketplace on-device client directly to the details page of the linked application, like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/5_5F00_4A1529B2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="5" border="0" alt="5" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/5_5F00_thumb_5F00_68EB9D90.png" width="180" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The final step is to submit the updated .cab file for certification testing via the Windows Phone developer portal.&amp;#160; You can do this as an update to the existing app, and remember, you can submit as many as nine free updates to each Marketplace application.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Just as with deeplinking on the web, the Link ID will remain constant for updates to an app, so you won’t need to change the control when you update the linked app.&amp;#160; You can use this feature to up-sell free trials to paid downloads, (which by the way is a great strategy for increasing revenue), or simply to help your users find other apps you think they’d like.&amp;#160; &lt;/p&gt;  &lt;p&gt;Whether you use the website version, or the client version, or both, deeplinking gives you a great way to tell users how to quickly and easily find, try, and buy your applications on the Windows Phone 6 Marketplace!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=536738&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Windows+phone/default.aspx">Windows phone</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Windows+Mobile+6-5/default.aspx">Windows Mobile 6.5</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Windows+Phone+6/default.aspx">Windows Phone 6</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Deeplinking/default.aspx">Deeplinking</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/6-x/default.aspx">6.x</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/marketplace/default.aspx">marketplace</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Windows+Marketplace+for+Mobile/default.aspx">Windows Marketplace for Mobile</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Deeplinks/default.aspx">Deeplinks</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Developer/default.aspx">Developer</category></item><item><title>Windows Marketplace for Mobile: Certification Testing, Hopper, and Multiple Screen Support</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2010/02/18/windows-marketplace-for-mobile-certification-testing-hopper-and-multiple-screen-support.aspx</link><pubDate>Thu, 18 Feb 2010 22:41:02 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:c31ddeaa-b5f8-412c-9546-dc9ded6d9d8b</guid><dc:creator>Mike Francis</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;You work very hard to develop, test, and market your Windows Mobile application. Failing &lt;a href="http://developer.windowsphone.com/Marketplace.aspx"&gt;Windows Marketplace for Mobile&lt;/a&gt; certification testing can be a frustrating experience, but it doesn’t have to be.&amp;#160; Failing certification costs a submission credit (or another $99 if you have exhausted your initial five credits), you have to correct and resubmit your application – likely not what you planned.&amp;#160; In this post, we’ll cover a few tips that should help you increase the first time pass rate and have your application published to the Marketplace sooner.&amp;#160; &lt;/p&gt;  &lt;h4&gt;TIP NUMBER ONE: Understand the Certification Requirements&lt;/h4&gt;  &lt;p&gt;As a Windows Marketplace for Mobile developer, you are notified via email when the &lt;a href="http://developer.windowsphone.com/resources/en-us/Application%20Submission%20Guidelines.pdf"&gt;Application Submission Requirements for Windows Marketplace for Mobile&lt;/a&gt; is updated. You can also check the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/mktplace/threads"&gt;Windows Marketplace for Mobile forum&lt;/a&gt; for important announcements including the availability of new requirements. You may be surprised the number of developers that attempt to pass certification testing without understanding the requirements. If you have any questions regarding the requirements, please post them in the very active &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/mktplace/threads"&gt;Windows Marketplace for Mobile forum&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;TIP NUMBER TWO: Run Hopper early and often&lt;/h4&gt;  &lt;p&gt;From the requirements document:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;1.17. Hopper Test        &lt;br /&gt;&lt;/strong&gt;The application must complete two hours of Microsoft’s Hopper test without exhibiting unpredictable behavior, hanging or crashing.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The more you run Hopper, the more confidence you will have in passing this requirement. While the requirement calls for two hours, a good benchmark is the number of hours your app runs without problems. Use this as a development metric. There is no reason your application can’t run for 20 hours or more. A suggested practice is to let your application run overnight and check it in the morning when coming into work. Ideally, Hopper and your app will still be running!&lt;/p&gt;  &lt;h4&gt;Use the correct version of Hopper&lt;/h4&gt;  &lt;p&gt;There are separate versions of Hopper for Standard and Professional. Make sure you are using the correct one for the device / emulator you are testing against. Also Hopper has been updated to support Windows Mobile 6.5. The correct version of Hopper can be downloaded &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=2a1e5c97-aede-4234-bc73-345475310942"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;h5&gt;Starting Hopper&lt;/h5&gt;  &lt;p&gt;Hopper is brain dead stupid. That is no knock against this stress testing tool. Hopper simply ‘taps’ and ‘types’ randomly into your application. It will stress your application like no user would in the real-world. It is great for exposing bugs that are not found during normal ad hoc testing. To ensure the device or your application is not hanging, it periodically pulls down the Start screen. It does not know anything about your application, in fact you have to artificially ‘force’ Hopper to tap and type into your application. This is done via a &lt;a href="http://msdn.microsoft.com/en-us/library/bb158517.aspx"&gt;Focus Application&lt;/a&gt;. The focus application periodically (the default is every 10 seconds), forces your application into the foreground. As a developer, you need to customize the Focus App for your application, changing the string constant that references to your EXE name and path. Starting Hopper and the Focus app (you don’t need to explicitly start your application, it will be started by the Focus App) can be tricky, since Hopper immediately starts tapping and typing when started, making it difficult to navigate to start the Focus App. There are a couple of solutions to this:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Use RapiStart to remotely start the Focus App (this will implicitly start your application) and then Hopper in sequence. You can download RapiStart here: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=74473FD6-1DCC-47AA-AB28-6A2B006EDFE9&amp;amp;displaylang=en"&gt;Windows Mobile Developer Power Toys&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Use the &lt;a href="http://managedfocusapp.codeplex.com/"&gt;Managed Focus App&lt;/a&gt;. This tool is hugely convenient in that you specify all of the dependencies for Hopper in a config file and then just start the one application – no building necessary! It will launch your application and Hopper for you. I recommend this tool with a big caveat as some developers have had problems (Hopper failing after less than 30 minutes) with it. It seems to activate applications differently than does the native focus app. I would recommend using the native focus app first to establish a baseline. Then use the Managed Focus App. They should behave exactly the same. If not, stick with the native Focus App.       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;h5&gt;Hopper is stressing your app, therefore your app may crash&lt;/h5&gt;  &lt;p&gt;Note that Hopper is a stress tool and as such, your application may crash during a Hopper run. This is a good thing in that Hopper is doing its job stressing your app. It is a good practice to run your application under the Visual Studio debugger when running Hopper. Especially when you are early in the development cycle. This way when your app crashes, the debugger will stop exactly where the crash is occurring. You can also inspect the state of your app to help determine the cause of the crash.&lt;/p&gt;  &lt;h5&gt;Hopper failure: Start menu dead&lt;/h5&gt;  &lt;p&gt;One of the more common Hopper failures (log files are stored in \testlog\hopper.log) is ‘Start menu dead’. See here for a good explanation and possible causes of this failure: &lt;a href="http://blogs.msdn.com/hegenderfer/archive/2008/03/07/hopper-start-menu-dead.aspx"&gt;Hopper: Start Menu Dead!&lt;/a&gt;. The &lt;a href="http://blogs.msdn.com/hopperx/default.aspx"&gt;Hopper blog&lt;/a&gt; is also a good source for tips on running Hopper; however the content is skewed more towards OEMs.&lt;/p&gt;  &lt;h4&gt;TIP NUMBER THREE: Adapt Your App&lt;/h4&gt;  &lt;p&gt;From the requirements document: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;1.13. Multiple Device Support&lt;/strong&gt;       &lt;br /&gt;Developers must identify the required device functionality during the Windows Marketplace submission process. Applications must have the ability to run on multiple Windows Mobile device platforms, for example, multiple Standard or multiple Professional devices. Although not recommended, applications can support a limited number of Windows Mobile devices.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h5&gt;Screen Rotation&lt;/h5&gt;  &lt;p&gt;While not previously stated explicitly, this requirement also includes the proper handling of screen rotation. Just about every Windows Mobile Professional device now supports dynamic rotation. Typically this is triggered when sliding out an on-device keyboard or titling the device. &lt;/p&gt;  &lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/windowsmobile/bb264320.aspx"&gt;Adapt Your App&lt;/a&gt; section in the &lt;a href="http://msdn.microsoft.com/en-us/windowsmobile/default.aspx"&gt;Windows Mobile Developer center&lt;/a&gt; is a great resource for information on how to ensure your application properly adapts to different screen orientations, sizes, and DPIs. &lt;/p&gt;  &lt;p&gt;When changing orientation the OS will send your application a size event. Make sure you are taking action on this event: OnSize (if a managed) or WM_SIZE (for native code). For example, you may need to reposition some of your user interface elements. For a great in-depth article on this topic, check out: &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc546609.aspx"&gt;Adaptable Apps For Windows Mobile&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Test, Test, and Test again&lt;/h5&gt;  &lt;p&gt;Take advantage of the plethora of emulators that are included with the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en"&gt;SDKs&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c0213f68-2e01-4e5c-a8b2-35e081dcf1ca&amp;amp;displaylang=en"&gt;DTKs&lt;/a&gt;. The emulators support screen rotation (press the Calendar button) and come in multiple DPI and screen sizes. See here for a blog post on how to automate this process: &lt;a href="http://blogs.msdn.com/mikefrancis/archive/2007/12/10/powershell-and-quick-ui-check-for-wm-applications.aspx"&gt;PowerShell and Quick UI Check for WM Applications&lt;/a&gt;. Best case is to test on at least one device that ships in-market as some scenarios are difficult to test sufficiently within the emulator.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Need additional Help?&lt;/h4&gt;  &lt;p&gt;Hopefully these tips will help you avoid certification testing failures, if you need help with your specific test failure, use the Support link in the &lt;a href="https://developer.windowsphone.com/secure/dashboard/Dashboard.aspx"&gt;developer dashboard&lt;/a&gt; to create an email support request. Just be sure to include all identifying information regarding your application including the product id. The Marketplace certification team will respond within 48-business hours.&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;p&gt;Mike&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=534125&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Adapt+Your+App/default.aspx">Adapt Your App</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/windowsmobile/default.aspx">windowsmobile</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Hopper/default.aspx">Hopper</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/marketplace/default.aspx">marketplace</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Developer/default.aspx">Developer</category></item><item><title>Marketplace Momentum</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2010/02/16/marketplace-momentum.aspx</link><pubDate>Tue, 16 Feb 2010 14:02:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:be0f2f26-e78e-4166-9274-b033c3301f28</guid><dc:creator>Todd Brix</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Being at this year’s Mobile World Congress in Barcelona has me feeling both excited and proud. I’m excited to show off Windows Phone 7 Series and eager to dig into the details with our developer community at events like GDC and MIX next month. MWC also marks the one year anniversary of the promise we made to deliver a new kind of application marketplace in Windows Marketplace for Mobile. I couldn’t be more proud of the marketplace that Microsoft, the developer community, and our MO partners established and am pleased to announce several new development tools and updates.&lt;/p&gt;  &lt;p&gt;For the past year we’ve been working to create a new kind of application marketplace; one that delivers quality applications and a great shopping experience, while offering developers a more direct opportunity to reach customers with clear guidance and insight into certification standards and processes. Marketplace has only been available for four months and in that time I have been pleased to hear from several of our partners about their apps taking off. Where some application stores optimize for high volume and low price, we reasoned that customers and developers alike would benefit from a marketplace that offered high quality certified applications that are priced and merchandised to reflect their value to customers. So far it’s working. For the last 4 months, while the average asking price of all paid apps is $6.26, the average app sales price on Marketplace is $5.36. This low delta between average asking and sales price reflects a high symmetry between perceived and actual value. To date, we feature more than 1245 applications from more than 1325 registered ISVs. &lt;/p&gt;  &lt;p&gt;In addition to helping developers reach customers and make money, we’ve continued to improve the predictability and speed at which we do vetting and certification. Since we launched in October, our average vetting time has dropped from 30 to 10 days and our average time to certify has dropped from 12 to less than 5 days with less variation.&lt;/p&gt;  &lt;p&gt;Some of the biggest beneficiaries of Windows Marketplace are the winners of our Race to Market Challenge, the contest launched last summer to see whose apps could generate the most downloads and revenue in the first 100 days. For months, ISVs competed for early access to a new market of Windows Phone customers … some may also have been motivated by the grand prize, a Microsoft Surface table. Well, we’re just passed the 100 day mark, and I’m pleased to announce today our winners who have combined great applications with effective marketing and pricing strategies to win! &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The winner for most downloaded app is Meon Lite from Manbolo. Manbolo did a great job of releasing early (3 days after the marketplace opened) and used a compelling free version of Meon to drive broad awareness and then converting interest into upsell sales of its full purchase product. Congratulations! Check out Meon Lite and download it now &lt;a href="http://marketplace.windowsphone.com/details.aspx?appSKU=bbb0f1c8-828c-456a-82fc-75e873bda155&amp;amp;retURL=/search.aspx%3Fkeywords%3DMeon%2520Lite"&gt;here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;The winner for highest value generated is SPB Mobile Shell from SPB Software. SPB executed its pricing strategy very well by setting a $29.99 price in the US that reflected its real value to optimize total revenue. Congratulations SPB Software! Check out Marketplace’s best selling application and download it now &lt;a href="http://marketplace.windowsphone.com/details.aspx?appSKU=8a0fa816-aa93-4613-8722-b53619b8d473&amp;amp;retURL=/search.aspx%3Fkeywords%3DSPB%2520Mobile%2520Shell"&gt;here&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As for the Marketplace service itself, over the next few days we will be rolling out several important updates to enhance the experience for both customers and developers.    &lt;br /&gt;&lt;i&gt;&lt;u&gt;       &lt;br /&gt;Customer experience improvements&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;World View:&lt;/b&gt; A new World View feature will allow Marketplace users to browse and purchase applications from a different geographical catalog. For example, a customer here in Barcelona could choose to browse the English US catalog, or a customer in Canada could browse the catalog from Japan. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Installation onto storage cards:&lt;/b&gt; Customers are downloading a lot of apps, sometimes more than the memory available on the phone. So, we are now enabling people to install applications downloaded from Marketplace onto storage card memory. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Better application discovery.&lt;/b&gt; As the selection of apps grows, we want to make sure customers can find the application they’re looking for and introduce new simple ways to discover apps they might be interested in. First we’ve added a smart search function that enables users to search for apps or games that include any of the terms included to describe the apps, so customers get more relevant search results on the phone or the web. Second, we’ve added an additional viewing option we call the Themed Showcase that organizes applications by genre, interest, seasonality, theme or even an ISV specific view for those ISVs with a lot of applications or games &lt;/li&gt;    &lt;li&gt;&lt;b&gt;New store opening.&lt;/b&gt; We’re also now opening Marketplace for commerce in Russia, enabling Windows phone users in one or the fastest growing Windows Phone markets to buy apps, and developers and ISVs based in Russia to submit them. Welcome! &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;For additional exciting announcements in the consumer space, be sure to check out Liz Sloan’s blog &lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2010/02/15/windows-phone-excitement.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;u&gt;Developer experience improvements&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Free app submissions to additional markets: &lt;/b&gt;ISVs will no longer have to pay a $10 fee for submitting applications to additional markets. Once an application has been certified for a primary market as part of the existing $99 submission fee, ISVs can now submit for free that same application to as many other catalogs as they want, as long as they meet the current &lt;a href="https://developer.windowsphone.com/resources/en-US/MarketplaceMarketValidationGuidelines.pdf"&gt;Market Validation guidelines&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Applications policy changes:&lt;/b&gt; We are also taking this opportunity to make some changes to the existing application acceptance policies, and are now allowing VoIP applications that use a carrier network, unless explicitly prohibited by a mobile operator. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Improved registration, submission and management process.&lt;/b&gt; We’ve welcomed and acted on a lot of feedback from ISVs on how we can improve things. We’ve listened, and fixed a lot of the problems and annoyances you’ve told us about to make it easier to register, submit applications for multiple markets, and simplify the update process. You’ll see them all over. Tell us what you think and keep the feedback coming &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’m also happy to share that we are introducing a Windows Mobile 6.5.3 Developer Toolkit (DTK) which includes support for a new generation of Windows Mobile 6.5 phones that include capacitive touch screens. For a quick summary of the differences between the SDK and the DTK, I encourage you to read &lt;a href="http://windowsteamblog.com/blogs/windowsphone/pages/sdk-dtk-drk-wtf.aspx"&gt;this blog&lt;/a&gt;. The DTK comes packed with some pretty cool new features you can add to your application like a Bing Map Control, Widget VS Integration, Bubble Tiles, Auto Dialog Layout, and more. I encourage you to download the DTK &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c0213f68-2e01-4e5c-a8b2-35e081dcf1ca"&gt;here&lt;/a&gt; and take advantage of some new tools and new features. &lt;/p&gt;  &lt;p&gt;Finally, I’d like to take this opportunity to tell you about a new twitter account &lt;a href="http://www.twitter.com/toddbrix"&gt;@toddbrix&lt;/a&gt;, I’ve set-up to more frequently share my thoughts on commercial, merchandising and marketing best practices, opportunities and ahead of the curve insight to make the most out of your investment on Windows Phone both now and with the upcoming release of Windows Phone Series 7. Speaking of which, I’d also encourage you to follow Charlie Kindel, &lt;a href="http://www.twitter.com/ckindel"&gt;@ckindel&lt;/a&gt; as he will be sharing more about the upcoming Windows Phone 7 Series development platform. We’ll also be sharing a lot more about both our development platform and marketplace service at &lt;a href="http://www.microsoft.com/events/mix/default.aspx"&gt;MIX10&lt;/a&gt; hope to see you there.&lt;/p&gt;  &lt;p&gt;We told you last year that we would deliver a new kind of application marketplace, and we told you in October that we’d continue to deliver a meaningful updates to Windows Phones and Windows Marketplace for Mobile. We are excited to stand true to our promises and look forward to an exciting year.&lt;/p&gt;  &lt;p&gt;Stay tuned, we’re just getting started!&lt;/p&gt;  &lt;p&gt;Todd Brix&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=533938&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Windows+phone/default.aspx">Windows phone</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Announcements/default.aspx">Announcements</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Developer/default.aspx">Developer</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Blog/default.aspx">Blog</category></item><item><title>Windows Phone 7 Series – Going Big for Developers at MIX10</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2010/02/15/windows-phone-7-series-going-big-for-developers-at-mix10.aspx</link><pubDate>Mon, 15 Feb 2010 14:01:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:0b852f09-4c1d-4770-bd39-08deadfe284a</guid><dc:creator>Eric Urban</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;In a companion &lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2010/02/15/windows-phone-7-series-show-and-tell.aspx"&gt;post on the Windows Phone Blog&lt;/a&gt;, we have unveiled the highly anticipated Windows Phone 7 Series. For the first time ever, we are bringing together Xbox LIVE games and the Zune music and video experience to phones. Developers are already speculating about the app platform and tools. All I can tell you is that we are going big at &lt;a href="http://www.microsoft.com/events/mix/default.aspx"&gt;MIX10&lt;/a&gt;, March 15-17. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/events/mix/default.aspx"&gt;&lt;img height="229" width="320" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/MIX10_5F00_24DC1222.png" alt="MIX10" border="0" title="MIX10" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;I will proudly say that we are about to launch a very compelling mobile development platform &amp;ndash; arguably the best in our history. Even if you can&amp;rsquo;t join us at MIX this year be sure to follow Charlie Kindel, &lt;a href="http://twitter.com/ckindel"&gt;@ckindel&lt;/a&gt; for regular updates on the developer story for Windows Phone.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;You can read the full Windows Phone 7 Series press release &lt;a href="http://www.microsoft.com/presspass/press/2010/feb10/02-15MWC10PR.mspx"&gt;here&lt;/a&gt;. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=533864&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>Windows Marketplace for Mobile: Advanced Anti-Piracy Protection</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2010/01/15/windows-marketplace-for-mobile-advanced-anti-piracy-protection.aspx</link><pubDate>Fri, 15 Jan 2010 23:16:52 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:573e0ca2-6d15-4575-9497-46cd2eb74c49</guid><dc:creator>Mike Francis</dc:creator><slash:comments>9</slash:comments><description>&lt;p&gt;If you are developing applications for Windows phone, you have probably read about the Standard and Advanced Anti-Piracy Protection available to developers to help protect your hard developed IP. If you haven’t done so yet, check out the Windows Marketplace anti-piracy model white paper available &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=7baaf9b9-bd1f-4a51-9d21-4a65dbbc8419"&gt;here&lt;/a&gt;. Advanced Anti-Piracy Protection (AAPP) is designed to thwart the illegitimate sharing of your Windows phone applications. Even if a hacker obtains the binaries from one device, AAPP will prevent that application from running on any other device. While Standard Anti-Piracy protection does not require any intervention by the developer, AAPP does require that you integrate code into your application. We will walk through how AAPP works, how you obtain the AAPP code from Microsoft and how to integrate the AAPP code into your application.&lt;/p&gt;  &lt;h4&gt;How Advanced Anti-Piracy Protection works&lt;/h4&gt;  &lt;p&gt;Installation Time: &lt;em&gt;The Marketplace Client installs a license, derived from the application id and the device id, into the registry. The license is protected using &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/RSA"&gt;&lt;em&gt;RSA&lt;/em&gt;&lt;/a&gt;&lt;em&gt; security.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Application Run Time: &lt;em&gt;The startup code (obtained from the &lt;a href="http://developer.windowsphone.com/Marketplace.aspx"&gt;Marketplace&lt;/a&gt; section of the &lt;a href="http://developer.windowsphone.com"&gt;Windows phone Developer Portal&lt;/a&gt;) in your application verifies that the license stored in the registry matches your application. You (the developer) has control over the error handling. You can choose to display an error and quit, shift into ‘demo’ mode, or do whatever you deem appropriate. &lt;/em&gt;&lt;/p&gt;  &lt;h4&gt;How to obtain the AAPP Code&lt;/h4&gt;  &lt;p&gt;Obtaining the AAPP code is part of the application submission process. You will see the following at Step 3 (Product Info). &lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/image6_5F00_197B8F5B.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/image6_5F00_thumb_5F00_18A32971.png" width="932" height="217" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Clicking on ‘&lt;strong&gt;Show Managed Code…’&lt;/strong&gt; we see the following code:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:55ae5e2d-ce96-444d-91d3-1c77ae986060" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; max-height: 500px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; System.Security.Cryptography;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;using&lt;/span&gt; System.Text;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// ....&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; m_certModulus = &lt;span style="color:#a31515"&gt;&amp;quot;a26T2aaMKaafWSaI5JOaaQ7...&amp;quot;&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; m_certExponent = &lt;span style="color:#a31515"&gt;&amp;quot;DUPQ&amp;quot;&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; m_appSku = &lt;span style="color:#a31515"&gt;&amp;quot;dddddddd-70e8-4b15-9c90-46fca72d6959&amp;quot;&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;[&lt;span style="color:#2b91af"&gt;DllImport&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;coredll.dll&amp;quot;&lt;/span&gt;)]&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;int&lt;/span&gt; GetDeviceUniqueID([&lt;span style="color:#2b91af"&gt;In&lt;/span&gt;, &lt;span style="color:#2b91af"&gt;Out&lt;/span&gt;] &lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[] appdata,&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;int&lt;/span&gt; cbApplictionData,&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;int&lt;/span&gt; dwDeviceIDVersion,&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    [&lt;span style="color:#2b91af"&gt;In&lt;/span&gt;, &lt;span style="color:#2b91af"&gt;Out&lt;/span&gt;] &lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[] deviceIDOuput,&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff"&gt;uint&lt;/span&gt; pcbDeviceIDOutput);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; Main()&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;//Pre-Initialization code&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#008000"&gt;// ....&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[] licenseBytes = &lt;/li&gt; &lt;li&gt;    Microsoft.Win32.Registry.CurrentUser.OpenSubKey(&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#a31515"&gt;&amp;quot;Security&amp;#92;&amp;#92;Software&amp;#92;&amp;#92;Microsoft&amp;#92;&amp;#92;Marketplace&amp;#92;&amp;#92;Licenses&amp;#92;&amp;#92;&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;    .GetValue(m_appSku) &lt;span style="color:#0000ff"&gt;as&lt;/span&gt; &lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[];&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; data = m_appSku.ToLower() + &lt;span style="color:#a31515"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + GetUniqueDeviceID();&lt;/li&gt; &lt;li&gt;RSACryptoServiceProvider rsa = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; RSACryptoServiceProvider();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;//Create a new instance of RSAParameters.&lt;/span&gt;&lt;/li&gt; &lt;li&gt;RSAParameters RSAKeyInfo = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; RSAParameters();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;//Set RSAKeyInfo to the public key values. &lt;/span&gt;&lt;/li&gt; &lt;li&gt;RSAKeyInfo.Modulus = Convert.FromBase64String(m_certModulus);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;RSAKeyInfo.Exponent = Convert.FromBase64String(m_certExponent);&lt;/li&gt; &lt;li&gt;rsa.ImportParameters(RSAKeyInfo);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[] bData = System.Text.Encoding.ASCII.GetBytes(data);&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;null&lt;/span&gt; == licenseBytes || &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    !rsa.VerifyData(bData, &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; SHA1CryptoServiceProvider(), &lt;/li&gt; &lt;li&gt;    licenseBytes))&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;    MessageBox.Show(&lt;span style="color:#a31515"&gt;&amp;quot;Could not verify signature&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;else&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;    MessageBox.Show(&lt;span style="color:#a31515"&gt;&amp;quot;License is valid!&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&lt;span style="color:#008000"&gt;// ...&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// Post-initialization code&lt;/span&gt;&lt;/li&gt; &lt;li&gt;Application.Run(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; Form1());&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff"&gt;string&lt;/span&gt; GetUniqueDeviceID()&lt;/li&gt; &lt;li&gt;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#008000"&gt;// Call the GetDeviceUniqueID&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[] appData = Encoding.Unicode.GetBytes(&lt;span style="color:#a31515"&gt;&amp;quot;Marketplace&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt; appDataSize = appData.Length;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[] outData = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[20];&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;uint&lt;/span&gt; outSize = 20;&lt;/li&gt; &lt;li&gt;GetDeviceUniqueID(appData, appDataSize, 1, outData, &lt;span style="color:#0000ff"&gt;out&lt;/span&gt; outSize);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;StringBuilder resultSB = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; StringBuilder();&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff"&gt;byte&lt;/span&gt; b &lt;span style="color:#0000ff"&gt;in&lt;/span&gt; outData)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;resultSB.Append(&lt;span style="color:#0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#a31515"&gt;&amp;quot;{0:x2}&amp;quot;&lt;/span&gt;, b));&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;return&lt;/span&gt; resultSB.ToString();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;Integrating AAPP Code into your Application&lt;/h4&gt;  &lt;p&gt;This code has all the basics you need to implement the Advanced Anti-Piracy Protection. However there are a few gaps that you need to fill-in. I’ve put together a sample (&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowsphone/HelloAAPP.zip"&gt;HelloAAPP&lt;/a&gt;) that has these issues worked out.&amp;#160; You can download it from &lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowsphone/HelloAAPP.zip"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The code provided by the portal does not catch NullReferenceException thrown by the Registry class if the license key cannot be found. This is most commonly caused by installing the CAB outside of the Marketplace client. This is because during installation, the Marketplace client installs the license into the registry. Most often you will see this during your own ad hoc testing. To help you avoid this error, in Debug mode, the sample installs a test license into the registry. Additionally the sample includes a handler for this exception. &lt;/li&gt;    &lt;li&gt;In the portal code, if the validation succeeds or fails, the application will still run. In most cases you will want to notify the user and exit. The sample displays an error message and the application exits following the users response. &lt;/li&gt;    &lt;li&gt;In the portal code, if the validation succeeds, the code will notify the user telling them so. This notification is probably not necessary in a real world scenario. The sample simply continues if the validation succeeds. Note that in the sample the same validation (VerifyData) is called in both Debug and Release modes. In Debug mode the test license is validated using the test key. In Release mode the real license is validated using the public key included in the developer portal code. &lt;/li&gt;    &lt;li&gt;In the portal code, the error message does not have any context. A (hopefully) clearer message “&lt;strong&gt;License verification failed. Please install via Windows Marketplace for Mobile.” &lt;/strong&gt;is used in the sample. &lt;/li&gt;    &lt;li&gt;In the portal code, there is no way to test the validation logic since there is currently no way to install a license. As mentioned above, the sample creates and uses a test license that tests the validation logic. This goal of the sample is to demonstrate a way to use a test license in Debug mode and a real license in Release mode with all other code being the same. &lt;/li&gt;    &lt;li&gt;The error message is not localized. In the sample, the message is localized in English and German (de-DE). &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Please let me know in the comments if there any other gaps in the AAPP code that you have had to fill. &lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;p&gt;Mike&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=531806&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/windowsmobile/default.aspx">windowsmobile</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/marketplace/default.aspx">marketplace</category></item><item><title>New Windows Mobile Developer Certificates</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2010/01/12/new-windows-mobile-developer-certificates.aspx</link><pubDate>Tue, 12 Jan 2010 19:43:52 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:ef2af3cd-8a16-46db-b287-13ff2186fce7</guid><dc:creator>Larry Lieberman</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;As of 12/31/2009 the test certificates that shipped with the Windows Mobile SDK expired. However, we’ve gone ahead and generated new certificates that you can drop in to rectify this problem.&lt;/p&gt;  &lt;p&gt;If you’re a developer you can put these certificates right into Visual Studio (or sign via command line). If you’re a tester, you can follow these &lt;a href="http://technet.microsoft.com/en-us/library/cc182301.aspx"&gt;instructions&lt;/a&gt; to create a provisioning file for a device, so that you don’t need Visual Studio to push certificates onto test platforms.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/WM65Certs.zip"&gt;Download new certificates here.&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=531644&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>Windows Marketplace for Mobile – a Worldwide Marketplace for Developers</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2009/11/18/windows-marketplace-for-mobile-a-worldwide-marketplace-for-developers.aspx</link><pubDate>Wed, 18 Nov 2009 11:35:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:68032c76-e4e6-4c1d-93ed-3b033316cd70</guid><dc:creator>Frank Prengel</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;Hello there, my name is &lt;a href="http://blogs.msdn.com/frankpr"&gt;Frank Prengel&lt;/a&gt;, and I&amp;rsquo;m a technical evangelist at Microsoft Germany, helping the Windows phone and Marketplace teams establish &lt;a href="http://marketplace.windowsphone.com/"&gt;Windows Marketplace for Mobile&lt;/a&gt; in my country. Since I work with the German developer &amp;amp; ISV community, let me share with you some thoughts from a local perspective &amp;ndash; they may help you develop for Marketplace, especially if you live outside the US. &lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s first remember that Windows Mobile has always had a very active developer community, and that it gives you freedom in how software is developed and distributed. There are more than 20,000 Windows Mobile applications today which you can get and install from Web sites, software portals, forums, etc. &amp;ndash; provided you are a tech savvy person, and you know how to do it. With Windows Mobile 6.5 we have begun addressing non-tech savvy consumers as well. This is exactly why we introduced Windows Marketplace for Mobile as an easy way for people to find and install additional software on their new Windows phones. &lt;/p&gt;
&lt;p&gt;If you are a developer, this means one thing for you: an &lt;i&gt;additional&lt;/i&gt; great opportunity to potentially reach millions of new customers. Windows Marketplace launched with commerce in 20 markets as well as developer registration support in 29 markets, more than any other app store at launch. It offers credit card as well as mobile operator billing, and self-serve refunds of certified apps. It now supports Windows Mobile 6 and 6.1 and even allows for browsing and purchasing apps from the PC, with over-the-air synchronization to the user&amp;rsquo;s Windows phone. If your goal is to expand your business or the reach of your software, you should take the opportunity to join. For more information on the recent Windows Marketplace updates, including availability on 6 and 6.1, accessibility to browse and purchase apps from the PC and antipiracy protection benefits for developers, check out Todd Brix&amp;rsquo;s blog post at the &lt;a href="http://windowsteamblog.com/blogs/wmdev/archive/2009/11/11/announcing-new-features-in-windows-marketplace-for-mobile.aspx"&gt;Windows Mobile Developer Blog&lt;/a&gt;, and Eric Nelson&amp;rsquo;s post at the &lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2009/11/16/windows-marketplace-for-windows-mobile-6-0-and-6-1.aspx"&gt;Windows Phone Blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As with every retail marketplace, there is a bit of administrative work involved. Windows Marketplace for Mobile is a new service and a fresh approach that improves frequently with feedback from the developers and ISVs we work with. We are committed to continually improving the entire experience as we learn more about developer and customer needs and behavior. (If you find that Marketplace is not the right distribution channel for your business model, after all, you can of course use any other channel, such as those mentioned above, as they continue to be available. Windows Mobile means freedom of choice.) &lt;/p&gt;
&lt;p&gt;If you are in the US, signing up and getting apps certified should be pretty straightforward by now. In other countries there may be additional steps related to the business and financial processes involved. There also is localization work to be done when you want to submit products to several markets, as the application needs to be localized in the proper language (including the screenshots and descriptions). If there are any questions during this process, your first support resource is the &lt;a href="http://developer.windowsphone.com/Help.aspx"&gt;Windows Marketplace help page&lt;/a&gt;. You can also use the contact form in your &lt;a href="http://developer.windowsphone.com/Marketplace.aspx"&gt;Windows Marketplace portal&lt;/a&gt;, and ask for help or information. Then, we have a &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/mktplace/"&gt;dedicated forum&lt;/a&gt; where team members try to answer your questions as quick as possible. &lt;/p&gt;
&lt;p&gt;Beyond all that, in some countries there are additional dedicated resources that you should know &amp;ndash; let me take Germany here as an example: We have a &lt;a href="http://blogs.msdn.com/windowsphone/"&gt;dedicated Windows phone blog&lt;/a&gt; with news and a contact form for questions, we have our &lt;a href="http://msdn.microsoft.com/de-de/windowsmobile/default.aspx"&gt;local Windows Mobile Developer Center&lt;/a&gt; on MSDN, a &lt;a href="http://twitter.com/windowsphone_de"&gt;Twitter channel&lt;/a&gt;, a &lt;a href="http://bit.ly/wm6dev"&gt;comprehensive introductory document&lt;/a&gt; on Windows Mobile development, a &lt;a href="http://www.microsoft.com/germany/msdn/webcasts/serien/MSDNWCS-0908-01.mspx"&gt;webcast series&lt;/a&gt; &amp;ndash; we even have an &lt;a href="http://bit.ly/mktwin"&gt;exciting local developer contest&lt;/a&gt; which complements the &lt;a href="http://www.mobilethisdeveloper.com/"&gt;global one&lt;/a&gt;! &lt;/p&gt;
&lt;p&gt;You see, there are a lot of great resources that should help you get started with Marketplace. Don&amp;rsquo;t miss this great opportunity to expand your mobile business. Good luck! &lt;/p&gt;
&lt;p&gt;Frank &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=528900&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/windowsmobile/default.aspx">windowsmobile</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/marketplace/default.aspx">marketplace</category></item><item><title>Announcing New Features in Windows Marketplace for Mobile</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2009/11/11/announcing-new-features-in-windows-marketplace-for-mobile.aspx</link><pubDate>Wed, 11 Nov 2009 21:47:58 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:6ff62ae1-92ba-42a5-9fcd-92e512722571</guid><dc:creator>Todd Brix</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;I’m pleased to introduce a few much anticipated upgrades for &lt;a href="http://marketplace.windowsphone.com/"&gt;Windows Marketplace for Mobile&lt;/a&gt; going live today. We introduced Windows Marketplace with the launch of Windows phones on October 6&lt;sup&gt;th &lt;/sup&gt;and promised a second wave of features in November. Today, we’re adding more advanced anti-piracy protection and an improved developer portal for our registered ISVs, as well as introducing PC based shopping and account management for Windows phone customers. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Developer portal improvements and stronger anti-piracy protection&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;We’ve been gathering input on what we can do to improve the developer experience and have made some subtle but important enhancements to the developer portal to enable easier uploading of images, greater insight into account status and several other refinements based on feedback from developers. Today’s update also provides more advanced anti-piracy protection. While the underlying technical changes will be transparent for customers, developers will now be able to take advantage of these new protections by following the steps outlined in this &lt;a href="http://download.microsoft.com/download/F/E/5/FE59BF29-C576-401A-A4C2-D583B5F92509/Windows%20Marketplace%20for%20Mobile%20Anti-Piracy%20White%20Paper.pdf"&gt;anti-piracy whitepaper&lt;/a&gt;. As always, updates to existing applications can be submitted for free. To learn more about developing applications for Windows phones, head over to the &lt;a href="http://developer.windowsphone.com/"&gt;Windows Mobile for Developers&lt;/a&gt; site.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Browse and buy applications from the PC      &lt;br /&gt;&lt;/b&gt;While we’ve heard great feedback on the Marketplace experience on Windows phones, sometimes people just want the benefits of a shopping on a PC. Starting today, Windows phone customers can browse, buy and download applications online at the Windows &lt;a href="http://marketplace.windowsphone.com/"&gt;Marketplace for Mobile site&lt;/a&gt;. The selected applications are delivered wirelessly to the customer’s Windows phone and install the next time the Windows Marketplace client runs on the device. This creates another way for customers to easily find and purchase applications and gives developers a whole new level of exposure.&lt;/p&gt;  &lt;p&gt;Marketplace has been extremely active and I couldn’t be happier with the reactions from both developers and customers. We’ve been open for just over one month and already we can see that there’s demand for an application marketplace that doesn’t compromise on quality or experience. I look forward to providing a more detailed update on Windows Marketplace for Mobile when we extend the service to Windows Mobile 6.0 and 6.1 customers later this month. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=528193&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>The Windows Marketplace for Mobile Client and your Setup code</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2009/10/29/the-windows-marketplace-for-mobile-client-and-your-setup-code.aspx</link><pubDate>Thu, 29 Oct 2009 19:17:45 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:8fc092e0-45d1-4e1f-b519-651d328b127d</guid><dc:creator>Mike Francis</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;The Windows Marketplace for Mobile client provides users a streamlined experience to purchase and install applications on their Windows Mobile 6.5 devices (&lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2009/09/30/windows-marketplace-update-countdown-to-launch.aspx"&gt;coming soon&lt;/a&gt; for 6.1, and 6.0). &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Markplace Client: Install in progress" border="0" alt="Markplace Client: Install in progress" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/installerprogress_5F00_thumb_5F00_700C2138.png" width="180" height="240" /&gt;&lt;/p&gt;  &lt;p&gt;As you will notice when installing applications, the user interface is different from the typical CAB file installation (see below) perhaps you are used to.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/NoMPClient_5F00_1A785256.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="No Marketplace Client" border="0" alt="No Marketplace Client" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/NoMPClient_5F00_thumb_5F00_3A272C1E.png" width="180" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It is very important that the Marketplace install experience be uniform and streamlined. To keep it this way, no custom UI (errors, prompts, informational messages, etc.) should be displayed during installation or uninstallation. &lt;/p&gt;  &lt;p&gt;If you absolutely must display custom UI, there are some things you should know about the Marketplace client.&lt;/p&gt;  &lt;p&gt;The Marketplace client achieves a streamlined experience by suppressing the normal user interface, displaying a client specific progress bar and providing feedback when the installation has completed. This can cause problems for applications that have custom prompts implemented in the &lt;a href="http://msdn.microsoft.com/en-us/library/aa924308.aspx"&gt;setup dll&lt;/a&gt;. For example, you may want to prompt the user to start your application after installation has completed. This is easily done by adding the appropriate &lt;a href="http://msdn.microsoft.com/en-us/library/aa926303.aspx"&gt;MessageBox&lt;/a&gt; prompt to the &lt;a href="http://msdn.microsoft.com/en-us/library/bb415364.aspx"&gt;Install_Init&lt;/a&gt; export of your setup dll. However, there can be problems with this. &lt;/p&gt;  &lt;p&gt;The foreground display of your MessageBox or other custom UI, depends on knowing the window handle of the calling process. When your application is installed with the Marketplace client, no window handle is passed to your setup DLL’s exported functions. This can cause your custom UI to not be displayed in the foreground. This causes confusion for the user since it looks like the installation is still running, but there is no UI feedback. The only recourse for the user is to use task manager to locate the prompt window and select it to bring it to the foreground. This is a very poor user experience.&amp;#160; &lt;/p&gt;  &lt;p&gt;You can resolve this by using the MB_TOPMOST | MB_SETFOREGROUND flags when calling &lt;a href="http://msdn.microsoft.com/en-us/library/aa926303.aspx"&gt;MessageBox&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/aa930455.aspx"&gt;WS_EX_TOPMOST&lt;/a&gt; when creating a window for custom UI.&lt;/p&gt;  &lt;p&gt;Have you tried the Marketplace client yet? No? Don’t have a &lt;a href="http://www.microsoft.com/windowsmobile/en-us/meet/wm65-upgrade.mspx"&gt;6.5 ROM update&lt;/a&gt; or device yet? No problem. Download the Windows Mobile 6.5 standalone emulator images &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=20686A1D-97A8-4F80-BC6A-AE010E085A6E&amp;amp;displaylang=en"&gt;here&lt;/a&gt;. These come with a fully functional Marketplace client you can download and install apps with.&lt;/p&gt;  &lt;p&gt;Hope this helps.&lt;/p&gt;  &lt;p&gt;Mike&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=527439&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/windowsmobile/default.aspx">windowsmobile</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/marketplace/default.aspx">marketplace</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/install/default.aspx">install</category></item><item><title>Widget Anatomy – Touch and D-Pad inputs, oh joy!</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2009/10/27/next-post-widget-anatomy-touch-and-d-pad-inputs-oh-joy.aspx</link><pubDate>Wed, 28 Oct 2009 01:00:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:04c86d9e-e006-40ca-8784-f069fb02709f</guid><dc:creator>Jorge Peraza</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This is fifth and final part of my Widget Anatomy series that described the ins and outs of the Widget Framework that shipped with windows mobile 6.5.&amp;#160; In this installment we will discuss the different ways a Widget can receive inputs from the user and how best respond to them.&lt;/p&gt;  &lt;h2&gt;First the easy one: Touch&lt;/h2&gt;  &lt;p&gt;Touch is the primary input for all our professional devices and it looks like they will be a significant percentage of our device offering.&amp;#160; Handling this is fairly easy since the browser engine translate the touch event into a mouse click which can be handled by using the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms536913(VS.85).aspx"&gt;onclick&lt;/a&gt; &lt;/strong&gt;event handler as shown in the following example:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;js/ImageSearch.js&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;SearchBox&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;input&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;SearchQuery&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;p&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;img&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;images/search.png&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;searchIcon&amp;quot;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;               &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;doSearch();&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;It is important to note that, since there is no “mouse” for widgets most of the other mouse related events like onmouseover, onmousemove, etc will not be triggered in a reliable enough way to use them.&lt;/p&gt;

&lt;h2&gt;Now the hard one: The Directional-Pad&lt;/h2&gt;

&lt;p&gt;I been making special emphasis to the fact that Widgets work seamless across all Windows Phones so, we need to ensure that the can be used correctly when the user interacts with it using the directional path.&lt;/p&gt;

&lt;p&gt;It is important to note that, unlike IE6, a The widget framework will respond to a D-Pad input event by moving the focus to the closed &lt;strong&gt;actionable&lt;/strong&gt; element in the direction of the user click.&amp;#160; This behavior is similar to the old pocketIE and among friends we call it “Link to Link navigation”.&lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;actionable &lt;/strong&gt;element is defined as any DOM element that can receive focus (Like a form field) or an element that implements its &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms536913(VS.85).aspx"&gt;onclick&lt;/a&gt; &lt;/strong&gt;event handler.&amp;#160; When an &lt;strong&gt;actionable&lt;/strong&gt; element gain focus the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms536934(VS.85).aspx"&gt;onfocus&lt;/a&gt; &lt;/strong&gt;even is triggered, the same way, the focus is moved away from the element the &lt;a href="http://msdn.microsoft.com/en-us/library/ms536909(VS.85).aspx"&gt;&lt;strong&gt;onblur&lt;/strong&gt;&lt;/a&gt; event is triggered.&amp;#160; Now we can easily use those events to show the user where the focus is since the Widget Framework does not automatically highlights the focused element.&amp;#160; We do this because we don’t want to inhibit the creativity of the widget creator to design his/her own focused highlight strategy.&lt;/p&gt;

&lt;p&gt;The only “little” extra detail is that all elements that can gain focus need to have the &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms534654(VS.85).aspx"&gt;tabindex&lt;/a&gt;&lt;/strong&gt; property defined (the value is not important).&amp;#160; This is easily forgotten but if not set, the focus and blur events &lt;strong&gt;will not trigger&lt;/strong&gt;, &lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; OnFocus(element) {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         element.style.backgroundColor = &lt;span style="color: #006080"&gt;&amp;quot;red&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; OnBlur(element) {&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;         element.style.backgroundColor = &lt;span style="color: #006080"&gt;&amp;quot;white&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onfocus&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;OnFocus(document.getElementById('one'))&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;span style="color: #ff0000"&gt;onblur&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;OnBlur(document.getElementById('one'))&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;alert(1)&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;span style="color: #ff0000"&gt;tabindex&lt;/span&gt;=&lt;span style="color: #ff0000"&gt;1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;one&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-size:medium:&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onfocus&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;OnFocus(document.getElementById('two'))&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;span style="color: #ff0000"&gt;onblur&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;OnBlur(document.getElementById('two'))&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;alert(2)&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;span style="color: #ff0000"&gt;tabindex&lt;/span&gt;=&lt;span style="color: #ff0000"&gt;2&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;two&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-size:medium;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In this example, we created two divs that can receive the input focus, you can move from one to the other using the D-Pad, the element that receives focus changes the color of its background to red.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/Screen05_5F00_17B7D7E1.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Screen05" border="0" alt="Screen05" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/Screen05_5F00_thumb_5F00_056F111F.png" width="184" height="244" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/Screen06_5F00_4BEC0127.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Screen06" border="0" alt="Screen06" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/Screen06_5F00_thumb_5F00_24B1B7F2.png" width="184" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Writing Windows Mobile applications is now as easy as writing a web page, and, by following some best practices your widget can be as functional and attractive as any other native application on the platform.&lt;/p&gt;

&lt;p&gt;This is the end of this blog series and since Windows Phones are now available on many countries, you should go get one and write many cool widgets for it.&amp;#160; Don’t forget to share the results with the world by uploading them to the &lt;a href="http://developer.windowsmobile.com/"&gt;marketplace&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Until next time&lt;/p&gt;

&lt;p&gt;Jorge Peraza&lt;/p&gt;

&lt;h2&gt;Widget anatomy series at glance&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2009/07/26/widget-anatomy-the-manifest.aspx"&gt;#1 The manifest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2009/09/02/widget-anatomy-the-keys-for-a-great-user-experience.aspx"&gt;#2 The keys for a great user experience&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2009/09/02/widget-anatomy-the-keys-for-a-great-user-experience.aspx"&gt;#3 Performance and battery life&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://windowsteamblog.com/blogs/wmdev/archive/2009/10/15/widget-anatomy-security-insights.aspx"&gt;#4 Security insights&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://windowsteamblog.com/blogs/wmdev/archive/2009/10/27/next-post-widget-anatomy-touch-and-d-pad-inputs-oh-joy.aspx"&gt;#5 Touch and D-Pad inputs, oh joy!&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=526630&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Widgets/default.aspx">Widgets</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/6-5/default.aspx">6.5</category></item><item><title>Widget Anatomy – Security Insights</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2009/10/15/widget-anatomy-security-insights.aspx</link><pubDate>Thu, 15 Oct 2009 22:45:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:82adbe96-0e27-494d-a6ca-68b35db298eb</guid><dc:creator>Jorge Peraza</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;Previous post: &lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2009/09/22/widget-anatomy-performance-and-battery-life-the-final-frontier.aspx"&gt;Widget Anatomy – Performance and battery life&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is part four of my &lt;strong&gt;Widget Anatomy&lt;/strong&gt; series which which will explain the ins and outs of the Widget Framework that is shipping as part of Windows Mobile 6.5.&amp;#160; In this installment I will discuss the Widget Framework’s security model..&lt;/p&gt;  &lt;h2&gt;Inside the sandbox – The Widget Framework security model&lt;/h2&gt;  &lt;p&gt;It is true, Widgets are executed inside a sandbox, and because of this, there are bounded to a rather strict security policy but can be summarized as follows:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Widgets can’t read files from the device nor can access the registry directly.&amp;#160; A notable exception are all files that are part of the Widget package itself. &lt;/li&gt;    &lt;li&gt;Cookies can be used as temporary storage but developers are encouraged to use the persistent storage API instead.&amp;#160;&amp;#160; Cookies, browser history and local cache are&amp;#160; isolated per widget and completely separated from the browser. &lt;/li&gt;    &lt;li&gt;Widgets can’t navigate their main frame to any URL with the exception of fragment inside itself.&amp;#160; You can use an iframe to open a web URL though. &lt;/li&gt;    &lt;li&gt;Widgets can navigate to the following specific purpose URIs &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;   &lt;table border="2" cellspacing="4" cellpadding="2" width="603"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="191"&gt;           &lt;p align="center"&gt;&lt;strong&gt;URI&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="193"&gt;           &lt;p align="center"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="199"&gt;           &lt;p align="center"&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="191"&gt;           &lt;p align="center"&gt;SMS:&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="193"&gt;Starts composing an SMS message addressed to the given phone number&lt;/td&gt;          &lt;td valign="top" width="199"&gt;sms:1111111111&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="191"&gt;           &lt;p align="center"&gt;mailto:&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="193"&gt;Starts composing a mail message using the specified parameters (Like destination, subject and body)&lt;/td&gt;          &lt;td valign="top" width="199"&gt;&lt;a href="mailto:test@test.com?subject=Hello?body=From%20Here"&gt;&lt;font color="#4295d1"&gt;mailto:test@test.com?subject=Hello?body=From%20Here&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="191"&gt;           &lt;p align="center"&gt;callto:&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="193"&gt;Initiates a voice call to the given number&lt;/td&gt;          &lt;td valign="top" width="199"&gt;callto:1111111111&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="191"&gt;           &lt;p align="center"&gt;tel:&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="193"&gt;Initiates a voice call to the given number&lt;/td&gt;          &lt;td valign="top" width="199"&gt;tel:1111111111&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="191"&gt;           &lt;p align="center"&gt;http:, https:&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="193"&gt;Opens the specified URI using the default browser.&lt;/td&gt;          &lt;td valign="top" width="199"&gt;&lt;a href="http://www.microsoft.com/"&gt;&lt;font color="#4295d1"&gt;http://www.microsoft.com&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&lt;font color="#4295d1"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;h2&gt;Widgets and the Marketplace&lt;/h2&gt;  &lt;p&gt;Windows Mobile 6.5 restricts distribution of Widgets to trusted sources only.&amp;#160; This means consumers will only be able to install widgets from the Marketplace and, on some cases, Mobile Operator stores directly.&amp;#160; This restriction was implemented because we don’t currently support digital signature verification for widget files which prevents users from being able to verify the origins and authenticity of any given widget.&amp;#160; This might seem a little restrictive but I believe it provides the right balance between security and flexibility, specially if you consider that there are ways to allow enthusiasts and developers to install widgets from non-trusted sources, as long as they acknowledge and understand the risks of doing so.&amp;#160; Use your best judgment :).&lt;/p&gt;  &lt;h2&gt;Other important security considerations&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;The local persistent storage is unencrypted, use caution when storing information that should be protected in clear text. &lt;/li&gt;    &lt;li&gt;The widget ID is sent to the server as part of the user agent string if you would like to use it on your server for any reason. &lt;/li&gt;    &lt;li&gt;Widget files are stored unencrypted on the device file system so anyone with device access can potentially read them. &lt;/li&gt;    &lt;li&gt;Cross domain data access is allowed, this is super important for widgets since they can be used to mash up data from multiple sources. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That’s it for now, feel free to comment about any other security related questions that were not covered.&lt;/p&gt;  &lt;p&gt;Next post: Widget Anatomy – Touch and D-Pad inputs, oh joy!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=526567&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/Widgets/default.aspx">Widgets</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/6-5/default.aspx">6.5</category></item><item><title>Marketplace Client, Your Applications, and Registry Keys</title><link>http://blogs.windows.com/windows_phone/b/wmdev/archive/2009/10/13/marketplace-client-your-applications-and-registry-keys.aspx</link><pubDate>Tue, 13 Oct 2009 00:25:42 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:6b84f3a5-6588-4412-a77e-3dbb58e1ff9c</guid><dc:creator>Mike Francis</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;a href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/marketplaceSmall_5F00_2300CF78.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 15px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="marketplaceSmall" border="0" alt="marketplaceSmall" align="left" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/wmdev/marketplaceSmall_5F00_thumb_5F00_74A749CA.jpg" width="79" height="93" /&gt;&lt;/a&gt; The Windows Marketplace for Mobile is off to a great start since its release October 6th. One issue that has tripped up a few developers submitting their applications has been the use of internal registry keys used to determine the location of the application. Some clever developers have discovered that there is a list of installed applications stored in the registry under: HKEY_LOCAL_MACHINE\Software\Apps. Under the application name, you will find the directory in which the application has been installed. For example:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:d9a85ae6-e1bb-43a4-a773-ea1f48c88905" class="wlWriterSmartContent"&gt;   &lt;pre class="brush: text"&gt;HKEY_LOCAL_MACHINE\Software\Apps\Company Application Name
InstallDir=”\Program Files\Application Name”&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;a similar list can be found here:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:0d14cc11-ab2e-483a-bbb7-5688c735f2e3" class="wlWriterSmartContent"&gt;
  &lt;pre class="brush: text"&gt;[HKEY_LOCAL_MACHINE\Security\AppInstall\Company Application Name]
InstallDir=”\Program Files\Application Name”&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Since Windows Mobile does not support the concept of a current working directory, this has been one way to determine where the EXE is running from. A better approach, that is not dependant on these registry keys,&amp;#160; uses the following code (See Chistec’s blog &lt;a href="http://www.christec.co.nz/blog/archives/date/2008/12" target="_blank"&gt;post&lt;/a&gt;):&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:44221636-4382-42c2-9fdb-96544b2c52d4" class="wlWriterSmartContent"&gt;
  &lt;pre class="brush: cpp"&gt;GetModuleFileName(GetModuleHandle(NULL), pszFullPath, MAX_PATH); &lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;For managed code (See Chistec’s blog &lt;a href="http://www.christec.co.nz/blog/archives/201" target="_blank"&gt;post&lt;/a&gt;):&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Reflection;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private string &lt;/span&gt;GetApplicationExe()
{
  &lt;span style="color: green"&gt;// Determine the full path to the application executable
  &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;Assembly.GetExecutingAssembly().GetName().CodeBase;
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;You can then parse out the application path from the returned file name.&lt;/p&gt;

&lt;p&gt;So what is wrong with using these undocumented registry keys? When your application is installed by the Marketplace client, it creates these registry keys, but not with the names you would expect. Therefore, if your application is relying on any of these keys, if will fail to find them, because they will not exist.&amp;#160; This has tripped up a few developers because this issue does not surface unless you install the application after it has gone through the Marketplace ingestion process. (The processing of your application after it has passed certification testing.) &lt;/p&gt;

&lt;p&gt;To summarize, if you need to get the directory in which it was your application was installed, use either the native or managed APIs above. Also, make sure you are not using either of these undocumented registry keys.&lt;/p&gt;

&lt;p&gt;Thanks,&lt;/p&gt;

&lt;p&gt;Mike&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.windows.com/aggbug.aspx?PostID=526468&amp;AppID=5380&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/registry/default.aspx">registry</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/windowsmobile/default.aspx">windowsmobile</category><category domain="http://blogs.windows.com/windows_phone/b/wmdev/archive/tags/marketplace/default.aspx">marketplace</category></item></channel></rss>