如何确定设备上安装的Compact Framework的版本?

时间:2014-04-28 18:04:26

标签: compact-framework windows-ce windows-explorer handheld compact-framework2.0

看起来this有一个解决方案,可以解决我最近在各种设备上整理出不同版本的CF时的烦恼和头脑,以便他们全部运行我的 CE / CF应用程序。这些扭曲可以阅读herehere

该链接显示了一种方法,可以为旧版本的CF构建一个应用程序,以便在安装了较新版本的设备上运行。但它说:

"确定当前安装的版本 在Pocket PC上,使用文件资源管理器导航到\ Windows目录并点击cgacutil文件。 将出现一个消息框,其中包含安装在设备上的.NET Compact Framework版本。"

然而,Windows资源管理器(没有"文件浏览器"在我的Motorola 3190设备上)显示没有" cgacutil"在Windows文件夹中。该文件夹的文件居民来自" ceconfig" to" charset"没有" cg *"他们之间。

上面链接的网址也说:

"设置要在3.5版上运行的应用程序 确定在设备上运行的.NET Compact Framework的版本号。"

我该如何确定?据我所知,我可以将一个名为[appName] .exe.config的数据添加到手持设备中,所有这些都将是彩虹炖/大冰糖山:

<configuration>
  <runtime>
      <compatibilityversion major="2" minor="0"/>
  </runtime>  
  <startup>
      <supportedRuntime version="v3.5.7000"/>  // <= what value should this be/what is on my device?
  </startup>
</configuration>

但&#34; v3.5.7000&#34;实际应该是什么?我需要知道如何确定版本值。

在系统属性中,我可以看到一些操作系统信息,但不能看到CF版本。例如,我看到了:

MS Windows CE版本6.00

更新

四处寻找,我注意到设备上有一个名为&#34; Microsoft .NET CF 2.0.LOG.TXT&#34;

的文件

文件名表示安装了IS 2.0的CF版本

因此,由于在其他设备上运行的.exe似乎是CF 1,我可以将其用作[appName] .exe.config文件的内容(文件内的内容对于版本更具体数):

<configuration>
  <runtime>
      <compatibilityversion major="1" minor="0"/>
  </runtime>  
  <startup>
      <supportedRuntime version="v2.0.7045.00"/>  
  </startup>
</configuration>

这会有帮助吗?

更新2

文件&#34; Microsoft .NET CF 2.0.LOG文件包含一些有趣的信息:

25/04/2014 16:50:32: Entered Install_Init().
    First Call: Yes
    Previously Installed: No
    Installation folder is: '\Windows'.
25/04/2014 16:50:32: Build 2.0.7045.00 created on Feb 13 2007 at 22:23:41
25/04/2014 16:50:32: Device CPU: 'ARMV4I', 05020000 (84017152)
25/04/2014 16:50:32: MOTOROLA WinCE 6.00
25/04/2014 16:50:32: AKU string : ''
25/04/2014 16:50:32: OEM info   : 'MOTOROLA MC3100R'
25/04/2014 16:50:32: Our trust level is: 2
. . .
25/04/2014 16:50:32: Invoker's command line: '/noui \Windows\NETCFV2.wce5.armv4i.cab'
25/04/2014 16:50:32: Memory status, K --------------------------
25/04/2014 16:50:32:   Load           : 35
25/04/2014 16:50:32:   Physical       : 55616
25/04/2014 16:50:32:   Physical free  : 36440
25/04/2014 16:50:32:   Virtual        : 1048576
25/04/2014 16:50:32:   Virtual free   : 1047936
25/04/2014 16:50:32: Storage status, K -------------------------
25/04/2014 16:50:32:   Available to us: 17020
25/04/2014 16:50:32:   Total storage  : 30080
25/04/2014 16:50:32:   Available total: 17020
25/04/2014 16:50:32: -------------------------------------------
25/04/2014 16:50:32: About to process registry.
25/04/2014 16:50:32: Opened CF registry key OK. 
25/04/2014 16:50:32: Looking for upgradeable installations for version '2.0.7045.00'
25/04/2014 16:50:32: Got version value '3.5.7338.00'
25/04/2014 16:50:32: Side by side version '3.5.7338.00' found and skipped.
25/04/2014 16:50:32: Added new CF version value '2.0.7045.00'.
25/04/2014 16:50:32: CF registry key closed.
25/04/2014 16:50:36: Entered Install_Exit().
    Failed Dirs: 0
    Failed Files: 0
    Failed RegKeys: 0
    Failed RegVals: 0
    Failed Shortcuts: 0
