<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Peter Foot - Deployment</title>
    <link>http://peterfoot.net/</link>
    <description>Microsoft Device Application Development MVP</description>
    <image>
      <url>http://peterfoot.net/images/mugshot.jpg</url>
      <title>Peter Foot - Deployment</title>
      <link>http://peterfoot.net/</link>
    </image>
    <copyright>Peter Foot</copyright>
    <lastBuildDate>Thu, 23 Feb 2006 09:43:06 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8102.813</generator>
    <managingEditor>peter.foot@appamundi.com</managingEditor>
    <webMaster>peter.foot@appamundi.com</webMaster>
    <item>
      <trackback:ping>http://peterfoot.net/Trackback.aspx?guid=3cf86dbd-be04-45ba-b7b0-5ec26d85c098</trackback:ping>
      <pingback:server>http://peterfoot.net/pingback.aspx</pingback:server>
      <pingback:target>http://peterfoot.net/PermaLink,guid,3cf86dbd-be04-45ba-b7b0-5ec26d85c098.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This <a href="http://blogs.msdn.com/windowsmobile/archive/2006/02/03/524592.aspx">recent
article</a> discussed one of the ways you can use XML provisioning data - through
a cab file installation. You can also pass the XML to DMProcessConfigXML or ConfigurationManager.ProcessConfiguration
in the managed world. But how about creating the XML?
</p>
        <p>
Well you could use notepad and code it all by hand as a worst-case-scenario. The next
best thing is to use the XML support in Visual Studio which will at least help to
ensure you write valid XML. <a href="http://www.inthehand.com/WindowsMobile.aspx">Mobile
In The Hand 2.0</a> takes this one step further by adding a schema into VS2005 to
ensure your document conforms to the msprov schema:-
</p>
        <p>
1. Create a new XML document in your project
</p>
        <p>
2. With the document selected locate "Schemas" in the properties pane.
</p>
        <p>
          <img src="http://www.peterfoot.net/content/binary/xmlproperties1.jpg" border="0" />
        </p>
        <p>
3. Click "..." to bring up a list of installed schemas
</p>
        <p>
          <img src="http://www.peterfoot.net/content/binary/selectschema.jpg" border="0" />
        </p>
        <p>
4. Select msprov from the list
</p>
        <p>
5. Start writing your document and watch the intellisense kick in
</p>
        <img src="http://www.peterfoot.net/content/binary/xmlintellisense.jpg" border="0" />
        <img src="http://www.peterfoot.net/content/binary/xmlintellisense2.jpg" border="0" />
        <img width="0" height="0" src="http://peterfoot.net/aggbug.ashx?id=3cf86dbd-be04-45ba-b7b0-5ec26d85c098" />
      </body>
      <title>Writing Provisioning XML for Windows Mobile</title>
      <guid isPermaLink="false">http://peterfoot.net/PermaLink,guid,3cf86dbd-be04-45ba-b7b0-5ec26d85c098.aspx</guid>
      <link>http://peterfoot.net/WritingProvisioningXMLForWindowsMobile.aspx</link>
      <pubDate>Thu, 23 Feb 2006 09:43:06 GMT</pubDate>
      <description>&lt;p&gt;
