2

Windows CE ソリューションを .NET 1.1 から 3.5 に移植中です。

1 回だけ (Pocket PC 2003 SE Emulator に) "展開" し、.exe を実行すると、エラー メッセージが表示されて失敗しました。

エミュレーターを閉じた後、Visual Studio 2008 IDE で問題の原因となっているコンストラクター内にブレークポイントを配置し、コードをステップ実行して問題の場所を確認することを期待して、再度デプロイしました。

ただし、このコーダーの涅槃の代わりに、コンパイラからの次のコミュニケに私は悩まされました。

「展開および/または登録がエラーで失敗しました: 0x8973190e。ファイル '%CSIDL_PROGRAM_FILES%\ABC\ABC.exe' の書き込み中にエラーが発生しました。エラー 0x80070020: 別のプロセスで使用されているため、プロセスはファイルにアクセスできません。デバイス接続コンポーネント」

エミュレーターのプロセスが、南部の女子学生クラブの外に出回っていたのかもしれないと考えて、Visual Studio をシャットダウンし、再起動しました。人間の胸に永遠に湧き出る希望に満ちた F5 をもう一度叩きました。

エミュレータを元に戻すにはどうすればよいですか?

>として<aside、エミュレーターのスクリーン ショットを撮れないのは奇妙だと思います。

アップデート

その後、アプリを実行する「デバイス」である「USA Windows Mobile 5.0 Pocket PC R2 Emulator」に展開しましたが、アプリをそのペースで実行しようとすると、「例外: ファイルまたはアセンブリ名 'System.Core ,Version=3.5.0.0 ...、またはその依存関係の 1 つが見つかりませんでした"

ファイル エクスプローラーには ".NET CF 2.0" フォルダーがありますが、".NET CF 3.5" には何もありません - それでも、3.5 を使用するアプリは (少なくとも部分的に) デバイスに展開されました... 正しいですか?そのようなフォルダがあると仮定しますか?そうでない場合、System.Core バージョン 3.5 はどこにありますか?

更新 2

次に、「Windows Mobile 5.0 スマートフォン デバイス R2」を試してみたところ、次のエラーが表示されました。ディスクに十分なスペースがありません。デバイス接続コンポーネント"

ペンシルベニア・ヒップホップ!(キーラップ!)

...ああ、おっと-実際のデバイスにデプロイするのではなく、エミュレーターをもう一度使用したかったのです。

更新 3

このエラー メッセージが再度表示され、デバイスに直接デプロイされます。今日は数回実行しましたが、最後の数回はおそらく不適切な REST 呼び出し (クライアントの不適切な言葉遣い) で失敗しました。今、この「ディスクに十分なスペースがありません」というジャズが再び表示されます。

JP2Codeの提案を試してみましたが、実行中のアプリはまったく表示されず、名前が表面的に保存されているタブも表示されません。

ここに画像の説明を入力

this.Close() を Exit コードに追加することに関して、既に存在するのは次のとおりです。

DialogResult userResponse =
    MessageBox.Show("Are you sure you want to exit Duckbill?", Platypus.GetFormTitle("", "", ""),
        MessageBoxButtons.YesNo,
        MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

if (userResponse == DialogResult.Yes)
{
    Dispose(false);
}

元のコーダーがなぜこのようにしたのかはわかりませんが、この派手なコードが this.Close() の呼び出しを不要にすると思いますか?

かなり奇妙で恐ろしいカスタム「Dispose」メソッドは次のとおりです(コメントは私のものです):

protected override void Dispose(bool disposing)
{
    dbconn.DBClose();
    base.Dispose(disposing);
    Application.Exit(); // Why?
    // I would add to that "Why?" comment above with a reference to this:
    // http://codereview.stackexchange.com/questions/23133/is-there-a-valid-answer-to-this-why-comment
    // This makes me think twice about removing it, though:
    // http://social.msdn.microsoft.com/Forums/en-US/clr/thread/15efa70b-0065-44ef-ab09-7088fefd52b0
    // If it becomes a problem/there are complaints about it crashing when closing, revisit...
    // Could this have been the cause of the NRE that I ended up "eating"? See frmEntry.saveDSD()'s 
    // catch block
}
4

2 に答える 2

3

タブをクリックしStart > SettingsてからタップしSystemます。

システムタブ

をタップMemoryしてから、タブをタップしRunning Programsます。

プログラムの実行

あなたのアプリケーションを見つけてクリックしてください...えー、つまりタップしStopます。

次に、アプリケーションを閉じます。

今後これを防ぐには、プロジェクトのメイン フォームを開き、そのフォームの [プロパティ] を見て、 に設定ControlBoxFalseます。

これにより、フォームが閉じたときにアプリケーションが終了するはずです。

コントロールボックス

ただし、その部分をコーディングしてから長い時間が経過しているため、少しずれている可能性があります。

確実に閉じる方法の 1 つは、メニュー項目Close()で行ったのと同じようにコマンドを記述することです。Exit

private void mi_Exit_Clicked(object sender, EventArgs e) {
  this.Close();
}

アプリケーションを終了するには、これで十分です。

ここで、デバイスがメモリ内で実行されているアプリケーションを再アクティブ化する方法を学ぶのは良いトリックです。ただし、実行可能なビルドは通常異なるため、Visual Studio はそれとは相性が悪いと思います。

于 2013-10-04T20:50:08.017 に答える
3

エミュレーターの古いアプリ プロセスがまだ実行されています。エミュレーターを再起動するか、さらに良いことに、Remote Process Viewer を使用して、エミュレーターを見つけて強制終了します。

編集

発生している最初のエラーは、ターゲット デバイスでプロセスがまだ実行されていることが原因であることが最も確実です。各プロジェクトにはターゲット デバイスの設定があることに注意してください。そのため、EXE が 1 つのデバイス (エミュレーターはデバイス) を指し、DLL が別のデバイスを指している可能性は十分にあります。その後、Visual Studio はこれらのアセンブリを別の場所にデプロイします。そのため、DLL はエミュレーターに送られ、EX は PC に接続された物理デバイスに送られ、どこで実行されているかを認識できなかった可能性があります。この場合、エミュレーターをリセットしてもプロセスは停止しません。はい、混乱する可能性があります。

最初の更新のエラーは、CF 3.5 がインストールされていないことを示しています。プロジェクトは、必要に応じてそれを展開する必要があります (プロジェクトのプロパティでオフにすることができます)。インストールされているかどうかは、cgacutil.exe を実行して確認できます (\Windows フォルダーにある必要があります)。CF は \Windows ディレクトリに直接移動する必要があるため、インストールされたフォルダーはありません。また、CF 2.0 および 3.5 がインストールされていないことを確認してください。これにより、問題が発生する可能性があります。頭痛が多い。

Update 2 に関しては、Studio は CF CAB ファイルをターゲット デバイスにプッシュしてインストールしようとしていますが、容量が不足しています。

于 2013-10-03T22:31:48.007 に答える