. . .
25/04/2014 16:50:36: Processing alternative file: '\Windows\.NET CF 2.0\cgacutil.exe.-500~-500~ARMV4I'.
25/04/2014 16:50:36: Special file extension: '.-500~-500~ARMV4I'.
25/04/2014 16:50:36: File is intended for OS: -500 to -500, CPU: ARMV4I
25/04/2014 16:50:36: Device CPU: 'ARMV4I', 05020000 (84017152)
25/04/2014 16:50:36: CPU matches.
25/04/2014 16:50:36: Version MIN ignored.
25/04/2014 16:50:36: Version MAX ignored.
25/04/2014 16:50:36: Querying version of file '\Windows\.NET CF 2.0\cgacutil.exe.-500~-500~ARMV4I'.
25/04/2014 16:50:36: Version determined to be: 2.0.7045.0.
25/04/2014 16:50:36: Get version completed.
25/04/2014 16:50:36: Querying version of file '\Windows\cgacutil.exe'.
25/04/2014 16:50:36: Version determined to be: 3.5.7283.0.
25/04/2014 16:50:36: Get version completed.
25/04/2014 16:50:36: Suggestion: do not overwrite.
25/04/2014 16:50:36: Delete file '\Windows\.NET CF 2.0\cgacutil.exe.-500~-500~ARMV4I': done.
25/04/2014 16:50:36: Processing alternative file: '\Windows\.NET CF 2.0\mscoree.dll.-500~-500~ARMV4I'.
. . .
25/04/2014 16:50:36: Adding file 'mscorlib.dll': added.
25/04/2014 16:50:36: Adding file 'system.dll': added.
25/04/2014 16:50:36: Adding file 'system.drawing.dll': added.
25/04/2014 16:50:36: Adding file 'system.messaging.dll': added.
25/04/2014 16:50:36: Adding file 'system.web.services.dll': added.
25/04/2014 16:50:36: Adding file 'system.windows.forms.dll': added.
25/04/2014 16:50:36: Adding file 'system.windows.forms.datagrid.dll': added.
25/04/2014 16:50:36: Adding file 'system.xml.dll': added.
25/04/2014 16:50:36: Adding file 'system.net.irda.dll': added.
25/04/2014 16:50:36: Adding file 'system.data.dll': added.
25/04/2014 16:50:36: Adding file 'microsoft.visualbasic.dll': added.
25/04/2014 16:50:36: Adding file 'microsoft.windowsce.forms.dll': added.
25/04/2014 16:50:36: Adding file 'Microsoft.WindowsMobile.DirectX.dll': added.
25/04/2014 16:50:36: Adding file 'CustomMarshalers.dll': added

因此新设备安装了2.0.7045.0版本和3.5.7283.0版本。

根据运行Windows \ cgacutil.exe时显示的内容,旧设备已安装1.0.3316.00。

有问题的项目将框架版本设置为&#34; v2.0&#34;

遗留在旧设备上运行,但不在新设备上运行...... ???

源代码的新版本都不会运行。由于它针对的是Framework 2.0版,我现在明白为什么新版本不能在旧设备上运行。但为什么不在新的?它安装了CF 2,它对应于项目所针对的框架版本......

更新3

我将文件[appName] .exe.config复制到手持设备,与.exe

相同的文件夹中

这是较新的(摩托罗拉3190)设备,据说安装了CF版本2. *和3.5 *。

尝试运行遗留(假设为CF 1.0 *构建)exe确实与exe.config文件的行为不同。我得到的是:而不是永远的沙漏;

**.NET CF Initialization Error**
to run this application, you must first install one of the following versions of the .NET Compact Framework:
v2.0.7045.00
Contact your application publisher for instructions about obtaining the appropriate version of the .NET Compact Framework.

所以它告诉我联系我自己,这没什么用。

为什么文本文件表明我安装了v2.0.7045.00,而这表明我没有安装它?

更新4