This &lt;a href="http://blogs.msdn.com/windowsmobile/archive/2006/02/03/524592.aspx"&gt;recent
article&lt;/a&gt; discussed one of the ways you can use XML provisioning data - through
a cab file installation. You can also pass the XML to DMProcessConfigXML or ConfigurationManager.ProcessConfiguration
in the managed world. But how about creating the XML?
&lt;/p&gt;
&lt;p&gt;
Well you could use notepad and code it all by hand as a worst-case-scenario. The next
best thing is to use the XML support in Visual Studio which will at least help to
ensure you write valid XML. &lt;a href="http://www.inthehand.com/WindowsMobile.aspx"&gt;Mobile
In The Hand 2.0&lt;/a&gt; takes this one step further by adding a schema into VS2005 to
ensure your document conforms to the msprov schema:-
&lt;/p&gt;
&lt;p&gt;
1. Create a new XML document in your project
&lt;/p&gt;
&lt;p&gt;
2. With the document selected locate "Schemas" in the properties pane.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.peterfoot.net/content/binary/xmlproperties1.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
3. Click "..." to bring up a list of installed schemas
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.peterfoot.net/content/binary/selectschema.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
4. Select msprov from the list
&lt;/p&gt;
&lt;p&gt;
5. Start writing your document and watch the intellisense kick in
&lt;/p&gt;
&lt;img src="http://www.peterfoot.net/content/binary/xmlintellisense.jpg" border=0&gt;&lt;img src="http://www.peterfoot.net/content/binary/xmlintellisense2.jpg" border=0&gt;&lt;img width="0" height="0" src="http://peterfoot.net/aggbug.ashx?id=3cf86dbd-be04-45ba-b7b0-5ec26d85c098" /&gt;</description>
      <category>Deployment</category>
      <category>Windows Mobile</category>
    </item>
    <item>
      <trackback:ping>http://peterfoot.net/Trackback.aspx?guid=677ac05c-1572-4f9e-843e-9a7041d88133</trackback:ping>
      <pingback:server>http://peterfoot.net/pingback.aspx</pingback:server>
      <pingback:target>http://peterfoot.net/PermaLink,guid,677ac05c-1572-4f9e-843e-9a7041d88133.aspx</pingback:target>
      <dc:creator />
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've briefly mentioned SPB Clone here before as a method of deploying software across
the enterprise. Fellow MVP <a href="http://www.burling.co.nz/default.aspx">Darryl
Burling </a>has <a href="http://www.burling.co.nz/Default.aspx?tabid=1&amp;mid=336&amp;ctl=ViewEntry&amp;EntryID=225">completed
a review</a> of the product over at GeekZone which I recommend you read if you are
facing the problem of deploying the same software across a large number of devices.
</p>
        <p>
          <a href="http://www.geekzone.co.nz/content.asp?contentid=4252">http://www.geekzone.co.nz/content.asp?contentid=4252</a>
        </p>
        <img width="0" height="0" src="http://peterfoot.net/aggbug.ashx?id=677ac05c-1572-4f9e-843e-9a7041d88133" />
      </body>
      <title>SPB Clone Review</title>
      <guid isPermaLink="false">http://peterfoot.net/PermaLink,guid,677ac05c-1572-4f9e-843e-9a7041d88133.aspx</guid>
      <link>http://peterfoot.net/SPBCloneReview.aspx</link>
      <pubDate>Tue, 22 Mar 2005 20:36:22 GMT</pubDate>
      <description>&lt;p&gt;
I've briefly mentioned SPB Clone here before as a method of deploying software across
the enterprise. Fellow MVP &lt;a href="http://www.burling.co.nz/default.aspx"&gt;Darryl
Burling &lt;/a&gt;has &lt;a href="http://www.burling.co.nz/Default.aspx?tabid=1&amp;amp;mid=336&amp;amp;ctl=ViewEntry&amp;amp;EntryID=225"&gt;completed
a review&lt;/a&gt; of the product over at GeekZone which I recommend you read if you are
facing the problem of deploying the same software across a large number of devices.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.geekzone.co.nz/content.asp?contentid=4252"&gt;http://www.geekzone.co.nz/content.asp?contentid=4252&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://peterfoot.net/aggbug.ashx?id=677ac05c-1572-4f9e-843e-9a7041d88133" /&gt;</description>
      <category>Deployment</category>
      <category>Mobility</category>
      <category>Software</category>
    </item>
    <item>
      <trackback:ping>http://peterfoot.net/Trackback.aspx?guid=06b4072d-3585-43d4-8605-f7cebc6387f7</trackback:ping>
      <pingback:server>http://peterfoot.net/pingback.aspx</pingback:server>
      <pingback:target>http://peterfoot.net/PermaLink,guid,06b4072d-3585-43d4-8605-f7cebc6387f7.aspx</pingback:target>
      <dc:creator />
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Earlier today I posted a link from the <a href="http://blogs.msdn.com/windowsmobile/">Windows
Mobile Team blog </a>on <a href="http://www.pocketpcthoughts.com/">Pocket PC Thoughts </a>on <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3B2C42BF-F9C4-4FDC-B602-7640A12363F4&amp;displaylang=en">an
article </a>being produced to describe rolling out mobile devices to your enterprise.
Here is some useful additional material with a more technical twist which didn't seem
appropriate to mix in with it.
</p>
        <p>
