1

看起来可以解决我最近在尝试整理各种设备上不同版本的 CF 以便它们都可以运行我的 CE/CF 应用程序时的手忙脚乱和头疼的问题。这些扭动可以在这里这里阅读。

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

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

但是,Windows 资源管理器(我的 Motorola 3190 设备上没有“文件资源管理器”)在 Windows 文件夹中没有显示“cgacutil”。文件夹的文件居民从“ceconfig”变为“charset”,它们之间没有“cg*”。

上面链接的 URL 还说:

“将应用程序设置为在 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>

但是“v3.5.7000”实际上应该是什么?我需要知道如何确定该版本值。

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

微软视窗 CE 版本 6.00

更新

四处寻找,我注意到设备上有一个名为“Microsoft .NET CF 2.0.LOG.TXT”的文件

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

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

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

那会有帮助吗?

更新 2

文件“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。

有问题的项目将框架版本设置为“v2.0”

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

新版本的源代码都不会在任何一个上运行。由于它针对的是框架版本 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.* 已安装在设备上,但尝试在那里运行最新版本(其中“v2.0”作为“框架版本”属性)无法运行,这对我来说真的很可怕/令人沮丧。没有 bla.exe.config 文件的沙漏,与上面的错误消息一起失败......?!?

更新 5

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

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

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

更新 6

进一步试验,我采用了相反问题的项目(框架版本是 v3.5,可以在较新的设备上运行,但不能在较旧的设备上运行),并编辑了它的 .csproj 文件,<TargetFrameworkVersion>从“v3.5”()到“v2.0”(我首先尝试将其更改为“v1.0”,但收到错误消息:“此项目需要.NET Compact Framework v1.0,未安装在此机器上。 ”所以将其更改为“ v1.0”到“v2.0”

但是,这并没有帮助-该构建也无法在(较旧的)手持设备上运行...

不过,错误消息告诉我,我以前从未需要创建框架版本 1.0 构建,因为我的开发机器上什至没有它(但我之前构建了确实在两者上都运行的旧应用程序的版本设备)。因此,设备本身似乎被“弄乱了”(Compact Framework 的新版本已被旧版本取代)。

更新 7

注意:在通过 .csproj 文件将框架版本从“v3.5”更改为“v2.0”后,在较新设备上运行的小型 .exe/实用程序仍然有效

更新 8

为了进一步澄清(混淆?)发生了什么:

3090 Symbol 手持设备已安装 CF 版本 1.0.3316.00(根据 Windows\cgacutil.exe)

3190 摩托罗拉手持设备没有 Windows\cgacutil.exe,但有一个文件指示其上安装了 Compact Framework 的“2.0.7045.00”和“3.5.7338.00”两个版本

由已故开发人员在现已失效的机器上构建的最后一个 exe 仅在 3090 上运行。它以 CF 框架 1 为目标,大概是(因为它在安装了该版本 CF 的设备上运行)

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

来自我的源代码的最新构建编译/构建,但既不在 3090 也不在 3190 上运行。它针对 CF 框架版本 2.0

我构建的一个简约实用程序仅在 3190 上运行。它针对 CF 框架版本 2.0

这一切是否给任何人一个线索?

更新 9

在下面 IowaEric 的回答中引用的这个站点上,它说:“.NET Compact Framework 在每个设备上安装了一个名为 cgacutil.exe 的实用程序。”

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

上面的链接还说,“在 Pocket PC 或 Smartphone 设备上,您可以使用文件资源管理器”

...但我也没有看到“文件资源管理器”应用程序[let];我有 Windows 资源管理器...???

更新 10

啊哈!如该链接中所述,转到开始>运行...> cgacutil确实有效。它告诉我“... [3.5.7283.0, 2.0.7045.0]”

(在 3190 上;在 3090 上显示“1.0.3316.00”)

更新 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   
4

1 回答 1

1

我会诚实的。我没有阅读你的整个问题。但是针对标题问题,请检查此问题-以编程方式检查安装了哪些版本的 .NET Compact Framework

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

这个站点有一个小表格,可以帮助您将运行时版本与 CF 版本对应起来 - http://www.christec.co.nz/blog/archives/113

此信息也存储在注册表中。要查看和编辑注册表,您应该在 c:\program files\ce tools\bin\ 中有一个注册表编辑器。我不确定那个路径,因为我现在不在我的开发电脑上。这可能与 windows mobile sdks 之一一起安装,或者它可能是 windows ce power Toy 安装的一部分。谷歌,你会找到它。然后在注册表中搜索其中一个版本号,您将获得注册表路径。同样,如果我在我的开发机器上,我可以告诉你。如果您仍然卡住,我可以为您找到。

于 2014-04-29T02:31:34.153 回答