Which cab with which device

  • Thread starter Thread starter den
  • Start date Start date
D

den

Help. Is there a list somewhere that matches which cab to install on a
device by processor type?

Thanks.

Dennis
 
Dennis,

If the device has the Pocket PC 2002 operating system then use the ARM cab.
If the Pocket PC is using the Windows Mobile 2003 or its Second Edition, use
the ARMV4 cab.

These days Pocket PCs use XScale processors and the Windows Mobile 2003 (or
Second Edition) operating system so therefore use the ARMV4 cab. Apart from
the ARM cab, the other cab types were used for other types of processors
that were around in the past that used the Pocket PC 2000 operating system.

I have chosen to release my consumer apps for ARM or ARMV4 Pocket PCs only
and so do not worry about the other types of cabs.

Regards,
Neville Lang
 
Why does Windows Mobile 2003 SE give an error (...written for an earlier
version of windows...) when installing my application? It also does it from
VS Studio when i run the app targeted for the emilator.

Thanks in advance.

Dennis
 
Neville...what is the difference between ARM and ARMV4 CAB?

We have been distributing our application to 2002 AND 2003 using the ARM
cab, NOT the ARM4 cab?

We haven't had any errors YET...lol) , but is this a performance issue
perhaps?

Glyn
 
Dennis,

I seem to remember this issue coming up before on this NG. I might have
something to do with the version of the .NET Compact Framework on your
development machine vs the one in the WM2003SE device.

Just to be sure, can you send the error message(s) you are getting.

You might also check Google Groups for past message threads on this topic.

Regards,
Neville Lang
 
Glyn,

VS .NET 2003 generates ARM code for the Pocket PC 2002 operating system,
specifically Windows CE v3.0 while it generates generate ARMV4 code for
Windows Mobile 2003 or more specifically, Windows CE 4.2. Since Windows CE
4.2 is backwards compatible with the earlier operating system, you should
have no difficulty running either an ARM or ARMV4 cab on a WM2003 PPC,
though it is unlikely that the ARMV4 cab will run on the Pocket PC 2002
device.

For my apps on CD, I supply both ARM and ARMV4 cabs and automatically
install the ARM cab if the Pocket PC 2002 o/s is detected. Likewise for
WM2003 o/s, the ARMV4 gets installed if that o/s is detected. There have
been no problems to date for me using this methodology.

Regards,
Neville Lang
 
GREAT answer Neville, but it now begs the next one which is
...."How do you detect which OS is running during an installation, and how
can you differentiate between which CAB to load"? either you have a much
more sophisticated install routine/tools than we have access to, or (which
is probably much more likely!!) we are way too dumb to figure this one out!!

Glyn
 
Glyn,

I chose to distribute my Pocket PC apps only on CD (at this stage at least)
since the image size is nearly 50Mb. This figure includes not only my app
itself but also the redists. for the Compact Framework v1.0 SP2, the Full
Framework 1.1 and ActiveSync v3.7.1.

My apps are targeted at the general public and so I need to be able to
install on any Windows desktop computer that has Win98 or later. Some Win98
and Win ME computers do not have the full framework nor do some of the older
Pocket PCs have the Compact Framework installed. Hence, the need to check
for these and install them if needed. I chose to supply them on my CD since
we have some customers that are still not connected to the Internet and
would therefore have trouble accessing these items. I have also found in
practice that some earlier Pocket PCs were shipping with ActiveSync v3.7 and
we had some problems with comms. with the PPC right from the start. So, I
ship the ActiveSync v3.7.1 and check for that as well. I have tried to be as
comprehensice as possible during installation, to cover all bases for our
customers.

The installation of my apps. is based on the Windows Installer technology
and I have setup VS .NET 2003 to generate the MSI file that ships. I do not
use InstallShield or Wise, just control the generation of the final MSI file
from VS .NET 2003 with some VBS scripting changes. It is the Custom
Installer that controls the virtually whole installation for both the
desktop programs and the Pocket PC programs, all from the CD and desktop
computer. I check if the full Framework is installed on the desktop computer
and if not, I use the redist from my CD. I do the same for the Compact
Framework and the ActiveSync version. If any of these need installing then
my installer does it form my CD.

Finally, when all this preliminary work is out of the way, I then check the
operating system on the Pocket PC from the Custom Installer program on the
desktop computer to decide if I should install the ARM or ARMV4 cab from my
CD.

Here is a code snippet:


//=== DEVICE SIDE INSTALLATION ==========================

//--- Get the Operating System Version ------------------
RAPI.CEOSVERSIONINFO DeviceOS = new RAPI.CEOSVERSIONINFO();
int iRet = RAPI.CeGetVersionEx(out DeviceOS);
if (iRet == 0)
{
HandleErrors(2);
return false;
}
// Check if the Device's operating system is within OS range i.e. Pocket PC
2002 (WinCE 3.0) or
// Windows Mobile 2003 (WinCE 4.2) or later
if ((DeviceOS.dwMajorVersion == iDevOSMajorVersion2 &&
DeviceOS.dwMinorVersion >= iDevOSMinorVersion2) || (DeviceOS.dwMajorVersion
iDevOSMajorVersion2))
{
iOS = 2; // Set OS flag
}
else if (DeviceOS.dwMajorVersion == iDevOSMajorVersion1)
{
iOS = 1; // Set OS flag
}
else
{
HandleErrors(3);
return false;
}
....
....
....

