1

これは、さまざまなデバイスでさまざまなバージョンの CF を整理して、すべてのデバイスで CE/CF アプリを実行できるようにするための、私の最近の手作業とヘッドリングに対する解決策のようです。これらの身もだえはここここで読むことができます。

このリンクは、古いバージョンの CF 用にビルドされたアプリを、新しいバージョンがインストールされているデバイスで実行する方法を示しています。しかし、それは言います:

「現在インストールされているバージョンを確認するには Pocket PC で、エクスプローラーを使用して \Windows ディレクトリに移動し、cgacutil ファイルをタップします。メッセージ ボックスに、デバイスにインストールされている .NET Compact Framework のバージョンが表示されます。」

ただし、Windows エクスプローラー (Motorola 3190 デバイスには "File Explorer" はありません) では、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」は実際には何のはずですか? そのバージョン値を決定する方法を知る必要があります。

システムのプロパティで、OS 情報を確認できますが、CF のバージョンは確認できません。たとえば、次のように表示されます。

MS Windows 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」に設定されています

レガシーは古いデバイスで実行されますが、新しいデバイスでは実行されません...???

ソースの新しいビルドは、どちらでも実行されません。Framework バージョン 2.0 を対象としているため、新しいビルドが古いデバイスで実行されない理由がわかりました。しかし、なぜ新しいものではないのですか?プロジェクトが対象とするフレームワークのバージョンに対応するCF 2がインストールされています...

更新 3

ファイル [appName].exe.config をハンドヘルド デバイスの .exe と同じフォルダーにコピーしました。

これは新しい (Motorola 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

また、アプリの最新ビルド (Framework バージョン 2 に対して) を古いデバイス (Framework 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 のビルドを作成する必要がなかった、ということを示しています。これは、私の開発マシンにもそれがないためです (ただし、実際に両方で実行されるレガシー アプリのバージョンを以前にビルドしたことがあります)。デバイス)。そのため、デバイス自体が「めちゃくちゃ」になっているようです (コンパクト フレームワークの新しいバージョンが古いバージョンに置き換えられました)。

更新 7

注:新しいデバイスで実行される小さな .exe/utility は、.csproj ファイルを使用してフレームワークのバージョンを "v3.5" から "v2.0" に変更した後も実行されます。

更新 8

何が起こっているのかをさらに明確にする(混乱させる?):

3090 Symbol Handheld デバイスには、CF バージョン 1.0.3316.00 がインストールされています (Windows\cgacutil.exe による)。

3190 Motorola ハンドヘルド デバイスには Windows\cgacutil.exe はありませんが、コンパクト フレームワークのバージョン '2.0.7045.00' と '3.5.7338.00' の両方がインストールされていることを示すファイルがあります。

現在は機能していないマシンでビルドされた最後の exe は、3090 でのみ実行されます。おそらくCF Framework 1をターゲットにしています(そのバージョンのCFがインストールされたデバイスで実行されるため)

彼が去る前に、私たちは TFS を介してコードを共有し、結合されたコードの結果 (.exe) をデバイス上で実行できたので、これは非常に奇妙です。彼もそうでした。

ソースからの最新ビルドはコンパイル/ビルドされますが、3090 でも 3190 でも実行されません。CF フレームワーク バージョン 2.0 をターゲットにしています。

私が構築した最小限のユーティリティは、3190 でのみ動作します。CF Framework バージョン 2.0 を対象としています。

これはすべて、誰かに手がかりを与えますか?

更新 9

以下のIowaEricの回答で参照されているこのサイトでは、「.NET Compact Framework は cgacutil.exe というユーティリティを各デバイスにインストールします」と述べています。

そのファイル (cgacutil.exe) が 1 つのデバイスに表示されますが、他のデバイスには表示されません。

上記のリンクには、「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