<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8129276591833023317</id><updated>2025-07-15T12:16:49.987-07:00</updated><category term="Motorola"/><category term="MC3100 Series"/><category term="WT4000 Series"/><category term="Compact Framework"/><category term="Windows CE"/><category term="Wireless"/><category term="AppCenter"/><category term="Google Maps"/><category term="SPR 19400"/><category term="pinpoint2012"/><title type='text'>.Fret Developer</title><subtitle type='html'>Help and advice from problems I&#39;ve encountered as a .NET developer and IT leadership</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-3458183591922124250</id><published>2021-06-16T09:12:00.003-07:00</published><updated>2021-06-16T09:12:44.550-07:00</updated><title type='text'>Stay In your Lane, App Dev!</title><content type='html'>&lt;p&gt;There are few experiences in software development that irk me more than design decisions that make support or life for other application developers difficult. Decisions that seem &quot;sensible&quot; or make life a little easier for the application developer who is creating the solution with no regard for the user or other developers are common and can have lasting side effects and sleepless nights for others!&lt;/p&gt;

&lt;p&gt;One of the most irritating design decisions is when an application developer uses a concept not indended for their use case in their solution design. One example of this is HTTP response codes. When an application developer creates a web based API, the API response should be consumed by the calling application and interpreted there. Using HTTP response codes causes so many support headaches and is a misuse of the intended purpose.&lt;/p&gt;

&lt;p&gt;Consider this example:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;Calling system sends: GET https://site.com/GetWidget?WidgetID=1234

System responds: HTTP: 200 OK Content: Widget {ID : 1234, Description: Valid Widget}&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;But if we send an invalid widget:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;Calling system sends: GET https://site.com/GetWidget?WidgetID=1234XXX

System responds: HTTP: 404&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;In my opinion, this is a fine example of using something against it&#39;s intended purpose. It&#39;s misleading and you are assuming knowledge from the poor soul who has been called out at 3AM to diagnose an interface issue who simply thinks the application being called is not at the URL specified and it&#39;s totally inconsistent unless the ONLY exceptions your API is ever going to respond is unauthorised 403 or not found 404 - if you believe this then you have a better crystal ball than me. The inconsistency will come when you need to craft an application specific error that does not fit the HTTP spec. You will no doubt respond HTTP 200 with an error object response in those scenarios.&lt;/p&gt;

&lt;p&gt;HTTP 404 is for the web server&#39;s use to respond that the resource is not found. It is NOT for your application to respond that the requested data was not found in your application database. Similarly, unless your API handles authentication in HTTP (eg: HTTP basic authentication as per the HTTP specifications - NOT via your custom header) then please stop responding with a HTTP 403 when authentication fails. The latter request is less of a problem than the 404, admittedly, but let&#39;s keep application level responses in our applications and leave the HTTP handling to the web server.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/3458183591922124250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2021/06/stay-in-your-lane-app-dev.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/3458183591922124250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/3458183591922124250'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2021/06/stay-in-your-lane-app-dev.html' title='Stay In your Lane, App Dev!'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-2976292517626401107</id><published>2020-08-24T07:29:00.002-07:00</published><updated>2020-08-24T07:29:52.650-07:00</updated><title type='text'>Quick Tip: Forgotten Lock Screen Password / PIN / Pattern - Samsung Android</title><content type='html'>I encountered a user today who had managed to change their lock screen PIN and subsequently forgot it. This is usualyl a chore but recoverable via your Google account on most Android devices but Samsung appears to have it&#39;s own version of this. If you encounter someone with this problem, get them to login to their Samsung account on a desktop and click the &quot;Remote Unlock&quot; option - they can then use their Samsung account password to remotely unlock the device and remove the PIN / Pattern / Password completely from the phone.</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/2976292517626401107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2020/08/quick-tip-forgotten-lock-screen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/2976292517626401107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/2976292517626401107'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2020/08/quick-tip-forgotten-lock-screen.html' title='Quick Tip: Forgotten Lock Screen Password / PIN / Pattern - Samsung Android'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-1781216385440163948</id><published>2018-12-17T05:20:00.000-08:00</published><updated>2018-12-17T05:24:05.079-08:00</updated><title type='text'>The Least Sexy Part of Your Job</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;It’s fair to say IT doesn’t have many facets people would call “sexy” but there’s always the current buzzwords floating about the boardroom. The CIO / Technology Leader role naturally needs to understand these trends and ensure the board are fully briefed on any opportunities or risks that may arise from new and disruptive technologies. I’ve truly lost count of the times I’ve needed to explain blockchain to CxO level leaders (worryingly, some of these leaders were in tech leadership roles!) There’s one area of technology that I think is difficult to approach for funding or get people emotive about, but for me, it’s truly the engine room of any large enterprise; &lt;b&gt;Integration Hub&lt;/b&gt;.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;Take any large enterprise system and start the steps towards replacement and it’ll send a shiver down the spine of any IT project manager, leader or specialist. How many refresh or replacement projects have you seen go over budget, miss deadlines or even fail completely? Here’s where a well abstracted integration hub comes into its own.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;The simplest analogy for good abstraction comes from the concept of sending something through the mail. You, as a sender, need to adhere to certain rules – place it in a suitable package, ensure the address is present, has a postal code and pay whatever postage is necessary. As long as you adhere to these rules, the postal service will be able to route and deliver the mail. “Leaky abstraction” is the enemy here (arguably, the postal / zip code is an example of leaky abstraction but it’s a simple analogy most folks understand the concept of). Imagine if the postal service needed you to write the routing information on the package. If each and every time the package needed to pass through a sorting hub or delivery centre, you were expected to ensure that information was placed on the package. OK, a little more work I hear you say but you could probably handle it. But say you send 100 parcels a week to a remote location so, for speed, you pre-printed a load of labels. Then the postal service changed their routing. This is where the leak becomes damaging – because decisions about what should happen within the system have been made from the outside, the core of the system has effectively lost control. It will perform poorly through no real fault of its own.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;Leaky abstraction is the cause of so many headaches in enterprise software. In my role, we see this most with the integrations into logistics providers. Retail teams should care very little with the pick walk the warehouse operative is taking, or unless there is a specific customer promise, which courier is handling the final mile delivery. The logistics platform should not be handing data over to other upstream systems (we like to call this “bunny hopping”). Core data should be sourced from a single source and fed to all downstream systems equally – making each component in the ever-growing web of enterprise systems replaceable without affecting others as long as the new system can replicate the data in and out of the old system via the integration hub. And yes, it is even possible to take this approach with your ERP. It takes some discipline. It means keeping a tight control on technical debt that breaks this model. We all have tactical deployments going on that need to overcome a short-term hurdle but make sure you go back and plug that leak when you get the chance. Your users will usually thank you for it as the tactical solutions are rarely the most user friendly anyway.&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;So next time your CEO is asking if blockchain is going to revolutionise the way you work &lt;small&gt;(hint: unless you work in massively distributed currency exchanges with a low transaction throughput, it really won’t)&lt;/small&gt; maybe steer them towards a different technology. “Let’s talk abstraction, baby!”&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/1781216385440163948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2018/12/the-least-sexy-part-of-your-job.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1781216385440163948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1781216385440163948'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2018/12/the-least-sexy-part-of-your-job.html' title='The Least Sexy Part of Your Job'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-3710897500708082070</id><published>2018-03-06T13:18:00.002-08:00</published><updated>2018-03-06T13:18:31.938-08:00</updated><title type='text'>Samsung Xcover 3 Test</title><content type='html'>&lt;p&gt;If you&#39;ve ever wondered how well a Samsung XCover 3 would fare when subjected to being run over by a 40 tonne HGV? Look no further!&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipZ5xtT2e6yNQhRLYsT6GT-ie1R3lbhcI432QxctxumXGgwDP4cNKlSk2kOhF9AwYIY1FhSMy_0XEERjvcRPxNnJyO7Ai9cPrb3HiZPfEJ7Fd1GOT_wpl0fs2XPJs2HJn28DOkN-5Pu5I/s1600/xcover.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipZ5xtT2e6yNQhRLYsT6GT-ie1R3lbhcI432QxctxumXGgwDP4cNKlSk2kOhF9AwYIY1FhSMy_0XEERjvcRPxNnJyO7Ai9cPrb3HiZPfEJ7Fd1GOT_wpl0fs2XPJs2HJn28DOkN-5Pu5I/s400/xcover.jpg&quot; width=&quot;308&quot; height=&quot;400&quot; data-original-width=&quot;521&quot; data-original-height=&quot;676&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Outcome: &lt;span style=&quot;color: red;&quot;&gt;FAILED&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/3710897500708082070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2018/03/samsung-xcover-3-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/3710897500708082070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/3710897500708082070'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2018/03/samsung-xcover-3-test.html' title='Samsung Xcover 3 Test'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipZ5xtT2e6yNQhRLYsT6GT-ie1R3lbhcI432QxctxumXGgwDP4cNKlSk2kOhF9AwYIY1FhSMy_0XEERjvcRPxNnJyO7Ai9cPrb3HiZPfEJ7Fd1GOT_wpl0fs2XPJs2HJn28DOkN-5Pu5I/s72-c/xcover.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-435791847382142942</id><published>2014-11-12T15:37:00.002-08:00</published><updated>2015-12-11T00:15:53.985-08:00</updated><title type='text'>Lansweeper: Add Uptime To Your Hardware Reports</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;&lt;p&gt;Quick tip today. If you need to add an &quot;Uptime&quot; column on your Lansweeper reports, feel free to add the following;&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;
&lt;code&gt;  Cast(DateDiff(d, 0, DateAdd(second, DateDiff(s, tblAssets.Lastseen,
  GetDate()) + tblAssets.Uptime, 0)) As VARCHAR(15)) + &#39; day(s) &#39; +
  Convert(VARCHAR(8),DateAdd(second, DateDiff(s, tblAssets.Lastseen,
  GetDate()) + tblAssets.Uptime, 0),108) As Uptime&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;It&#39;s not going to be the best column format for sorting but it&#39;s definitely useful to see how long your servers have been running since last reboot.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/435791847382142942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2014/11/lansweeper-add-uptime-to-your-hardware.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/435791847382142942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/435791847382142942'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2014/11/lansweeper-add-uptime-to-your-hardware.html' title='Lansweeper: Add Uptime To Your Hardware Reports'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-1314225340891353826</id><published>2014-07-24T13:44:00.001-07:00</published><updated>2014-07-25T02:25:11.205-07:00</updated><title type='text'>VevoCart Error: Site Cannot Be Empty</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;When using PayPal Pro, you may experience the error &quot;Site Cannot Be Empty. Click here to re-enter payment information&quot;.&lt;/p&gt;
