2009-07-13 136 views
8

我开发了使用有针对性的框架作为.NET CF 3.5和专业版6 SDK的Windows Mobile 6专业应用程序。还创建了它的SmartDeviceCab文件。当我将它安装在没有CF 3.5的设备上时,它无法运行我的应用程序(因为设备具有.NET CF 2.0)。 现在我知道我必须在我想要运行我的应用程序的设备上安装NET CF 3.5。 如何检测CF的当前版本并从我的驾驶室安装(如果需要)安装CF 3.5。我已经探索了很多关于Setup.dll的内容,但是它的方式太旧了,我没有找到从Setup.dll运行cab文件的方法。请帮我找到解决方案。将不胜感激,如果链接/示例代码提供。更让人沮丧的是,我从来没有碰过VC++。Windows Mobile Cab安装程序检测.NET CF 3.5并安装它

我已经通过: Detecting if the Compact Framewok is installed on mobile device及其链接。

SHAILESH K.

回答

1

在WM 6,我相信(它可能是WM 5),他们不允许从另一个出租车内运行的出租车。唯一能一气呵成的方法就是通过台式机上的MSI。有关于如何开始的MSDN示例。

我在我的应用程序中检测到我的出租车中的.NET CF版本。如果它们没有正确的安装,我会安装失败,并告诉用户从桌面进行安装。这不是最好的解决方案,但MS并没有给我们一个选择。

+0

嗨ageektrapped, 感谢您的答复。你说你从驾驶室检测到.NET CF版本。你能否提供你正在检测.NET CF版本的方式(代码)并检查它是否正确? 谢谢。 Shailesh K :) – engineer 2009-07-14 05:08:38

+0

我修改了此示例中提供的代码http://msdn.microsoft.com/en-us/library/aa446531.aspx#netcfdepl_topic3 – ageektrapped 2009-07-15 01:37:24

1

这不是你的问题的答案,但在这种情况下,我只需部署两个CAB:我的应用程序和.CF CF 3.5 CAB。要告诉客户/客户安装您的应用程序并不难,并且如果它无法安装.Net cab。

0

感谢您的回复。它真的令人失望,MS没有直接的解决方案。我现在会选择MusicGenesis。我可以给用户两个出租车(1)MyApp.cab(2)NETCFv35.wm.armv4i.cab。但我想知道“NETCFv35.wm.armv4i.cab”适用于所有设备。我听说过不同的设备,如MISP,ARM等不同的指令集.NetCFv35.wm.armv4i.cab是否适用于所有的Windows Mobile 6 Professional(或更高的6.1,6.5),或者我需要做什么来照顾其他设备?

SHAILESHķ

+3

不,Armv4不会在任何平台上工作,尽管它是时下最常见的CPU。您的客户应该在这里抢.msi包:http://www.microsoft.com/downloads/details.aspx?FamilyID=E3821449-3C6B-42F1-9FD9-0041345B3385&displaylang=en – 2009-08-24 19:24:48

0

你用任何.NET 3.5特定的API的,将阻止您针对.NET 2.0框架?如果不是(或者很少),我会考虑只针对2.0。

您可能会惊讶地发现,更改您定位的框架的版本是多么容易(不幸的是,您不能像解决方案资源管理器中的其他项目类型那样转到解决方案资源管理器中的项目节点的属性工作室)。我会建议制作一个针对2.0框架的新项目,并将所有源代码放入,编译并查看您有多少错误。希望在大约5-10分钟之内,您已经完成了一个已编译和正在运行的应用程序,而不再有.NET Framework依赖性问题。

在规划我希望写的移动应用程序时,我选择了坚持使用.NET 2.0,因为许多设备默认不附带3.5。

+0

嗨mkmurray, 感谢您的答复。是的,我早些时候尝试过它,它为我工作。但我认为,这不是(永久)解决方案。未来,如果我需要开发基于CF 3.5的应用程序,那么我将再次停留在这一点上。所以我正在寻找永久的解决方案,这将有助于我在未来的WM部署。当*双向*用户就可以在同一时间 SHAILESH K. – engineer 2009-07-14 06:16:32

1

现在Windows Market Place就在那里,所以我们不需要关心必需的.NET CF版本。 Windows Market Place将执行所需的操作。 :)

3

很简单。它有一点C++代码,但你根本不需要改变它。这只是创建第二个包含要安装的。cab文件的智能设备cab项目(3。5在你的情况下),并交换安装DLL的样本中包含的C++项目创建的DLL。您只需添加描述您要安装的cab文件的位置的注册表值,并且您是黄金版。您不需要检测它们已安装的.NET版本,只需将它放在那里,它就会安装在任何现有安装的顶部。样本中有一份完整的白皮书来解释它,以及源代码。只需下载Windows Mobile 6 SDK并在安装之后导航到计算机上的此目录。打开标题为“MultiCab Whitepaper.doc”的文档并按照说明进行操作。

C:\ Program Files文件\的Windows Mobile 6周SDK \的Samples \ COMMON \ CPP \ WIN32 \ multicabinstall

我用这对我自己的项目和它的作品这么好!

0

为此,我使用NSIS。自从我编写安装脚本已经过去几个月了,所以有些细节应该是模糊的。

首先,我安装.NET CF 3.5。我使用文件NETCFSetupv35.msi,它会自动在移动设备上安装.NET CF 3.5,如果它尚不存在。如果.NET CF 3.5已经存在,它会显示一个对话框,说明它已经存在(对我们来说这是可以接受的)。您可以找到/编写一个应用程序,该应用程序将设置可由ExecWait(http://nsis.sourceforge.net/Docs/Chapter4.html)读取的返回值,然后仅在未安装.NET CF的情况下调用msi。

然后,我有8辆出租车安装,3的SQL Server Compact 3.5(需要),4软件,我们依赖于(可选的,取决于客户端),以及1对我们的应用程序。我遵循这个教程:http://nsis.sourceforge.net/NSIS_for_Smartphone。为每个节写一个节,如果你想只读,那么在节之后添加SectionIn 1 RO。然后调用CeAppMgr作为每个CAB的参数传递。