This applies only to deploying Pocket PC devices in the field, and works easiest if
you are rolling out a set of matching device models. The following sections are some
techniques which have saved me time when deploying devices:-
</p>
        <ul>
          <li>
When you first startup a Pocket PC device you are greeted by a Welcome Wizard. This
is a perfectly legitimate starting point for a consumer who has just unpacked and
charged their device, but is a real pain if you want to automatically deploy your
software onto multiple devices.  To dismiss this wizard from appearing simply
place an empty file called "welcome.not" in the root of a Storage Card. 
</li>
          <li>
No more rearranging dental appointments Great! well not quite, because this introduces
two new issues - among the introductory material in the Wizard are two very important
steps - Screen calibration and setting the Timezone. Both of these can be applied
automatically by writing entries into the Registry or calling the appropriate APIs:- 
</li>
        </ul>
        <ul dir="ltr">
          <li>
Timezone is written as a binary array here:- 
</li>
        </ul>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
            <p>
[HKEY_LOCAL_MACHINE\Time] "TimeZoneInformation" 
</p>
          </blockquote>
        </blockquote>
        <ul>
          <li>
The format of this is documented in the SDK - it's a TIME_ZONE_INFORMATION structure.
Assuming your batch of devices are all deployed to the same timezone you can copy
the value from an existing device, or if you set the value on first run of your managed
application you can make use of the <a href="http://www.opennetcf.org/library/OpenNETCF.Win32.DateTimeEx.SetTimeZoneInformation.html">DateTimeEx.SetTimeZoneInformation </a>method
in the SDF 
</li>
        </ul>
        <p>
 
</p>
        <ul>
          <li>
Screen calibration is a little more interesting, as it will depend on the hardware.
So although you can copy values from an existing device its probably better to run
the screen calibration on the first run of your application. If you choose the "dangerous"
route you'll find the calibration settings in the string value here:- 
</li>
        </ul>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
            <p>
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] "CalibrationData" 
</p>
          </blockquote>
        </blockquote>
        <ul>
          <li>
Kicking off the standard screen calibration applet from your code is very easy - just
P/Invoke TouchCalibrate which can be defined as 
</li>
        </ul>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
            <p>
              <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">[DllImport(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"coredll.dll"</span>)]<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">private</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">static</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">extern</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">bool</span> TouchCalibrate();<br /></span>
            </p>
          </blockquote>
        </blockquote>
        <ul>
          <li>
This will launch the standard calibration screen and require the user to tap the centre
and four points around the screen. It will return true on success and false if if
fails.</li>
        </ul>
        <p>
For all of this to be automatic you will need an autorun.exe file located a folder
matching the processor identifier of the device, so for any ARM based Pocket PC this
would be \2577\ on the storage card. While it is possible to write this application
in managed code if your device has .NETCF in ROM, if you are catering for a range
of devices you should write this file in native code. You can read more about this
technique <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devguidesp/html/sp_programming_pocket_pc_2002_balr.asp">here</a> and <a href="http://www.pocketpcdn.com/articles/autorun.html">here</a>.
</p>
        <p>
Following this I am currently testing Spb Clone which allows you to create a clone
image from a single unit and install it onto multiple devices, this supports either
a self extracting exe installer or an autorun approach. I will post back a mini-review
once I've done some more testing with it.
</p>
        <img width="0" height="0" src="http://peterfoot.net/aggbug.ashx?id=06b4072d-3585-43d4-8605-f7cebc6387f7" />
      </body>
      <title>No touch deployment with Pocket PC or "How I cancelled my dental appointment with Dr Johnson"</title>
      <guid isPermaLink="false">http://peterfoot.net/PermaLink,guid,06b4072d-3585-43d4-8605-f7cebc6387f7.aspx</guid>
      <link>http://peterfoot.net/NoTouchDeploymentWithPocketPCOrHowICancelledMyDentalAppointmentWithDrJohnson.aspx</link>
      <pubDate>Thu, 10 Feb 2005 21:40:45 GMT</pubDate>
      <description>&lt;p&gt;