&lt;p&gt;This issue is caused by the &quot;SiteName&quot; configuration being empty and the error itself is reported by PayPalPro, so searching for the error message in VevoCart is not helpful. This configuration option is difficult to leave empty on the default language, so this issue typically only occurs when you run your multi-store site with multiple languages. If the configuration value is not set for your current language, you will experience this error.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Solution 1&lt;/u&gt;&lt;/b&gt;: Select the &quot;Store Config&quot; option in your administration panel. Your &quot;Store Name&quot; will likely be filled in. Select the &quot;Language&quot; from the top right of the store Config panel to change the language. Once changed, you can now fill in the Store Name option for the language.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;u&gt;Solution 2&lt;/u&gt;&lt;/b&gt;: To update the configuration in the database, you will need to update the ConfigurationValue table where the ConfigID is 1 (the CultureID is obviously different depending on the language you wish to update).&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;
&lt;code&gt;
UPDATE dbo.ConfigurationValue&lt;br&gt;
SET ItemValue = &#39;Site Name&#39;&lt;br&gt;
WHERE dbo.ConfigurationValue.ConfigID = 1&lt;br&gt;
AND dbo.ConfigurationValue.CultureID = 2&lt;br&gt;
&lt;/code&gt;
&lt;/div&gt;

&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/1314225340891353826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2014/07/vevocart-error-site-cannot-be-empty.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1314225340891353826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1314225340891353826'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2014/07/vevocart-error-site-cannot-be-empty.html' title='VevoCart Error: Site Cannot Be Empty'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-7517528414282892496</id><published>2014-03-04T01:24:00.000-08:00</published><updated>2014-03-04T01:26:24.163-08:00</updated><title type='text'>Prevent AppLauncher.exe starting on WT41N0</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;You may have noticed the startup folder structure has changed a little since the WT4090 and AppLauncher.exe starts up through different means. If you want to supress this without having to resort to using Platform Builder, you can do so with a registry merge in the \Application folder. Create the following .reg file and put it in your \Application folder:&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;
&lt;code&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SVCStart\1\Configurations\Display]&lt;br /&gt;
@=&quot;&quot;&lt;br /&gt;
&quot;Default&quot;=&quot;&quot;&lt;br /&gt;
&quot;Delay&quot;=dword:00000600&lt;br /&gt;
&lt;/code&gt;
&lt;/div&gt;

&lt;p&gt;It appears that Motorola have configured this as the first startup option in the registry, so this registry merge simply overwrites the option with a blank entry. Not sure if Windows CE will stop processing startup options if it encounters a blank entry but let me know if you find any problems with this method.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/7517528414282892496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2014/03/prevent-applauncherexe-starting-on.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/7517528414282892496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/7517528414282892496'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2014/03/prevent-applauncherexe-starting-on.html' title='Prevent AppLauncher.exe starting on WT41N0'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-1647870707688601231</id><published>2013-12-31T07:34:00.001-08:00</published><updated>2014-03-04T01:26:44.763-08:00</updated><title type='text'>ASP.NET 4.0 and IE10 and IE11</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Had some problems recently with ASP.NET 4.0 and browser versions IE10 and IE11. Further digging reveals the issue relates to how ASP.NET works out the capabilities of the browser before rendering the pages. Microsoft Hotfix KB2836939 should fix the issue for most users, however, this particular server wasn&#39;t playing ball after the hotfix was applied. (Non standard browser config files? Previous Hotfix for same issue? Not sure, would love to hear from anyone else with same problem to diagnose why this happened.)&lt;/p&gt;

&lt;p&gt;It&#39;s worth noting that I did NOT get the &quot;__postback is undefined&quot; error that most people see - I was simply not getting any JavaScript rendered at all (EG: with the AUTOPOSTBACK property set to true, the control wouldn&#39;t render the &quot;onChange&quot; attribute to trigger the postback in the browser).&lt;/p&gt;

&lt;p&gt;ASP.NET applications do allow you to overrule the machine level settings for the browsers. I started by creating a web page to show me my browser capabilities.&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;b&gt;Browser.aspx&lt;/b&gt;&lt;pre&gt;&lt;code&gt;    &amp;lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeFile=&quot;Browser.aspx.cs&quot; Inherits=&quot;BrowserTest&quot; %&amp;gt;

&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&amp;gt;

&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;
&amp;lt;head runat=&quot;server&quot;&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;form id=&quot;form1&quot; runat=&quot;server&quot;&amp;gt;
    &amp;lt;div&amp;gt;
    &amp;lt;asp:literal id=&quot;litBrowser&quot; runat=&quot;server&quot;/&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;With a code behind with the following in it;&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;b&gt;Browser.aspx.cs&lt;/b&gt;
&lt;pre&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using Vevo.WebUI;

public partial class BrowserTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        HttpBrowserCapabilities bc = Request.Browser;
        litBrowser.Text += &quot;&amp;lt;p&amp;gt;Browser Capabilities:&amp;lt;/p&amp;gt;&quot;;
        litBrowser.Text +=&quot;Type = &quot; + bc.Type + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Name = &quot; + bc.Browser + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Version = &quot; + bc.Version + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Major Version = &quot; + bc.MajorVersion + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Minor Version = &quot; + bc.MinorVersion + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Platform = &quot; + bc.Platform + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Is Beta = &quot; + bc.Beta + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Is Crawler = &quot; + bc.Crawler + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Is AOL = &quot; + bc.AOL + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Is Win16 = &quot; + bc.Win16 + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Is Win32 = &quot; + bc.Win32 + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Supports Frames = &quot; + bc.Frames + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Supports Tables = &quot; + bc.Tables + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Supports Cookies = &quot; + bc.Cookies + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Supports VB Script = &quot; + bc.VBScript + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Supports JavaScript = &quot; + bc.JavaScript + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Supports Java Applets = &quot; + bc.JavaApplets + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;Supports ActiveX Controls = &quot; + bc.ActiveXControls + &quot;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;CDF = &quot; + bc.CDF + &quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&quot;;
        litBrowser.Text +=&quot;User-Agent = &quot; + Request.UserAgent + &quot;&amp;lt;br&amp;gt;&quot;;
    }

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Before I fixed the problem, I was getting the following results:&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;
&lt;pre&gt;
Browser Capabilities:

Type = Mozilla
Name = Mozilla
Version = 0.0
Major Version = 0
Minor Version = 0
Platform = WinNT
Is Beta = False
Is Crawler = False
Is AOL = False
Is Win16 = False
Is Win32 = True
Supports Frames = False
Supports Tables = False
Supports Cookies = False
Supports VB Script = False
Supports JavaScript = False
Supports Java Applets = False
Supports ActiveX Controls = False
CDF = False

