8

私はプロプライエタリWindowsCE4.2デバイス用のC#アプリケーションを作成しています(仕様やその他の情報はほとんどありません。ファイルシステムにアクセスできます。基本的にはそれだけです)。元のメーカーからのサポートを受けることはできません。

これで、.NET Compact Frameworkを問題なくインストールでき、しばらくの間すべてが機能します。しかし、時々、デバイスがリセットされると、フレームワーク、GAC、それに関連するすべてのものが削除されます。

工場出荷時のデフォルトに戻るのはハードリセットだけではないことを私は知っています。理由は次のとおりです。

  1. レジストリ設定を記憶しています(再度インストールしようとすると、フレームワークがすでにインストールされていると表示され、再インストールするかどうかを尋ねられます。したがって、レジストリキーはまだそこにあります)
  2. フレームワークをリムーバブルフラッシュカードにインストールしても、ファイルは削除されます。(ただし、ストレージカード上の他のファイルはそのままにしておきます)

先に進むことはあまりないことはわかっていますが、Windows CEの第一人者が、なぜこれが発生するのか、そしてそれを回避するための適切な方法があるかどうかを教えてくれるでしょう。私はWindowsCEについてあまり知らないので、私が知っているすべての人にとって、それは完全に標準的な動作かもしれません。

さらに言えば、これをさらに自分でトラブルシューティングする方法について何かアドバイスはありますか?現時点で私が見ることができる最善の解決策は、起動するたびにすべてを再インストールすることですが、それは少し不器用に思えます。

編集: リセット後、ファイルシステムのルートにあるGACLOG.TXTには次のものが含まれます

CGACUTIL:2008年12月8日初期化

20:43:57.000 CGACUTIL:初期化

2008年12月8日20:43:57.000 CGACUTIL:

Microsoft .NETCF3.5.GACの削除

2008年12月8日20:43:57.000 CGACUTIL:完了

2008年12月8日20:43:57.000 CGACUTIL:

2008年12月8日終了20:43:57.000

そうそう、それは間違いなくGACを削除しています。なぜ、そしてそれを止める方法は?

4

5 に答える 5

13

ここに表示されているいくつかの Windows CE および CF の動作が、この動作を引き起こしています。残念ながら、本当に良い解決策はありませんが、少なくともいくつかのガイダンスを提供できます。

  1. Windows CE は現在のオブジェクト ストアを保存します。これには、ファイル システム内のファイルが含まれますが、特に RAM 内の永続ストアには保存されません。これには、\Windows フォルダーに追加されたファイルやフォルダーが含まれます (これが重要です)。デバイスの電源が失われると (通常はソフトまたはハード リセットで)、このデータは失われます。
  2. CE レジストリは永続ストアに保存できます (おそらくデバイス上にあります)。これは、ファイル システム (ハイブとして) または目に見えない場所 (OEM が格納できる 2 つの異なる方法) にある可能性があります。これはリセット時に失われません。保存されていてフラッシュされていないアイテムのみが失われます。
  3. #2 の補足として、RegFlushKey API が呼び出されると、レジストリの変更がフラッシュされます。CAB をインストールすると、これが自動的に呼び出されます (したがって、CF をインストールすると呼び出されます)。一部の OEM は、定期的なタイマーでフラッシュすることも選択します。
  4. CF GAC がイメージにない項目を処理すると、ファイルは\Windows フォルダーに移動されます。アセンブリがアンロードされると、それらは元に戻されます(私はこの数年前に CF チームに苦情を申し立てましたが、役に立ちませんでした)。

これが意味することは、CF をストレージ カードにインストールしてアプリを実行すると、次のようになるということです。

  1. CAB のアンパック中に CF ファイルが永続ストアにコピーされる
  2. インストールレジストリキーが書かれています
  3. レジストリがフラッシュされます (保存されます)
  4. アプリの実行
  5. CF ファイルは揮発性である \Windows に (コピーではなく) 移動されます。

CFアセンブリがロードされている間にデバイスをリセットすると、ばかげた!CFはもうありません。アプリはストレージ カードにありましたが、GAC にはありませんでした。そのため、アプリは存続しますが、実行できなくなります。

ハック ソリューション: ネイティブ アプリを使用して「ブートストラップ」し、アプリを起動します。実行時に \Windows 内の CF ファイルをチェックし、存在しない場合は、永続ストレージ内の場所から CF CAB をインストールします (読み取り専用としてマークして、wceload が削除しないようにします)。

もう 1 つのオプションは、CF アセンブリを GAC ではなくアプリと共に配布することです。

于 2008-12-09T02:27:10.517 に答える
1

これは非常に古い質問であることは知っていますが、質問で述べたのと同じ問題があったので、それを機能させるために多くの調査を行いました。そして、ネイティブのブートストラップ アプリを使用せずにそれを行うことができました。

1) MSCEInfを使用して、事前に CF キャブを抽出しました。抽出したデータ (\Windows フォルダーを含む) と元のキャビネットの両方を SD カードにコピーし、完全に起動した後にデバイスに挿入しました。

2) 次に、最初に cab をインストールし、同じ SD カードまたは他の NAND ストレージに空のフォルダー (必要に応じて作成) を選択します。

3) 前に CF cab から抽出した \Windows フォルダーの内容を、CF をインストールしたフォルダーと同じフォルダーにコピーします。ファイルの上書きを求めるプロンプトが表示された場合は、常に「いいえ」を選択してください。

4) CF を使用する/必要とするすべてのアプリが同じフォルダー内にあることを確認します。アプリに属する​​サブフォルダーをそのまま配置することもできます。

とにかく、それは私のために働いた。再起動後もアプリは動作し続けます。

お役に立てれば!

于 2013-01-07T11:19:33.513 に答える
0

何かをインストールした後、RegSave を実行してレジストリ設定を保存する必要があると思います。これは、古い (.Net より前の) バージョンの Windows CE で行う必要がありました。

于 2008-12-08T19:22:10.700 に答える
0

私の DataLogic Memor CE では、手動で「セッション」を保存することで (それが何を意味するにせよ)、コールド ブート後も新しい .Net インストールを存続させることができるようになりました。ここにあります:
Start | Settings | Control Panel | Files Admin | Save session
([セッションの保存] ボタンを押した後もダイアログは開いたままですが、そのダイアログを閉じることができます。)

これには (明らかに) 手動のアクションが必要なため、別の回避策にすぎません。
少数のデバイス (開発中/試用中) に適用する方が高速ですが、追加のインストール ファイルまたは 'ctacke' によるハック コードは、おそらくより大きなボリュームに適しています。

また、ソフトウェアによって新しい .Net インストールを永続化する方法があることも意味します。それで、誰かがそれを行う方法を理解し、それを世界と共有するきっかけになるのではないでしょうか?

PS: この手動保存がどの程度一般的かはわかりません (他のデバイス、他のブランド、または他の CE バージョンにも適用される場合)。また、クリーンブートが持続するかどうかもわかりません。

于 2011-10-26T08:48:00.723 に答える
0

私は何時間もブレインストーミングを行い、ついに WinCE 7 ベースの HW デバイス構成とプロジェクト構築のユーザー ガイドを書き始めました。まもなく利用可能になります。私の研究に参加してくれてありがとう

于 2015-01-09T00:50:15.600 に答える