Earlier today I posted a link from the &lt;a href="http://blogs.msdn.com/windowsmobile/"&gt;Windows
Mobile Team blog &lt;/a&gt;on &lt;a href="http://www.pocketpcthoughts.com/"&gt;Pocket PC Thoughts &lt;/a&gt;on &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3B2C42BF-F9C4-4FDC-B602-7640A12363F4&amp;amp;displaylang=en"&gt;an
article &lt;/a&gt;being produced to describe rolling out mobile devices to your enterprise.
Here is some useful additional material with a more technical twist which didn't seem
appropriate to mix in with it.
&lt;/p&gt;
&lt;p&gt;
This applies only to deploying Pocket PC devices in the field, and works easiest if
you are rolling out a set of matching device models. The following sections are some
techniques which have saved me time when deploying devices:-
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
When you first startup a Pocket PC device you are greeted by a Welcome Wizard. This
is a perfectly legitimate starting point for a consumer who has just unpacked and
charged their device, but is a real pain if you want to automatically deploy your
software onto multiple devices.&amp;nbsp; To dismiss this wizard from appearing simply
place an empty file called "welcome.not" in the root of a Storage Card. 
&lt;li&gt;
No more rearranging dental appointments Great! well not quite, because this introduces
two new issues - among the introductory material in the Wizard are two very important
steps - Screen calibration and setting the Timezone. Both of these can be applied
automatically by writing entries into the Registry or calling the appropriate APIs:- 
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul dir=ltr&gt;
&lt;li&gt;
Timezone is written as a binary array here:- 
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; &lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
[HKEY_LOCAL_MACHINE\Time] "TimeZoneInformation" 
&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt; 
&lt;ul&gt;
&lt;li&gt;
The format of this is documented in the SDK - it's a TIME_ZONE_INFORMATION structure.
Assuming your batch of devices are all deployed to the same timezone you can copy
the value from an existing device, or if you set the value on first run of your managed
application you can make use of the &lt;a href="http://www.opennetcf.org/library/OpenNETCF.Win32.DateTimeEx.SetTimeZoneInformation.html"&gt;DateTimeEx.SetTimeZoneInformation &lt;/a&gt;method
in the SDF 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Screen calibration is a little more interesting, as it will depend on the hardware.
So although you can copy values from an existing device its probably better to run
the screen calibration on the first run of your application. If you choose the "dangerous"
route you'll find the calibration settings in the string value here:- 
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; &lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] "CalibrationData" 
&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt; 
&lt;ul&gt;
&lt;li&gt;
Kicking off the standard screen calibration applet from your code is very easy - just
P/Invoke TouchCalibrate which can be defined as 
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; &lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;[DllImport(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"coredll.dll"&lt;/span&gt;)]&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;extern&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;bool&lt;/span&gt; TouchCalibrate();&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&gt; 
&lt;ul&gt;
&lt;li&gt;
This will launch the standard calibration screen and require the user to tap the centre
and four points around the screen. It will return true on success and false if if
fails.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
For all of this to be automatic you will need an autorun.exe file located a folder
matching the processor identifier of the device, so for any ARM based Pocket PC this
would be \2577\ on the storage card. While it is possible to write this application
in managed code if your device has .NETCF in ROM, if you are catering for a range
of devices you should write this file in native code. You can read more about this
technique &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devguidesp/html/sp_programming_pocket_pc_2002_balr.asp"&gt;here&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.pocketpcdn.com/articles/autorun.html"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Following this I am currently testing Spb Clone which allows you to create a clone
image from a single unit and install it onto multiple devices, this supports either
a self extracting exe installer or an autorun approach. I will post back a mini-review
once I've done some more testing with it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://peterfoot.net/aggbug.ashx?id=06b4072d-3585-43d4-8605-f7cebc6387f7" /&gt;</description>
      <category>Deployment</category>
      <category>Mobility</category>
    </item>
  </channel>
</rss>