User-Agent = Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;First, I figured I&#39;d need to update the ie.browser file and drop it into the &quot;App_Browsers&quot; folder in the application. Below is what I modified it to.&lt;p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;b&gt;ie.browser&lt;/b&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;browsers&amp;gt;
    &amp;lt;browser id=&quot;IE&quot; parentID=&quot;Mozilla&quot;&amp;gt;
        &amp;lt;identification&amp;gt;
            &amp;lt;userAgent match=&quot;MSIE (?&#39;version&#39;(?&#39;major&#39;\d+)(\.(?&#39;minor&#39;\d+)?)(?&#39;letters&#39;\w*))(?&#39;extra&#39;[^)]*)&quot; /&amp;gt;
            &amp;lt;userAgent nonMatch=&quot;IEMobile&quot; /&amp;gt;
        &amp;lt;/identification&amp;gt;

        &amp;lt;capture&amp;gt;
            &amp;lt;userAgent match=&quot;Trident/(?&#39;layoutVersion&#39;\d+)&quot; /&amp;gt;
        &amp;lt;/capture&amp;gt;

        &amp;lt;capabilities&amp;gt;
            &amp;lt;capability name=&quot;browser&quot;              value=&quot;IE&quot; /&amp;gt;
            &amp;lt;capability name=&quot;layoutEngine&quot;         value=&quot;Trident&quot; /&amp;gt;
            &amp;lt;capability name=&quot;layoutEngineVersion&quot;  value=&quot;${layoutVersion}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;extra&quot;                value=&quot;${extra}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;isColor&quot;              value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;letters&quot;              value=&quot;${letters}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;majorversion&quot;         value=&quot;${major}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;minorversion&quot;         value=&quot;${minor}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;screenBitDepth&quot;       value=&quot;8&quot; /&amp;gt;
            &amp;lt;capability name=&quot;type&quot;                 value=&quot;IE${major}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;version&quot;              value=&quot;${version}&quot; /&amp;gt;
        &amp;lt;/capabilities&amp;gt;
    &amp;lt;/browser&amp;gt;

      &amp;lt;browser id=&quot;IE10Plus&quot; parentID=&quot;Mozilla&quot;&amp;gt;
        &amp;lt;identification&amp;gt;
            &amp;lt;userAgent match=&quot;Trident\/7.0; rv:(?&#39;version&#39;(?&#39;major&#39;\d+)(\.(?&#39;minor&#39;\d+)?)(?&#39;letters&#39;\w*))(?&#39;extra&#39;[^)]*)&quot; /&amp;gt;
            &amp;lt;userAgent nonMatch=&quot;IEMobile&quot; /&amp;gt;
        &amp;lt;/identification&amp;gt;

        &amp;lt;capture&amp;gt;
            &amp;lt;userAgent match=&quot;Trident/(?&#39;layoutVersion&#39;\d+)&quot; /&amp;gt;
        &amp;lt;/capture&amp;gt;

        &amp;lt;capabilities&amp;gt;
            &amp;lt;capability name=&quot;browser&quot;              value=&quot;IE&quot; /&amp;gt;
            &amp;lt;capability name=&quot;layoutEngine&quot;         value=&quot;Trident&quot; /&amp;gt;
            &amp;lt;capability name=&quot;layoutEngineVersion&quot;  value=&quot;${layoutVersion}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;extra&quot;                value=&quot;${extra}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;isColor&quot;              value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;letters&quot;              value=&quot;${letters}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;majorversion&quot;         value=&quot;${major}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;minorversion&quot;         value=&quot;${minor}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;screenBitDepth&quot;       value=&quot;8&quot; /&amp;gt;
            &amp;lt;capability name=&quot;type&quot;                 value=&quot;IE${major}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;version&quot;              value=&quot;${version}&quot; /&amp;gt;

            &amp;lt;capability name=&quot;ecmascriptversion&quot;    value=&quot;3.0&quot; /&amp;gt;
            &amp;lt;capability name=&quot;jscriptversion&quot;       value=&quot;5.6&quot; /&amp;gt;
            &amp;lt;capability name=&quot;javascript&quot;           value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;javascriptversion&quot;    value=&quot;1.5&quot; /&amp;gt;
            &amp;lt;capability name=&quot;msdomversion&quot;         value=&quot;${majorversion}.${minorversion}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;w3cdomversion&quot;        value=&quot;1.0&quot; /&amp;gt;
            &amp;lt;capability name=&quot;ExchangeOmaSupported&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;activexcontrols&quot;      value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;backgroundsounds&quot;     value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;cookies&quot;              value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;frames&quot;               value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;javaapplets&quot;          value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsCallback&quot;     value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsFileUpload&quot;   value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsMultilineTextBoxDisplay&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsMaintainScrollPositionOnPostback&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsVCard&quot;        value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsXmlHttp&quot;      value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;tables&quot;               value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsAccessKeyAttribute&quot;    value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;tagwriter&quot;            value=&quot;System.Web.UI.HtmlTextWriter&quot; /&amp;gt;
            &amp;lt;capability name=&quot;vbscript&quot;             value=&quot;true&quot; /&amp;gt;
        &amp;lt;/capabilities&amp;gt;
    &amp;lt;/browser&amp;gt;

    &amp;lt;!-- Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325) --&amp;gt;
    &amp;lt;browser id=&quot;IE6to9&quot; parentID=&quot;IE&quot;&amp;gt;
        &amp;lt;identification&amp;gt;
            &amp;lt;capability name=&quot;majorversion&quot; match=&quot;[6-9]&quot; /&amp;gt;
        &amp;lt;/identification&amp;gt;

        &amp;lt;capabilities&amp;gt;
            &amp;lt;capability name=&quot;ecmascriptversion&quot;    value=&quot;3.0&quot; /&amp;gt;
            &amp;lt;capability name=&quot;jscriptversion&quot;       value=&quot;5.6&quot; /&amp;gt;
            &amp;lt;capability name=&quot;javascript&quot;           value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;javascriptversion&quot;    value=&quot;1.5&quot; /&amp;gt;
            &amp;lt;capability name=&quot;msdomversion&quot;         value=&quot;${majorversion}.${minorversion}&quot; /&amp;gt;
            &amp;lt;capability name=&quot;w3cdomversion&quot;        value=&quot;1.0&quot; /&amp;gt;
            &amp;lt;capability name=&quot;ExchangeOmaSupported&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;activexcontrols&quot;      value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;backgroundsounds&quot;     value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;cookies&quot;              value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;frames&quot;               value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;javaapplets&quot;          value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsCallback&quot;     value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsFileUpload&quot;   value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsMultilineTextBoxDisplay&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsMaintainScrollPositionOnPostback&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsVCard&quot;        value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsXmlHttp&quot;      value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;tables&quot;               value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;supportsAccessKeyAttribute&quot;    value=&quot;true&quot; /&amp;gt;
            &amp;lt;capability name=&quot;tagwriter&quot;            value=&quot;System.Web.UI.HtmlTextWriter&quot; /&amp;gt;
            &amp;lt;capability name=&quot;vbscript&quot;             value=&quot;true&quot; /&amp;gt;
        &amp;lt;/capabilities&amp;gt;
    &amp;lt;/browser&amp;gt;

    &amp;lt;!-- Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;) --&amp;gt;
    &amp;lt;browser id=&quot;IE7&quot; parentID=&quot;IE6to9&quot;&amp;gt;
        &amp;lt;identification&amp;gt;
            &amp;lt;capability name=&quot;majorversion&quot; match=&quot;7&quot; /&amp;gt;
        &amp;lt;/identification&amp;gt;
        &amp;lt;capabilities&amp;gt;
            &amp;lt;capability name=&quot;jscriptversion&quot; value=&quot;5.7&quot; /&amp;gt;
        &amp;lt;/capabilities&amp;gt;
    &amp;lt;/browser&amp;gt;

    &amp;lt;!-- Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) --&amp;gt;
    &amp;lt;browser id=&quot;IE8&quot; parentID=&quot;IE6to9&quot;&amp;gt;
        &amp;lt;identification&amp;gt;
            &amp;lt;capability name=&quot;majorversion&quot; match=&quot;8&quot; /&amp;gt;
        &amp;lt;/identification&amp;gt;
        &amp;lt;capabilities&amp;gt;
            &amp;lt;capability name=&quot;jscriptversion&quot; value=&quot;6.0&quot; /&amp;gt;
        &amp;lt;/capabilities&amp;gt;
    &amp;lt;/browser&amp;gt;


    &amp;lt;gateway id=&quot;IEbeta&quot; parentID=&quot;IE&quot;&amp;gt;
        &amp;lt;identification&amp;gt;
            &amp;lt;capability name=&quot;letters&quot; match=&quot;^([bB]|ab)&quot; /&amp;gt;
        &amp;lt;/identification&amp;gt;

        &amp;lt;capture&amp;gt;
        &amp;lt;/capture&amp;gt;

        &amp;lt;capabilities&amp;gt;
            &amp;lt;capability name=&quot;beta&quot;    value=&quot;true&quot; /&amp;gt;
        &amp;lt;/capabilities&amp;gt;
    &amp;lt;/gateway&amp;gt;
&amp;lt;/browsers&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;My results from the browser page were unaffected, however - the browser was still being detected as &quot;Mozilla&quot;. I decided to hack out the Mozilla detection from the generic.browser file (trying the &quot;NonMatch&quot; element didn&#39;t work for me - if someone can explain how to prevent IE11 detecting as Mozilla, I&#39;d love to hear from you).&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;b&gt;generic.browser&lt;/b&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;browsers&amp;gt;
    &amp;lt;browser id=&quot;GenericDownlevel&quot; parentID=&quot;Default&quot;&amp;gt;
        &amp;lt;identification&amp;gt;
            &amp;lt;userAgent match=&quot;^Generic Downlevel$&quot; /&amp;gt;
        &amp;lt;/identification&amp;gt;

        &amp;lt;capture&amp;gt;
        &amp;lt;/capture&amp;gt;

        &amp;lt;capabilities&amp;gt;
            &amp;lt;capability name=&quot;cookies&quot;                     value=&quot;false&quot; /&amp;gt;
            &amp;lt;capability name=&quot;ecmascriptversion&quot;           value=&quot;1.0&quot; /&amp;gt;
            &amp;lt;capability name=&quot;tables&quot;                      value=&quot;true&quot; /&amp;gt;
        &amp;lt;capability name=&quot;type&quot;                        value=&quot;Downlevel&quot; /&amp;gt;
        &amp;lt;/capabilities&amp;gt;
        &amp;lt;controlAdapters&amp;gt;
        &amp;lt;adapter controlType=&quot;System.Web.UI.WebControls.Menu&quot;
                     adapterType=&quot;System.Web.UI.WebControls.Adapters.MenuAdapter&quot; /&amp;gt;
        &amp;lt;/controlAdapters&amp;gt;
    &amp;lt;/browser&amp;gt;

&amp;lt;/browsers&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;After uploading the new browser files to the App_Browsers folder on the server I get the following and the website is working again! (Note: you may need to restart the application for this to take effect. If, like me, you don&#39;t have access to the server to do this, write a new file in the &quot;bin&quot; folder - any file changes in this folder cause an application to restart.)&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;pre&gt;Browser Capabilities:
Type = IE11
Name = IE
Version = 11.0
Major Version = 11
Minor Version = 0
Platform = WinNT
Is Beta = False
Is Crawler = False
Is AOL = False
Is Win16 = False
Is Win32 = True
Supports Frames = True
Supports Tables = True
Supports Cookies = True
Supports VB Script = True
Supports JavaScript = True
Supports Java Applets = True
Supports ActiveX Controls = True
CDF = False

User-Agent = Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/1647870707688601231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2013/12/aspnet-40-and-ie10-and-ie11.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1647870707688601231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1647870707688601231'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2013/12/aspnet-40-and-ie10-and-ie11.html' title='ASP.NET 4.0 and IE10 and IE11'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-1871164800969573377</id><published>2013-06-14T06:08:00.001-07:00</published><updated>2013-06-14T06:11:10.787-07:00</updated><title type='text'>Error: The bootstrap could not be loaded</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;

&lt;p&gt;When working with Motorola&#39;s new WT41N0 with Windows Embedded CE 7 (or Embedded 2010 depending on what screen you&#39;re looking at!), you may receive a &quot;The bootstrap could not be loaded&quot; error from the Device Connectivity Component when trying to deploy or debug a Visual Studio 2008 VB or C# .NET project.&lt;p&gt;

&lt;p&gt;To resolve this problem, you need to install the drivers to cope with it which are held in the PSDK. You can get these from the &lt;a href=&quot;https://support.symbol.com/support/&quot;&gt;Motorola Support&lt;/a&gt; website, select &quot;Mobile Computers&quot;, select the model number &quot;WT41N0&quot; and select &quot;Software Downloads&quot; as document type. You need the 41x0cBenPS010010.exe file to install (recommend you close Visual Studio first). Once installed, your deploy dialog box will include the option to deploy to WT41N0c70PSDK ARMV7 Device.&lt;p&gt;

&lt;p&gt;I have also heard that installing the latest CE package builder from Microsoft also fixes the problem.&lt;/p&gt;


&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/1871164800969573377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2013/06/error-bootstrap-could-not-be-loaded.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1871164800969573377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1871164800969573377'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2013/06/error-bootstrap-could-not-be-loaded.html' title='Error: The bootstrap could not be loaded'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-1665454691595187057</id><published>2012-11-27T04:30:00.001-08:00</published><updated>2014-11-27T14:20:17.318-08:00</updated><title type='text'>Host files in Windows CE</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Windows has the ability to link hosts to specific IP addresses. Think of it as a DNS bypass system. In our warehouse setup, the wireless infrastructure is completely self contained - it does not have any access to our domain infrastructure except for TCP port 80 access to one web server. This means that our wireless infrastructure does not have access to DNS.&lt;/p&gt;

&lt;p&gt;We get around this by configuring our devices to convert a host name to an IP address in the HOSTS entries that Windows supports. It&#39;s probably not the most practical way to do things but I&#39;m sure other developers will find a better use for the information enclosed in this blog post.&lt;/p&gt;

&lt;p&gt;The Windows CE 5 &amp; 6 host entries are entered into the registry in the following location, and the IP octets are entered in HEX. To persist this on your device, create a registry file (EG: hosts.reg) in the &quot;\Application&quot; folder and place 1 entry in the reg file per host name you wish to redirect.&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;
REGEDIT4&lt;br&gt;
&lt;br&gt;
[HKEY_LOCAL_MACHINE\Comm\Tcpip\Hosts\SERVERNAME]&lt;br&gt;
&quot;ipaddr&quot;=hex:0a,14,1e,01&lt;br&gt;
&lt;/code&gt;
&lt;/div&gt;

&lt;p&gt;After a cold boot, your registry file will be automatically merged into the registry.&lt;/p&gt;

&lt;p&gt;Update: If you are looking to use IPv6, you will need to use the attribute &quot;ipaddr6&quot; rather than &quot;ipaddr&quot;. The value will obviously need to be 20 bytes, rather than the 4 bytes used by IPv4.&lt;/p&gt;

&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/1665454691595187057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2012/11/host-files-in-windows-ce.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1665454691595187057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1665454691595187057'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2012/11/host-files-in-windows-ce.html' title='Host files in Windows CE'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-1182893397203579654</id><published>2012-10-19T03:55:00.000-07:00</published><updated>2013-01-06T15:17:25.005-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google Maps"/><category scheme="http://www.blogger.com/atom/ns#" term="pinpoint2012"/><title type='text'>Google Maps for Business</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Google recently invited us to attend the recent Pinpoint event in London. The idea was for us to evaluate the products and services Google can offer in the geo-location and mapping arena.&lt;/p&gt;

&lt;p&gt;We&#39;re familiar with the web based Google Maps API. It&#39;s amazingly simple to use, offers a very rich UI and most importantly, we have shown this to our end users who instantly recognise and know how to use the user interface.&lt;/p&gt;

&lt;p&gt;In Google&#39;s favour, the mapping views, overlays and ability to create heat maps are second to none. Coupled with the StreetView feature, Google have built an amazingly powerful product that we were excited to start implementing into our software.&lt;/p&gt;

&lt;p&gt;However, the message from the event was very much &quot;We&#39;re ready for business&quot;. I believe Google Maps solutions are far from ready for this task and here are my main reasons;&lt;/p&gt;

&lt;p&gt;Routing (Navigation) is incredibly basic. Although Google do have the &quot;beta&quot; moniker on the turn by turn navigation, it is definitely flogging the maps routing as a genuine business product. I beg to differ. There is no ability to avoid certain map location points; imagine you receive data that warns you of a closed road - your planning agents cannot mark this on the map for the routing software to react to this. There is no ability to route for large vehicles, avoiding low bridges or weight restrictions. For taxi drivers, there is no way to include bus lanes in your directions. As a business user this is quite frustrating when you know that nobody can collect, handle and interrogate data quite like Google but they seem to be avoiding some pretty basic projects here.&lt;/p&gt;

&lt;p&gt;If you thought it easy to get your directions from elsewhere and overlay them into Google Maps, think again. Mapping software products generally do not play well with each other and you will invariably end up with situations where the directions overlay is placed over an area without a road on the other map.&lt;/p&gt;

&lt;p&gt;During the event we were introduced to Google Coordinate. For those unfamiliar, the product allows you to create work flows, assigning jobs to remote workers who can pick them up on their mobile devices, see job info, navigate to the job and will be forced to complete certain mandatory fields before the job is marked as complete. The product shows a lot of promise and I can certainly see the use for companies without their own information systems departments. However, this product again seems to follow the recent trend of Google releasing products that simply aren&#39;t ready. When configuring your work flow, you can add mandatory fields that you require the remote worker to complete before the job is closed. These fields are free text so you cannot add, for example, a drop down list of options for the remote worker to choose from. I cannot understand the rationale behind this - it is woefully too simple to be useful in many business scenarios.&lt;/p&gt;

&lt;p&gt;So we arrived at Google Pinpoint 2012 fairly confident we needed to buy the Google Maps API for our business and left feeling fairly confident that Google Maps couldn&#39;t do what we needed.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/1182893397203579654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2012/10/google-maps-for-business.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1182893397203579654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1182893397203579654'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2012/10/google-maps-for-business.html' title='Google Maps for Business'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-728175274448854456</id><published>2012-05-14T12:21:00.000-07:00</published><updated>2012-05-14T12:21:10.445-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Compact Framework"/><title type='text'>DomainUpDown in Compact Framework 3.5</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Really quick tip for anyone struggling with DomainUpDown clearing on the .NET Compact Framework. It seems setting the SelectedIndex to -1 is not enough to clear your selection and can be quite infuriating when you need the form to forget the last choice. It seems that setting the SelectedIndex isn&#39;t enough and without setting the Text property to an empty string the DomainUpDown will not clear your previous selection.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/728175274448854456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2012/05/domainupdown-in-compact-framework-35.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/728175274448854456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/728175274448854456'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2012/05/domainupdown-in-compact-framework-35.html' title='DomainUpDown in Compact Framework 3.5'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-5329297856783667845</id><published>2012-03-14T05:35:00.001-07:00</published><updated>2012-03-14T05:36:06.738-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows CE"/><title type='text'>Scrollbars in Windows CE</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Screen space is always a premium on handheld devices, so to get round it we&#39;ve reduced the size of our scrollbars. We took this decision because our apps are not touch-screen enabled (some devices we use do not have touch screens) so there&#39;s no requirement for a large scrollbar to be able to scroll up and down.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDSY4lfrjltxvwWI_LseGnRNYSRO3GycUEEvGIyXYMbrjWc-QntKen4FS-A-Fr27HeXg8MxElM0OQ-JH1xqF5tRvNLKGH_NxWcOKvFZ73-XETYbRENhl7nWNrVqd7hCSigDaGxZ4X4XAc/s1600/PalletContents.jpg&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;287&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDSY4lfrjltxvwWI_LseGnRNYSRO3GycUEEvGIyXYMbrjWc-QntKen4FS-A-Fr27HeXg8MxElM0OQ-JH1xqF5tRvNLKGH_NxWcOKvFZ73-XETYbRENhl7nWNrVqd7hCSigDaGxZ4X4XAc/s320/PalletContents.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;To do this, we added the following to a SCROLLBARS.REG file and placed this in the \Platform folder. It&#39;s important we placed it here, rather than the \Application folder, as these settings are needed earlier in the cold boot. Placing this reg file in the \Application folder will result in your scrollbars not being the correct width after a cold boot, but the correct width after a subsequent warm boot.&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;
REGEDIT4&lt;br/&gt;
&lt;br/&gt;
[HKEY_LOCAL_MACHINE\System\GWE]&lt;br/&gt;
&quot;cxHScr&quot;=dword:00000008&lt;br/&gt;
&quot;cyHScr&quot;=dword:00000008&lt;br/&gt;
&quot;cxVScr&quot;=dword:00000008&lt;br/&gt;
&quot;cyVScr&quot;=dword:00000008&lt;br/&gt;
&lt;/code&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/5329297856783667845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2012/03/scrollbars-in-windows-ce.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/5329297856783667845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/5329297856783667845'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2012/03/scrollbars-in-windows-ce.html' title='Scrollbars in Windows CE'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDSY4lfrjltxvwWI_LseGnRNYSRO3GycUEEvGIyXYMbrjWc-QntKen4FS-A-Fr27HeXg8MxElM0OQ-JH1xqF5tRvNLKGH_NxWcOKvFZ73-XETYbRENhl7nWNrVqd7hCSigDaGxZ4X4XAc/s72-c/PalletContents.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-4167485698951405747</id><published>2012-01-23T05:58:00.000-08:00</published><updated>2012-01-26T07:02:36.919-08:00</updated><title type='text'>Preparing For GS1 DataBar</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;In 2014, GS1 are planning the introduction of a new barcode standard, GS1 DataBar (previously known as RSS or Reduced Space Symbology). In preparation for this, we&#39;re readying our Motorola devices to scan these barcodes so when suppliers start sending stock with these on them we&#39;ll be ready.&lt;/p&gt;

&lt;p&gt;To scan these barcodes, you will need to update your devices to the latest EMDK for .NET (2.5 Update 1 at time of writing). To do this, you need to uninstall your existing EMDK, then install the new version, then install the update. This will allow you to take the correct symbol cabinet file for your device and deploy it to your device.&lt;/p&gt;

&lt;div class=&quot;tip&quot;&gt;WT4090 on Windows CE 5 uses %PROGRAM FILES%\Motorola EMDK for .NET\v2.5\SDK\Smart Devices\wce500\armv4i\symbol.all.arm.cab).&lt;/div&gt;

&lt;p&gt;You will also need to update your application project references to the new 2.5 version of DLLs now installed on your PC.&lt;/p&gt;

&lt;p&gt;As usual, there seems to be a deafening silence on the internet about how to do this but as it turns out, it&#39;s not so hard to work out. After calling the &quot;Actions.Enable()&quot; method on your barcode object (Symbol.Barcode.Actions.Enable), you can enable additional decoders. To help you identify the ones you need, however, you need to know the historic IDs for your barcode types.&lt;p&gt;

&lt;table&gt;
    &lt;tr&gt;&lt;th&gt;Old RSS Name&lt;/th&gt;&lt;th&gt;New GS1 DataBar&amp;#8482;&lt;/th&gt;&lt;th&gt;Motorola Decoder&lt;/th&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;RSS-14&lt;/td&gt;&lt;td&gt;GS1 DataBar Omnidirectional&lt;/td&gt;&lt;td&gt;Symbol.Barcode.DecoderTypes.RSS14&lt;/td&gt;&lt;/tr&gt;

    &lt;tr&gt;&lt;td&gt;RSS-14 Truncated&lt;/td&gt;&lt;td&gt;GS1 DataBar Truncated&lt;/td&gt;&lt;td&gt;Symbol.Barcode.DecoderTypes.RSS14&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;RSS-14 Stacked&lt;/td&gt;&lt;td&gt;GS1 DataBar Stacked&lt;/td&gt;&lt;td&gt;Symbol.Barcode.DecoderTypes.RSS14&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;RSS-14 Stacked Omnidirectional&lt;/td&gt;&lt;td&gt;GS1 DataBar Stacked Omnidirectional&lt;/td&gt;&lt;td&gt;Symbol.Barcode.DecoderTypes.RSS14&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;RSS-14 Limited&lt;/td&gt;&lt;td&gt;GS1 DataBar Limited&lt;/td&gt;&lt;td&gt;Symbol.Barcode.DecoderTypes.RSSLIM&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;RSS-14 Expanded&lt;/td&gt;&lt;td&gt;GS1 DataBar Expanded&lt;/td&gt;&lt;td&gt;Symbol.Barcode.DecoderTypes.RSSEXP&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;RSS-14 Expanded Stacked&lt;/td&gt;&lt;td&gt;GS1 DataBar Omnidirectional&lt;/td&gt;&lt;td&gt;Symbol.Barcode.DecoderTypes.RSSEXP&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Once you do this, you can easily enable the decoders for these barcode types;&lt;p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;
  _BarcodeScanner.Decoders.SetEnabled(Symbol.Barcode.DecoderTypes.RSS14, True)
  _BarcodeScanner.Decoders.SetEnabled(Symbol.Barcode.DecoderTypes.RSSEXP, True)
  _BarcodeScanner.Decoders.SetEnabled(Symbol.Barcode.DecoderTypes.RSSLIM, True)
&lt;/code&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/4167485698951405747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2012/01/preparing-for-gs1-databar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/4167485698951405747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/4167485698951405747'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2012/01/preparing-for-gs1-databar.html' title='Preparing For GS1 DataBar'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-7903472538638801409</id><published>2011-12-12T03:48:00.000-08:00</published><updated>2012-01-26T07:04:50.932-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Motorola"/><category scheme="http://www.blogger.com/atom/ns#" term="WT4000 Series"/><title type='text'>WT4090 - ActiveSync and &quot;Connect to Device Failed&quot;</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Quick note today, but hopefully may prevent someone tearing their hair out.&lt;p&gt;

&lt;p&gt;The WT4090 has a &quot;quirk&quot; with it&#39;s ActiveSync connection which may wreak havoc with Visual Studio when you try to debug a project or deploy to the device. You will see a &quot;Connect to Device Failed&quot; message when attempting either of those two actions. This occurs when your device is tethered to your PC when your PC starts up. To rectify, simply lift the device from it&#39;s cradle for 5 seconds then replace. The device should make that distinct &quot;ActiveSync&quot; sound when it re-docks and you should be good to go!&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/7903472538638801409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/12/wt4090-activesync-and-connect-to-device.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/7903472538638801409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/7903472538638801409'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/12/wt4090-activesync-and-connect-to-device.html' title='WT4090 - ActiveSync and &quot;Connect to Device Failed&quot;'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-3784339926318073773</id><published>2011-11-29T00:08:00.001-08:00</published><updated>2012-01-26T07:05:08.748-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MC3100 Series"/><category scheme="http://www.blogger.com/atom/ns#" term="Motorola"/><category scheme="http://www.blogger.com/atom/ns#" term="Wireless"/><category scheme="http://www.blogger.com/atom/ns#" term="WT4000 Series"/><title type='text'>Deleting &quot;Motorola Out of Box Magic&quot; Profile</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Having multiple WiFi profiles on your device can slow down the responsiveness of your device and can result in slow re-connections to your wireless network.&lt;/p&gt;

&lt;p&gt;By default, Motorola pre-load their devices with a WiFi profile. The registry file \Platform\FUSIONOBMPROFILE.REG is responsible for this. Delete / change the file extension of this file to prevent the system adding this profile on cold boot.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/3784339926318073773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/11/deleting-motorola-out-of-box-magic.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/3784339926318073773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/3784339926318073773'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/11/deleting-motorola-out-of-box-magic.html' title='Deleting &quot;Motorola Out of Box Magic&quot; Profile'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-2966058301204474872</id><published>2011-10-28T00:36:00.000-07:00</published><updated>2012-11-27T04:30:42.929-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AppCenter"/><category scheme="http://www.blogger.com/atom/ns#" term="MC3100 Series"/><category scheme="http://www.blogger.com/atom/ns#" term="Motorola"/><category scheme="http://www.blogger.com/atom/ns#" term="WT4000 Series"/><title type='text'>Forgotten Password - Motorola AppCenter</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Forgotten / lost your AppCenter password for your Motorola device? First, try &quot;symbol&quot; as a password - this is the default for AppCenter - it might save you a little time!&lt;/p&gt;

&lt;p&gt;If &quot;symbol&quot; doesn&#39;t work, dock your device to your PC using Microsoft ActiveSync and click the &quot;Explore&quot; button to browse the files on the device.&lt;/p&gt;

&lt;p&gt;Navigate to the &quot;\Application&quot; folder and locate the &quot;AppCenter.reg&quot; file. Copy this file to your machine and open with notepad. If this file does not exist on your device, you will need to copy all the registry files onto your machine, then open each file in turn in notepad and look for the following entry;&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Symbol\AppCenter]&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Beneath this registry entry there will be two GUIDs.They will look something like this;&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;&quot;{B6235F29-5B71-4389-A0A6-ACF2758AC1DC}&quot;=hex:00,00,00,00&lt;br/&gt;
&quot;{2EACC9DF-C9BF-428E-9074-D50B57D0D747}&quot;=hex:2F,00,2A,00,22,00,24,00,3B,00,3C,00,73,00,52,00,07,00,1E,00,17,00,3C,00,2B,00,35,00,27,00,25,00,16,00,0A,00,3C,00,3D,00,0D,00,2F,00,3E,00,25,00,37,00,21,00,08,00,06,00,19,00,11,00,0C,00,57,00&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;Remove these two entries from your registry file and save it.&lt;/p&gt;

&lt;p&gt;Copy the registry file back to the device in the &quot;\Application&quot; folder.&lt;/p&gt;

&lt;p&gt;Cold boot the device. (Usually press and hold the 1 &amp; 9 keys then press the power button.)&lt;/p&gt;

&lt;p&gt;The device should now boot and the default password of &quot;symbol&quot; should now be active.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/2966058301204474872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/10/forgotten-password-motorola-appcenter.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/2966058301204474872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/2966058301204474872'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/10/forgotten-password-motorola-appcenter.html' title='Forgotten Password - Motorola AppCenter'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-3530338284517819684</id><published>2011-10-26T09:45:00.000-07:00</published><updated>2012-01-26T07:05:54.227-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Motorola"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows CE"/><title type='text'>The Power of .RUN Files</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Short blog for you today - wanted to discuss the power of .RUN files on Motorola Windows CE devices.&lt;/p&gt;

&lt;p&gt;Persisting applications when your device cold boots is an issue you will encounter every time you start a new project for the devices. Motorola provide a very helpful guide which you can read through here; &lt;a href=&quot;http://devzone.symbol.com/resources/Installing_Applications_for_Persistence_v2.pdf&quot;&gt;http://devzone.symbol.com/resources/Installing_Applications_for_Persistence_v2.pdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One aspect of this, is the use of .RUN files in the \Application\Startup folder. These run files are essentially commands that can be executed when the device starts up after a cold boot.&lt;/p&gt;

&lt;p&gt;The files are simple text files with two lines. The first line is the path to the executable you wish to run and the second line are the parameters you wish to pass into the application.&lt;/p&gt;

&lt;p&gt;One common example is the ability to load cab files at startup. To do this, create a .RUN file in the \Application\Startup folder (EG: &quot;MYAPP.RUN&quot;) with the following on two lines;&lt;/p&gt;

&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;\Windows\wceload.exe&lt;br/&gt;
/noui /delete 0 /noaskdest &quot;\Application\MYAPP.cab&quot;&lt;/code&gt;&lt;/div&gt;

&lt;p&gt;The order of your second line counts - always the switches before the file name. &lt;/p&gt;

&lt;p&gt;There is no control over the order that these cab files install - if you need that, look at using SymScript instead.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/3530338284517819684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/10/power-of-run-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/3530338284517819684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/3530338284517819684'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/10/power-of-run-files.html' title='The Power of .RUN Files'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-5644126472528222734</id><published>2011-09-15T07:09:00.000-07:00</published><updated>2012-01-26T07:12:29.953-08:00</updated><title type='text'>Battery Life on Motorola CE Devices</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
&lt;p&gt;Our WT4090 devices suffer from short battery life. The MC3190 devices are not so susceptible but users report needing 3 replacement batteries to get through their 8.5 hour shifts, which seems like a pretty poor battery life to me.&lt;/p&gt;

&lt;p&gt;Initially, this has been put down to the device itself. Because the battery is so small and the devices are in constant use, it was initially dismissed as a limitation of the device itself and nothing we could do to tune it.&lt;/p&gt;

&lt;p&gt;We have since adopted third party software to run another operation at another site using the exact same devices and now experience a much greater battery life. The devices are in constant use, as they are on this site but are lasting a lot longer. This has led to some investigation to take place to see what the underlying problem is.&lt;/p&gt;

&lt;p&gt;I am commonly told that our application design is the cause because there is so much white on the screen. A quick bit of research confirms that the devices use an LCD screen with a constant backlight. This means the screen colour does not affect our battery life so the problem must lie elsewhere.&lt;/p&gt;

&lt;p&gt;Having been our first venture into the compact framework and device led operations, the application was initially written to read web services. To keep things simple in the early stages, all web services simply exposed a Data.DataTable object. Looking back, these are pretty big objects and serialize a lot of data over the wireless. We have since removed the majority of these and replaced them with purpose built serializable classes (with short property names to optimize them even more!)&lt;/p&gt;

&lt;p&gt;We have also invested in better wireless antennas for our wireless infrastructure, this has seen some battery life extension on this site.&lt;/p&gt;

&lt;p&gt;A thorough walk through of the application has also highlighted areas for improvement, reducing network traffic and CPU time on the device.&lt;/p&gt;

&lt;p&gt;I think the moral of the story here is not to always assume the hardware is the limiting factor to problems; it&#39;s always worth a second look at internal practices to see if improvements can be made there. I still believe the WiFi infrastructure on our other site is superior (resulting in better signal strength and less power needed to maintain a reliable connection) but I will continue looking for more ways to squeeze battery life out of these devices.&lt;/p&gt;

&lt;p&gt;Update 26 Jan 2012: Since making changes to the amount of traffic the devices download over the wireless network, the battery life has significantly improved - despite this now meaning more processing on the device itself.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/5644126472528222734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/09/battery-life-on-motorola-ce-devices.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/5644126472528222734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/5644126472528222734'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/09/battery-life-on-motorola-ce-devices.html' title='Battery Life on Motorola CE Devices'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-663249923275287143</id><published>2011-08-15T09:51:00.000-07:00</published><updated>2012-01-26T07:06:10.776-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Motorola"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows CE"/><category scheme="http://www.blogger.com/atom/ns#" term="Wireless"/><title type='text'>Follow Up: Automating the Setup Process for Motorola Devices</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
Some time ago, I asked if anyone knew of a way to automate the setup process for Motorola devices. Judging by the absolute silence, either no-one has succeeded in this task or it&#39;s a well kept secret within the industry!&lt;br /&gt;
&lt;br /&gt;
Well, I think I&#39;ve cracked it!&lt;br /&gt;
&lt;br /&gt;
One pre-requisite is these fantastic command line CE tools, you can download from; &lt;a href=&quot;https://sites.google.com/a/essemer.com.au/www/windowsce&quot;&gt;https://sites.google.com/a/essemer.com.au/www/windowsce&lt;/a&gt; ( &lt;a href=&quot;http://www.essemer.com.au/&quot;&gt;http://www.essemer.com.au/&lt;/a&gt; )&lt;br /&gt;
&lt;br /&gt;
The other, is the &quot;rapistart.exe&quot; executable from Microsoft&#39;s Windows Mobile PowerToys ( &lt;a href=&quot;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=10601&quot;&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=10601&lt;/a&gt; )&lt;br /&gt;
&lt;br /&gt;
Step 1:&lt;br /&gt;
&lt;br /&gt;
You&#39;ll need a mobile application to set the wireless profile settings &amp; export them to a reg file. We&#39;ll export these settings to the &quot;\Application&quot; folder so they survive a cold boot.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;Module MotorolaSetWLANApp&lt;br /&gt;
Private _IPAddress As String&lt;br /&gt;
Private _SubnetMask As String&lt;br /&gt;
Private _SSID As String&lt;br /&gt;
Private _Passphrase As String&lt;br /&gt;
&lt;br /&gt;
Private _SetIPSettings As Boolean = False&lt;br /&gt;
&lt;br /&gt;
Public Sub Main(ByVal args As String())&lt;br /&gt;
If args.Length &gt; 0 Then&lt;br /&gt;
For i As Integer = 0 To args.Length - 1&lt;br /&gt;
Select Case args(i).ToLower&lt;br /&gt;
Case &quot;-ip&quot;&lt;br /&gt;
&#39;get IP settings&lt;br /&gt;
_IPAddress = args(i + 1)&lt;br /&gt;
_SetIPSettings = True&lt;br /&gt;
Case &quot;-subnet&quot;&lt;br /&gt;
_SubnetMask = args(i + 1)&lt;br /&gt;
Case &quot;-ssid&quot;&lt;br /&gt;
_SSID = args(i + 1)&lt;br /&gt;
Case &quot;-passphrase&quot;&lt;br /&gt;
_Passphrase = args(i + 1)&lt;br /&gt;
End Select&lt;br /&gt;
Next&lt;br /&gt;
End If&lt;br /&gt;
&lt;br /&gt;
If _SetIPSettings Then&lt;br /&gt;
Using Settings As New Symbol.Fusion.WLAN.WLAN&lt;br /&gt;
Dim ProfileData As New Symbol.Fusion.WLAN.InfrastructureProfileData(_SSID, _SSID)&lt;br /&gt;
With ProfileData&lt;br /&gt;
.PowerMode = Symbol.Fusion.WLAN.PowerMode.FAST_POWER_SAVE&lt;br /&gt;
.TransmissionPower = Symbol.Fusion.WLAN.InfrastructureProfileData.TransmitPowerLevel.BSS_AUTO&lt;br /&gt;
.IPSettings.AddressingMode = Symbol.Fusion.WLAN.IPSettings.AddressingModes.STATIC&lt;br /&gt;
.IPSettings.IPAddress = _IPAddress&lt;br /&gt;
.IPSettings.SubnetMask = _SubnetMask&lt;br /&gt;
.SecurityType = Symbol.Fusion.WLAN.WLANSecurityType.SECURITY_WPA_PERSONAL&lt;br /&gt;
.Authentication.AuthenticationType = Symbol.Fusion.WLAN.Authentication.AuthenticationTypes.NONE&lt;br /&gt;
.Encryption.EncryptionType = Symbol.Fusion.WLAN.Encryption.EncryptionTypes.TKIP_PASSPH&lt;br /&gt;
.Encryption.PassPhrase = _Passphrase&lt;br /&gt;
End With&lt;br /&gt;
Settings.Profiles.DeleteAll()&lt;br /&gt;
Settings.Profiles.CreateInfrastructureProfile(ProfileData)&lt;br /&gt;
Settings.Profiles.ExportAll(Symbol.Fusion.FileFormat.REG_FILE, Symbol.Fusion.WLAN.Profiles.ExportImportOpMode.MULTIPLE_PROFILE, &quot;\Application\&quot;, Guid.NewGuid.ToString &amp; &quot;.reg&quot;)&lt;br /&gt;
End Using&lt;br /&gt;
End If&lt;br /&gt;
&lt;br /&gt;
&#39;force close (possibly superfluous)&lt;br /&gt;
Application.Exit()&lt;br /&gt;
End Sub&lt;br /&gt;
End Module&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Pay attention to the WLAN settings - this example relates to our infrastructure but yours may differ. Luckily, for English-speakers, the settings in the Fusion API closely resemble the options in the &quot;Manage Profiles&quot; option on the Motorola Fusion tray icon that is installed by default on most devices so it&#39;s quite easy to work out what your settings should be if you have successfully configured the device using the Motorola UI.&lt;br /&gt;
&lt;br /&gt;
From here, it&#39;s pretty straightforward. You simply need to run the application on the device with the correct settings passed in. This is where those CE tools come in. I copied all these tools to a folder names &quot;tools&quot; in our deployment application. From here, I can copy the executable I just made to the device and execute it with the arguments I need to.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;&lt;br /&gt;
Private Sub RunWait(ByVal App As String, ByVal Args As String)&lt;br /&gt;
Dim AppProcess As System.Diagnostics.Process&lt;br /&gt;
AppProcess = New System.Diagnostics.Process()&lt;br /&gt;
AppProcess.StartInfo.FileName = App&lt;br /&gt;
AppProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal&lt;br /&gt;
AppProcess.StartInfo.Arguments = Args&lt;br /&gt;
If AppProcess.Start() Then&lt;br /&gt;
&#39;Wait until the process passes back an exit code &lt;br /&gt;
AppProcess.WaitForExit()&lt;br /&gt;
End If&lt;br /&gt;
&#39;Free resources associated with this process&lt;br /&gt;
AppProcess.Close()&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&lt;br /&gt;
&#39;copy application to device&lt;br /&gt;
RunWait(ToolsDir &amp; &quot;cecopy.exe&quot;, &quot;/IS &quot; &amp; ToolsDir &amp; &quot;MotorolaSetWLan.exe dev:\application&quot;)&lt;br /&gt;
&#39;execute app on device&lt;br /&gt;
RunWait(ToolsDir &amp; &quot;rapistart.exe&quot;, &quot;\application\MotorolaSetWLan.exe -ip 123.123.123.123 -subnet 255.255.252.0 -ssid WLAN -passphrase password&quot;)&lt;br /&gt;
&lt;br /&gt;
End Sub&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
I&#39;m sure you can elaborate some pretty cool solutions from this, I&#39;m planning a one-click deployment process for our IT Support desk to deploy quickly. Although our applications update over-the-air, Motorola hotfixes and EMDK updates currently require a lot of work to organise the upgrade - this tool will simplify the process. We also recycle devices for different purposes across the business - again, this tool will help us quickly reconfigure our devices for use in other areas of the business quickly.
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/663249923275287143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/08/follow-up-automating-setup-process-for.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/663249923275287143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/663249923275287143'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/08/follow-up-automating-setup-process-for.html' title='Follow Up: Automating the Setup Process for Motorola Devices'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-4337420025515056341</id><published>2011-07-25T01:23:00.000-07:00</published><updated>2012-01-26T07:06:21.390-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Motorola"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows CE"/><category scheme="http://www.blogger.com/atom/ns#" term="WT4000 Series"/><title type='text'>Upgrading Motorola Devices</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
This procedure is useful to return your device back to factory settings or to upgrade the OS image / firmware to a newer version with Motorola bug fixes applied.&lt;br /&gt;
&lt;br /&gt;
This example was written with the WT4090 in hand - but the same rules apply to the MC3190 (just with slightly different file names!)&lt;br /&gt;
&lt;br /&gt;
This guide assumes you have a device cradle, USB connection and Microsoft ActiveSync installed.&lt;br /&gt;
&lt;br /&gt;
All firmware images are available from the Motorola Support Central website. You will need to sign up and provide the serial number for a device that is currently under support contract.&lt;br /&gt;
&lt;br /&gt;
1. Dock the device in the cradle.&lt;br /&gt;
&lt;br /&gt;
2. Navigate to ActiveSync and click the &quot;Explore&quot; button.&lt;br /&gt;
&lt;br /&gt;
3. Delete everything in the &quot;\Temp&quot; folder.&lt;br /&gt;
&lt;br /&gt;
4. Copy the OS Update folder to the &quot;\Temp&quot; folder. (In this example, we&#39;re copying &quot;WT40X0 OSUpdate&quot; to &quot;\Temp\WT40x0 OSUpdate&quot; - this is important to follow these instructions carefully - the shortcut that runs the update points to this folder specifically) If you run out of space, you may need to use the SD card for your update or delete your applications from the \Application folder to free up some space.&lt;br /&gt;
&lt;br /&gt;
5. Close any running programs on the device.&lt;br /&gt;
&lt;br /&gt;
6. Navigate to the &quot;\Temp&quot; folder on the device itself (or the \Storage folder if you opted for an SD card install).&lt;br /&gt;
&lt;br /&gt;
7. Click the &quot;40x0c50BenColor_TEMP&quot; link to begin the OS Update. If this link fails - repeat steps 2 through 7 (you&#39;d be amazed how often this fixes the problem!). If you opted for the storage card route, apply the update by clicking the shortcut with the &quot;_STORAGE&quot; suffix or, if this is not present, open the shortcut in notepad and modify the folder the shortcut points to.
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/4337420025515056341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/07/os-updates-for-motorola-devices.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/4337420025515056341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/4337420025515056341'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/07/os-updates-for-motorola-devices.html' title='Upgrading Motorola Devices'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-2352557657505008802</id><published>2011-04-11T06:00:00.000-07:00</published><updated>2012-01-26T07:06:38.224-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MC3100 Series"/><category scheme="http://www.blogger.com/atom/ns#" term="Motorola"/><category scheme="http://www.blogger.com/atom/ns#" term="Wireless"/><category scheme="http://www.blogger.com/atom/ns#" term="WT4000 Series"/><title type='text'>Automating the Setup Process for Motorola Devices</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
Every new device that arrives on site is now almost fully automated with our setup routines.&lt;br /&gt;
&lt;br /&gt;
There is however, one stumbling block.&lt;br /&gt;
&lt;br /&gt;
We have spent hours trying to see if we can automate the static IP address allocation to the devices.&lt;br /&gt;
&lt;br /&gt;
The profile settings are stored in the registry in the following location;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;HKLM\Software\Symbol Technologies, Inc\Profiles&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Unfortunately, there seems to be some form of encryption / obfuscation going on around this. (Probably because otherwise it would contain your WiFi passphrase in plain text)&lt;br /&gt;
&lt;br /&gt;
The start seems to start with unicode (not sure which codepage / subset) characters;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;codeDiv&quot;&gt;&lt;code&gt;123456789ABCDEFabcdef1234567890123456789&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
from here onwards, the data seems entirely uneditable. Setting the static IP to another value seems to change the registry binary in 3 places, but there is no logic I could find to allow us to deploy these devices in a fully automated manner.&lt;br /&gt;
&lt;br /&gt;
If anyone else knows how, the help would be greatly appreciated.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt; &lt;a href=&quot;http://dotfret.blogspot.com/2011/08/follow-up-automating-setup-process-for.html&quot;&gt;Sorted! I can now automate the WLAN settings configuration.&lt;/a&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/2352557657505008802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/04/automating-setup-process-for-motorola.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/2352557657505008802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/2352557657505008802'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/04/automating-setup-process-for-motorola.html' title='Automating the Setup Process for Motorola Devices'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-4504565211772437739</id><published>2011-03-09T00:47:00.000-08:00</published><updated>2014-07-14T08:17:14.395-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AppCenter"/><category scheme="http://www.blogger.com/atom/ns#" term="MC3100 Series"/><category scheme="http://www.blogger.com/atom/ns#" term="Motorola"/><category scheme="http://www.blogger.com/atom/ns#" term="WT4000 Series"/><title type='text'>How To: Exit AppCenter</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
Simple enough for anyone with experience but people new to the Motorola MC3190 or similar devices may not be aware how to do this.&lt;br /&gt;
&lt;br /&gt;
You need to navigate to the &quot;Tools&quot; menu. You can either use the touch screen on your device or, in the case of the WT 4090 which does not have a touch screen, you&#39;ll need to press ALT + ALT. (This is actually 4 key presses: Blue, CTRL(Tab), Blue, CTRL(Tab))&lt;br /&gt;
&lt;br /&gt;
Select the &quot;Admin Login&quot; option. The default password is &quot;symbol&quot; (WT4090 requires you to press either the grey or orange button before each letter of the password) but this password may have been changed if your AppCenter was set up by a third party. To override this password, &lt;a href=&quot;http://dotfret.blogspot.com/2011/10/forgotten-password-motorola-appcenter.html&quot;&gt;read my blog entry on AppCenter Password Recovery&lt;/a&gt;.&lt;br /&gt;
&lt;p&gt;You will then need to select the &quot;Tools&quot; option again and select the &quot;Exit&quot; option. (Not &quot;Logout&quot; - this option will simply return you back to the AppCenter launch menu)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update 14th July 2014:&lt;/b&gt; It seems on newer devices (CE7) you need to select ALT + CTRL (so on double tap that&#39;s 3 key presses: Blue, CTRL, CTRL.)&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/4504565211772437739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/03/how-to-exit-appcenter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/4504565211772437739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/4504565211772437739'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/03/how-to-exit-appcenter.html' title='How To: Exit AppCenter'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-1171886344933065787</id><published>2011-03-07T02:31:00.000-08:00</published><updated>2012-01-26T07:07:01.930-08:00</updated><title type='text'>WT4090 Warm Boots After Battery Swap</title><content type='html'>&lt;div class=&quot;mainPost&quot;&gt;
We recently returned a WT4000 series device to Motorola as faulty. Our application runs in a &quot;kiosk mode&quot;, not allowing the user any access to the underlying system or Windows. When the user swaps the battery (an operation they can do up to 3 times in any given shift), the WT should preserve the application in memory and, when the battery is re-inserted, continue as if the device was simply put to sleep. (Within a reasonable amount of time, of course. We recommend our staff do not leave the battery out for more than a minute but it will last longer than this.)&lt;br /&gt;
&lt;br /&gt;
The device we received did not behave this way. Removing the battery at any point would cause the device to warm boot when re-inserting the battery. This was obviously a big problem for us.&lt;br /&gt;
&lt;br /&gt;
The device was duly returned and Motorola support responded that they could not find an issue with the device. After a few email exchanges, the issue was found. The only problem was that Motorola did not view it as an issue. They stated that the device behaved as per the manual but they had found a way to make the device behave the same way as other devices. The solution was to replace the supercap in the faulty device. Replacing this component meant the device had enough power stored internally to survive the time without the battery.&lt;br /&gt;
&lt;br /&gt;
So despite the fact that this unit has a component which CLEARLY works differently to other components in over 40 other devices we have, Motorola believe this is not a fault. They hid behind the manual which states the device must be put into suspend mode before removing the battery;&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0Eg_XmJiJGuv8P2XCABelBswn1uB31RGXn2Sbtl4q-3DVdbbjETlEAg_vcGWLhDaJ4t6EXMo4Yi4m6gu67Reg8EFdx5oYKCy-W6FOjgibonJ0dLiQo1INXuI6jHBlHrRhPW_bXgltvA/s1600/battery.gif&quot;&gt;&lt;img style=&quot;float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0Eg_XmJiJGuv8P2XCABelBswn1uB31RGXn2Sbtl4q-3DVdbbjETlEAg_vcGWLhDaJ4t6EXMo4Yi4m6gu67Reg8EFdx5oYKCy-W6FOjgibonJ0dLiQo1INXuI6jHBlHrRhPW_bXgltvA/s320/battery.gif&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5581286167248833906&quot; /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Bizarrely, the service engineer apologized about the devices which worked differently (or &quot;better&quot; to use his own words!) but politely told us that any devices returned with this fault in future would not be repaired.&lt;br /&gt;
&lt;br /&gt;
We are in a lucky position, in the UK there are many laws protecting us from practices such as this but I worry about consumers in other countries. Has anyone experienced this woeful denial of faults with their Motorola contract?&lt;br /&gt;
&lt;br /&gt;
We trialled a device before committing to purchase, so if any device arrives on site that performs differently to the trial device we are covered by UK law to demand a refund, replacement or repair. Which of those three options we receive is up to our reseller, but at least we have the protection. And to date, this has been the only device that has arrived with this issue. I can&#39;t say I&#39;m looking forward to the arguments when another arrives with this problem, though.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/1171886344933065787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2011/03/wt4090-warm-boots-after-battery-swap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1171886344933065787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1171886344933065787'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2011/03/wt4090-warm-boots-after-battery-swap.html' title='WT4090 Warm Boots After Battery Swap'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0Eg_XmJiJGuv8P2XCABelBswn1uB31RGXn2Sbtl4q-3DVdbbjETlEAg_vcGWLhDaJ4t6EXMo4Yi4m6gu67Reg8EFdx5oYKCy-W6FOjgibonJ0dLiQo1INXuI6jHBlHrRhPW_bXgltvA/s72-c/battery.gif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8129276591833023317.post-1744295338054448318</id><published>2010-12-22T01:45:00.000-08:00</published><updated>2011-01-20T02:16:17.702-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Compact Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="MC3100 Series"/><category scheme="http://www.blogger.com/atom/ns#" term="Motorola"/><category scheme="http://www.blogger.com/atom/ns#" term="WT4000 Series"/><title type='text'>Persisting .Net Framework on CE Devices</title><content type='html'>I thought I&#39;d share my experiences on getting .NET to persist after a cold boot.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;This is intended as a guide only. The devices I used are the Motorola WT4090 and Motorola MC3190 but the process should work for all CE devices. No guarantees are given, however.&lt;br /&gt;&lt;br /&gt;The samples given are for the ARMV4i architecture only.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I&#39;m not sure on the legality of sharing files (even redistributables) so I&#39;m afraid I won&#39;t share any files but I will share the process I followed to get this working.&lt;br /&gt;&lt;br /&gt;Placing the .NET redistributable .CAB file in the \Application folder has two bad side effects;&lt;br /&gt;&lt;br /&gt;Firstly, the file is deleted once exploded if run from it&#39;s current position&lt;br /&gt;The installation is very slow, often taking longer than your system waits for your .NET application to start - so your application fails to load because the framework is not there.&lt;br /&gt;&lt;br /&gt;The workaround is to take the redistributable .NET installation cab file and remove the files it simply copies and place these is a sub folder in the \Application folder of your device.&lt;br /&gt;&lt;br /&gt;I will include the .NET 3.5 ARMV4I script I created for our Motorola WT4090 and Motorola MC3190 devices;&lt;br /&gt;&lt;br /&gt;File NET35.CPY:&lt;br /&gt;&lt;div class=&quot;codeDiv&quot;&gt;&lt;br /&gt;&lt;code&gt;\Application\NET35\cgacutil.exe.400~499~ARMV4 &gt; \Windows\cgacutil.exe.400~499~ARMV4&lt;br /&gt;\Application\NET35\cgacutil.exe.400~499~ARMV4I &gt; \Windows\cgacutil.exe.400~499~ARMV4I&lt;br /&gt;\Application\NET35\cgacutil.exe.500~699~ARMV4I &gt; \Windows\cgacutil.exe.500~699~ARMV4I&lt;br /&gt;\Application\NET35\CustomMarshalers.dll &gt; \Windows\CustomMarshalers.dll&lt;br /&gt;\Application\NET35\Microsoft.VisualBasic.dll &gt; \Windows\Microsoft.VisualBasic.dll&lt;br /&gt;\Application\NET35\Microsoft.Windowsce.Forms.dll &gt; \Windows\Microsoft.Windowsce.Forms.dll&lt;br /&gt;\Application\NET35\Microsoft.WindowsMobile.DirectX.dll &gt; \Windows\Microsoft.WindowsMobile.DirectX.dll&lt;br /&gt;\Application\NET35\mscoree.dll.400~499~ARMV4 &gt; \Windows\mscoree.dll.400~499~ARMV4&lt;br /&gt;\Application\NET35\mscoree.dll.400~499~ARMV4I &gt; \Windows\mscoree.dll.400~499~ARMV4I&lt;br /&gt;\Application\NET35\mscoree.dll.500~699~ARMV4I &gt; \Windows\mscoree.dll.500~699~ARMV4I&lt;br /&gt;\Application\NET35\mscorlib.dll &gt; \Windows\mscorlib.dll&lt;br /&gt;\Application\NET35\netcfagl3_5.dll.400~499~ARMV4I &gt; \Windows\netcfagl3_5.dll.400~499~ARMV4I&lt;br /&gt;\Application\NET35\netcfagl3_5.dll.500~699~ARMV4I &gt; \Windows\netcfagl3_5.dll.500~699~ARMV4I&lt;br /&gt;\Application\NET35\netcfd3dm3_5.dll.400~499~ARMV4I &gt; \Windows\netcfd3dm3_5.dll.400~499~ARMV4I&lt;br /&gt;\Application\NET35\netcfd3dm3_5.dll.500~699~ARMV4I &gt; \Windows\netcfd3dm3_5.dll.500~699~ARMV4I&lt;br /&gt;\Application\NET35\System.Core.dll &gt; \Windows\System.Core.dll&lt;br /&gt;\Application\NET35\System.Data.dll &gt; \Windows\System.Data.dll&lt;br /&gt;\Application\NET35\System.dll &gt; \Windows\System.dll&lt;br /&gt;\Application\NET35\System.Drawing.dll &gt; \Windows\System.Drawing.dll&lt;br /&gt;\Application\NET35\System.Messaging.dll &gt; \Windows\System.Messaging.dll&lt;br /&gt;\Application\NET35\System.Net.Irda.dll &gt; \Windows\System.Net.Irda.dll&lt;br /&gt;\Application\NET35\System.Runtime.Serialization.dll &gt; \Windows\System.Runtime.Serialization.dll&lt;br /&gt;\Application\NET35\System.ServiceModel.dll &gt; \Windows\System.ServiceModel.dll&lt;br /&gt;\Application\NET35\System.Web.Services.dll &gt; \Windows\System.Web.Services.dll&lt;br /&gt;\Application\NET35\System.Windows.Forms.dll &gt; \Windows\System.Windows.Forms.dll&lt;br /&gt;\Application\NET35\System.Xml.dll &gt; \Windows\System.Xml.dll&lt;br /&gt;\Application\NET35\System.Xml.Linq.dll &gt; \Windows\System.Xml.Linq.dll&lt;br /&gt;\Application\NET35\mscoree.dll &gt; \Windows\mscoree.dll&lt;br /&gt;\Application\NET35\netcfagl3_5.dll &gt; \Windows\netcfagl3_5.dll&lt;br /&gt;\Application\NET35\netcfd3dm3_5.dll &gt; \Windows\netcfd3dm3_5.dll&lt;br /&gt;\Application\NET35\Microsoft.VisualBasic.SR.dll &gt; \Windows\Microsoft.VisualBasic.SR.dll&lt;br /&gt;\Application\NET35\NETCFv35.Messages.EN.gac &gt; \Windows\NETCFv35.Messages.EN.gac&lt;br /&gt;\Application\NET35\System.SR.dll &gt; \Windows\System.SR.dll&lt;br /&gt;\Application\NET35\Microsoft.VisualBasic.SR.dll &gt; \Windows\Microsoft.VisualBasic.SR.dll&lt;br /&gt;\Application\NET35\System.Data.DataSetExtensions.dll &gt; \Windows\System.Data.DataSetExtensions.dll&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;These files are now removed from our .CAB file. If you have any knowledge of creating CAB installations for CE in Visual Studio, I&#39;d strongly recommend you use this to install the remaining items, otherwise, you can edit the _setup.xml file contained in the redistributable .NET cab file to remove references to the files you removed.&lt;br /&gt;&lt;br /&gt;For reference, the file I install on our devices has the following files;&lt;br /&gt;&lt;br /&gt;_setup.xml&lt;br /&gt;00CABB4C.002&lt;br /&gt;0NETCF35.000&lt;br /&gt;GCACUTIL.001&lt;br /&gt;SETUPDLL.999&lt;br /&gt;&lt;br /&gt;_setup.xml&lt;br /&gt;&lt;div class=&quot;codeDiv&quot;&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;wap-provisioningdoc&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;Install&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;InstallPhase&amp;quot; value=&amp;quot;install&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;SetupDLL&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;OSVersionMin&amp;quot; value=&amp;quot;4.0&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;OSVersionMax&amp;quot; value=&amp;quot;6.999&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;BuildNumberMin&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;BuildNumberMax&amp;quot; value=&amp;quot;-536870912&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;UnsupportedPlatforms&amp;quot; value=&amp;quot;HPCJUPITERSMARTPHONEPOCKETPC&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;AppName&amp;quot; value=&amp;quot;Microsoft .NET CF 3.5&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;InstallDir&amp;quot; value=&amp;quot;%CE2%&amp;quot; translation=&amp;quot;install&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;NumDirs&amp;quot; value=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;NumFiles&amp;quot; value=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;NumRegKeys&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;NumRegVals&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;NumShortcuts&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;FileOperation&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;%CE2%&amp;quot; translation=&amp;quot;install&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;MakeDir&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;cgacutil.exe&amp;quot; translation=&amp;quot;install&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;Extract&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;Source&amp;quot; value=&amp;quot;CGACUTIL.001&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;NoOverwriteIfNewer&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;Shared&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;WarnIfSkip&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;%InstallDir%&amp;quot; translation=&amp;quot;install&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;MakeDir&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;mscoree3_5.dll&amp;quot; translation=&amp;quot;install&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;Extract&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;Source&amp;quot; value=&amp;quot;00CABB4C.002&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;Shared&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;WarnIfSkip&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;Registry&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;characteristic type=&amp;quot;HKLM\Software\Microsoft\.NETCompactFramework\Installer&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;parm name=&amp;quot;GACPath&amp;quot; value=&amp;quot;%InstallDir%&amp;quot; datatype=&amp;quot;string&amp;quot; translation=&amp;quot;install&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;/characteristic&amp;gt;&lt;br /&gt;&amp;lt;/wap-provisioningdoc&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Motorola have an unsupported scripting language called SymScript - ask your reseller or Motorola to provide you with information / files for this.&lt;br /&gt;&lt;br /&gt;Using SymScript (or your device&#39;s similar scripting model), you can prevent deletion of your CAB files on installation and install them direct from the \Application folder, reducing the time it takes to load the OS after a cold boot.&lt;br /&gt;&lt;br /&gt;Our SymScript SPT file is simply placed in the \Application folder&lt;br /&gt;&lt;br /&gt;CAB_Install.spt&lt;br /&gt;&lt;div class=&quot;codeDiv&quot;&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;;&lt;br /&gt;;    Description:&lt;br /&gt;;    This script will install .NET Framework after cold boot&lt;br /&gt;;    after waiting for welcome.exe to complete.&lt;br /&gt;;    Can be used for other cab files such as Motorola EMDK&lt;br /&gt;;&lt;br /&gt;SetVar int True  = 1&lt;br /&gt;SetVar int False = 0&lt;br /&gt;SetVar int Debug = True&lt;br /&gt;&lt;br /&gt;SetVar String AppDir        = &quot; \Application\&quot;&lt;br /&gt;SetVar String strScript     = GetScriptName( NOEXTENSION )&lt;br /&gt;SetVar String DebugFile     = AppDir + strScript + &quot;.Dbg&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;    Check for a cold boot, if not a cold boot do nothing&lt;br /&gt;IF ( GetBootCount() &gt; 1 )&lt;br /&gt;    GOTO End   ;&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;:WaitForWelcomeToComplete&lt;br /&gt; ; Wait for Welcome.EXE to complete&lt;br /&gt;    Sleep 1000&lt;br /&gt;    IF IsProcessRunning(&quot;welcome.exe&quot;) == 1 &lt;br /&gt;        Sleep 1000&lt;br /&gt;        GOTO WaitForWelcomeToComplete&lt;br /&gt;    ENDIF&lt;br /&gt;:WelcomeDone&lt;br /&gt;&lt;br /&gt;;&lt;br /&gt;;   Install the CAB file(s)&lt;br /&gt;;&lt;br /&gt;SetVar String Cab1 = AppDir + &quot;NETCF35.cab&quot;&lt;br /&gt;&lt;br /&gt;SetVar String CabInstaller = &quot;wceload.exe&quot;&lt;br /&gt;&lt;br /&gt;SetFileAttrib Cab1 0x00000001 ; write protect the CAB files to prevent them being deleted &lt;br /&gt;&lt;br /&gt;SetVar String strCabInstallOptions   = &quot;/noui /delete 0&quot;&lt;br /&gt;&lt;br /&gt;SetVar String Cab1 = strCabInstallOptions + Cab1&lt;br /&gt;&lt;br /&gt;RUNWAIT CabInstaller Cab1 ; install cab file 1&lt;br /&gt;&lt;br /&gt;:END&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotfret.blogspot.com/feeds/1744295338054448318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dotfret.blogspot.com/2010/12/persisting-net-framework-on-ce-devices.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1744295338054448318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8129276591833023317/posts/default/1744295338054448318'/><link rel='alternate' type='text/html' href='http://dotfret.blogspot.com/2010/12/persisting-net-framework-on-ce-devices.html' title='Persisting .Net Framework on CE Devices'/><author><name>Will Robinson</name><uri>http://www.blogger.com/profile/09573257294041286815</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>