对我来说,文本文件表明版本2. *已安装在设备上,但尝试在那里运行最新版本(其中包含&#34; v2.0&#34;因为&#34; Framework Version&#34;属性)无法运行。没有bla.exe.config文件的沙漏失败,上面的错误信息是......?!?

更新5

我还将应用程序的最新版本(针对Framework版本2)复制到旧设备(安装了Framework 1的设备)。我在.exe中添加了一个[appName] .exe.config,其中包含以下内容:

<configuration>
  <runtime>
      <compatibilityversion major="2" minor="0"/>
v2.0.7045.00
  </runtime>  
  <startup>
      <supportedRuntime version="1.0.3316.00"/>  
  </startup>
</configuration>

...但是尝试运行.exe只会导致瞬间沙漏 - 没有错误的消息,但也没有快乐。

更新6

进一步尝试,我采用了相反问题的项目(Framework Version是v3.5,将在较新的设备上运行,但不在较旧的设备上运行),并编辑其.csproj文件,更改<TargetFrameworkVersion>来自&#34; v3.5&#34; ()到&#34; v2.0&#34; (我首先尝试将其更改为&#34; v1.0&#34;但收到错误消息:&#34; 此项目需要.NET Compact Framework v1.0,此计算机上未安装。< / em>&#34;因此将其从&#34; v1.0&#34;更改为&#34; v2.0&#34;

然而,这并没有帮助 - 该版本也不会在(较旧的)手持设备上运行......

错误消息告诉我,我之前从未需要创建Framework Version 1.0版本,因为我甚至没有在我的开发机器上使用它(但我之前已经构建了我们的遗留应用程序的版本,确实在两个设备上运行)。所以看起来设备本身已经被&#34;混淆了&#34; (较新版本的Compact Framework已被旧版本取代)。

更新7

注意:在更新的设备上运行的小型.exe /实用程序仍然通过来自&#34; v3.5&#34;的.csproj文件更改框架版本。到&#34; v2.0&#34;

更新8

进一步澄清(混乱?)正在发生的事情:

3090 Symbol Handheld设备安装了CF版本1.0.3316.00(根据Windows \ cgacutil.exe)

3190 Motorola手持设备没有Windows \ cgacutil.exe,但有一个文件指示两个版本&#39; 2.0.7045.00&#39;和&#39; 3.5.7338.00&#39;它上面安装了Compact Framework

最后一个基于现已解散的机器/由一个离开的开发人员构建的exe仅在3090上运行。它可能是针对CF Framework 1的(因为它运行在安装了该版本CF的设备上)

这种情况很奇怪,因为在他离开之前我们通过TFS共享代码,并且我能够在设备上运行组合代码的结果(.exe),他也是。< / p>

来自我的源编译/构建的最新版本,但不在3090和3190上运行。它针对CF Framework版本2.0

我制作的简约实用程序仅在3190上运行。它针对CF Framework 2.0版

这一切能给任何人一个线索吗?

更新9

在IowaEric的答案中引用this site,它说,&#34; .NET Compact Framework将一个名为cgacutil.exe的实用程序安装到每个设备上。&#34;

我在一台设备上看到了该文件(cgacutil.exe),但没有看到另一台设备。

上面的链接也说,&#34;在掌上电脑或智能手机设备上,您可以使用文件资源管理器&#34;

...但我也看不到&#34;文件资源管理器&#34;应用[让];我有Windows资源管理器...... ???

更新10

啊哈!如该链接所述,它可以用于开始&gt;运行...&gt; cgacutil。它告诉我&#34; ... [3.5.7283.0,2.0.7045.0]&#34;

(在3190年;在3090年,它说&#34; 1.0.3316.00&#34;)

更新11

所以这就是我能够确定设备上的内容:

OS (Windows CE) version of 3090 == 05.00.1400
OS (Windows CE) version of 3190 == 06.00

CF versions installed on the devices:
Symbol 3090 == 1.0.3316.00
Motorola 3190 == 2.0.7045.0 & 3.5.7283.0

CF Version chart:
1.0.3316.0 == 1.0 SP2
2.0.7045.0 == 2.0 SP2   

1 个答案:

答案 0 :(得分:1)

我会说实话。我没有读完你的整个问题。但是在回答标题问题时,请检查此问题 - Programatically check which versions of .NET Compact Framework are installed

我认为WinMo设备可以安装多个版本的CF.

此网站有一个小桌子,可以帮助您将运行时版本映射到CF版本 - http://www.christec.co.nz/blog/archives/113

此信息也存储在注册表中。要查看和编辑注册表,您应该在c:\ program files \ ce tools \ bin \中有一个注册表编辑器。我不确定该路径,因为我现在不在我的开发PC上。可能安装了一个Windows移动sdks或它可能是windows ce power toys安装的一部分。谷歌,你会发现它。然后在注册表中搜索其中一个版本号,您将拥有注册表路径。再说一次,如果我在我的开发机器上,我可以告诉你。如果你仍然卡住我可以找到你。