看起来this有一个解决方案,可以解决我最近在各种设备上整理出不同版本的CF时的烦恼和头脑,以便他们全部运行我的 CE / CF应用程序。这些扭曲可以阅读here和here。
该链接显示了一种方法,可以为旧版本的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>
这会有帮助吗?
文件&#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,它对应于项目所针对的框架版本......
我将文件[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,而这表明我没有安装它?
对我来说,文本文件表明版本2. *已安装在设备上,但尝试在那里运行最新版本(其中包含&#34; v2.0&#34;因为&#34; Framework Version&#34;属性)无法运行。没有bla.exe.config文件的沙漏失败,上面的错误信息是......?!?
我还将应用程序的最新版本(针对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只会导致瞬间沙漏 - 没有错误的消息,但也没有快乐。
进一步尝试,我采用了相反问题的项目(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已被旧版本取代)。
注意:在更新的设备上运行的小型.exe /实用程序仍然通过来自&#34; v3.5&#34;的.csproj文件更改框架版本。到&#34; v2.0&#34;
进一步澄清(混乱?)正在发生的事情:
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版
这一切能给任何人一个线索吗?
在IowaEric的答案中引用this site,它说,&#34; .NET Compact Framework将一个名为cgacutil.exe的实用程序安装到每个设备上。&#34;
我在一台设备上看到了该文件(cgacutil.exe),但没有看到另一台设备。
上面的链接也说,&#34;在掌上电脑或智能手机设备上,您可以使用文件资源管理器&#34;
...但我也看不到&#34;文件资源管理器&#34;应用[让];我有Windows资源管理器...... ???
啊哈!如该链接所述,它可以用于开始&gt;运行...&gt; cgacutil。它告诉我&#34; ... [3.5.7283.0,2.0.7045.0]&#34;
(在3190年;在3090年,它说&#34; 1.0.3316.00&#34;)
所以这就是我能够确定设备上的内容:
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
答案 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安装的一部分。谷歌,你会发现它。然后在注册表中搜索其中一个版本号,您将拥有注册表路径。再说一次,如果我在我的开发机器上,我可以告诉你。如果你仍然卡住我可以找到你。