The RAPI.CEOSVERSIONINFO is a structure in my RAPI Class, as follows:

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
public struct CEOSVERSIONINFO
{
public uint dwOSVersionInfoSize;
public uint dwMajorVersion;
public uint dwMinorVersion;
public uint dwBuildNumber;
public uint dwPlatformId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
public string szCSDVersion;
}

and here is the call for CeGetVersionEx() in my RAPI Class.

[DllImport("rapi.dll", CharSet=CharSet.Unicode)]
public static extern int CeGetVersionEx([MarshalAs(UnmanagedType.Struct)]
out CEOSVERSIONINFO lpVersionInformation);


I hope this helps you.

Regards,
Neville Lang
 
ah Neville...in the words of Hamlet..."ay, there's the rub". You have the
'luxury' of distributing by CD whereas all of our applications are
distributed by web downloads, although we are starting to push the limits of
practicality there as the next release of the Desktop product is now pushing
18 megs as an .msi!! We just didn't want the expense and inherent
compelxity of CD production and distribution. Consequently, we have made
some 'assumptions' about what is already loaded on the users devices to
reduce the size of our downloads (e.g. .net frameworketc.) If they are NOT
there, we merely point them to other places to get the apporpriate
downloads.. I truly appreciate your taking the time to send me the code
snippet, and I shall peruse it with some interest as we have just spent a
good week finishing our PC<-> PPC interface using the RAPI routines. May I
ask, what is the website for your company so I can take a look at your
applications?

Regards

Glyn J Meek
www.softwareonsailboats.com




Neville Lang said:
Glyn,

I chose to distribute my Pocket PC apps only on CD (at this stage at
least)
since the image size is nearly 50Mb. This figure includes not only my app
itself but also the redists. for the Compact Framework v1.0 SP2, the Full
Framework 1.1 and ActiveSync v3.7.1.

My apps are targeted at the general public and so I need to be able to
install on any Windows desktop computer that has Win98 or later. Some
Win98
and Win ME computers do not have the full framework nor do some of the
older
Pocket PCs have the Compact Framework installed. Hence, the need to check
for these and install them if needed. I chose to supply them on my CD
since
we have some customers that are still not connected to the Internet and
would therefore have trouble accessing these items. I have also found in
practice that some earlier Pocket PCs were shipping with ActiveSync v3.7
and
we had some problems with comms. with the PPC right from the start. So, I
ship the ActiveSync v3.7.1 and check for that as well. I have tried to be
as
comprehensice as possible during installation, to cover all bases for our
customers.

The installation of my apps. is based on the Windows Installer technology
and I have setup VS .NET 2003 to generate the MSI file that ships. I do
not
use InstallShield or Wise, just control the generation of the final MSI
file
from VS .NET 2003 with some VBS scripting changes. It is the Custom
Installer that controls the virtually whole installation for both the
desktop programs and the Pocket PC programs, all from the CD and desktop
computer. I check if the full Framework is installed on the desktop
computer
and if not, I use the redist from my CD. I do the same for the Compact
Framework and the ActiveSync version. If any of these need installing then
my installer does it form my CD.

Finally, when all this preliminary work is out of the way, I then check
the
operating system on the Pocket PC from the Custom Installer program on the
desktop computer to decide if I should install the ARM or ARMV4 cab from
my
CD.

Here is a code snippet:


//=== DEVICE SIDE INSTALLATION ==========================

//--- Get the Operating System Version ------------------
RAPI.CEOSVERSIONINFO DeviceOS = new RAPI.CEOSVERSIONINFO();
int iRet = RAPI.CeGetVersionEx(out DeviceOS);
if (iRet == 0)
{
HandleErrors(2);
return false;
}
// Check if the Device's operating system is within OS range i.e. Pocket
PC
2002 (WinCE 3.0) or
// Windows Mobile 2003 (WinCE 4.2) or later
if ((DeviceOS.dwMajorVersion == iDevOSMajorVersion2 &&
DeviceOS.dwMinorVersion >= iDevOSMinorVersion2) ||
(DeviceOS.dwMajorVersion
iDevOSMajorVersion2))
{
iOS = 2; // Set OS flag
}
else if (DeviceOS.dwMajorVersion == iDevOSMajorVersion1)
{
iOS = 1; // Set OS flag
}
else
{
HandleErrors(3);
return false;
}
...
...
...

The RAPI.CEOSVERSIONINFO is a structure in my RAPI Class, as follows:

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
public struct CEOSVERSIONINFO
{
public uint dwOSVersionInfoSize;
public uint dwMajorVersion;
public uint dwMinorVersion;
public uint dwBuildNumber;
public uint dwPlatformId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
public string szCSDVersion;
}

and here is the call for CeGetVersionEx() in my RAPI Class.

[DllImport("rapi.dll", CharSet=CharSet.Unicode)]
public static extern int CeGetVersionEx([MarshalAs(UnmanagedType.Struct)]
out CEOSVERSIONINFO lpVersionInformation);


I hope this helps you.

Regards,
Neville Lang




Glyn Meek said:
GREAT answer Neville, but it now begs the next one which is
..."How do you detect which OS is running during an installation, and how
can you differentiate between which CAB to load"? either you have a much
more sophisticated install routine/tools than we have access to, or (which
is probably much more likely!!) we are way too dumb to figure this one out!!

Glyn
 
Back
Top