問題タブ [handheld]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
9454 参照

compact-framework - デバイスにインストールされている Compact Framework のバージョンを確認するにはどうすればよいですか?

これは、さまざまなデバイスでさまざまなバージョンの 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 という名前の次のデータを含むファイルをハンドヘルド デバイスに追加すると、すべてがレインボー シチュー/ビッグ ロック キャンディー マウンテンになります。

しかし、「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 ファイルの内容として使用できます (ファイル内の内容はバージョン番号に関してより具体的です)。

それは役に立ちますか?

更新 2

ファイル「Microsoft .NET CF 2.0.LOG ファイルには興味深い情報が含まれています。

したがって、新しいデバイスにはバージョン 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 ファイルとは異なる動作をします。永遠の砂時計の代わりに、次のようになります。

そのため、自分自身に連絡するように指示されますが、これはあまり役に立ちません。

v2.0.7045.00 がインストールされていることがテキスト ファイルに示されているのに、これはインストールされていないことが示されているのはなぜですか?

更新 4

テキスト ファイルでバージョン 2.* がデバイスにインストールされていることが示されているのに、そこで最新バージョン (「フレームワーク バージョン」プロパティとして「v2.0」を持っている) を実行しようとしても実行に失敗するのは、私にとって本当に恐ろしい/苛立たしいことです。bla.exe.config ファイルのない砂時計は、上記のエラー メッセージで失敗します...?!?

更新 5

また、アプリの最新ビルド (Framework バージョン 2 に対して) を古いデバイス (Framework 1 がインストールされているもの) にコピーしました。そこに [appName].exe.config を追加し、次の内容の .exe を追加しました。

...しかし、.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

だから、これは私がデバイス上にあるものについて決定できたものです:

0 投票する
0 に答える
1390 参照

sql-server-ce - SDF ファイルとデバイスの両方が同じバージョンのように見える場合、「SqlCeEngine.Upgrade()」を呼び出す必要がありますか (2)?

これはここでの質問のフォローアップです

ctacke は、私が抱えていた/抱えている SQL Server CE 関連の「問題」について、次のように述べています。

エラー テキストで示されている問題は、SDF ファイルが、アプリケーションが参照している SQL Compact のバージョンと一致しない SQL Compact のバージョンによって作成されたことです。報告されたバージョン番号には注目しません。 、不一致があることを認識しているという事実だけです。SDF のバージョンがわからない場合は、SDF ファイルから数バイトを読み取ることでいつでも検索できます。SQL Compact データベース ファイルは 100% 転送可能ではありません。 SDF を新しいバージョンから取得して、古いランタイム セットでロードすることは絶対にできません。データベースが 3.1 で作成されている場合は、SqlCeEngine.Upgrade() を呼び出して 3.5 にアップグレードできます。

問題の .SDF ファイルがバージョン 2.0 であることがわかりました

コードのどこかで「SqlCeEngine.Upgrade()」手法を使用する必要がありますか?

C++ セットアップ ユーティリティ コードに基づいて、両方のデバイス (3090 と 3190 ですが、現在 3190 のテストに取り組んでいます) に SQLCE 2 がインストールされている必要があります。

....デバイスのどこにも「SQLCE」ファイルが見つかりませんが...

アップデート

SqlCeEngine をインスタンス化した後、Upgrade() への呼び出しを追加しました。

...そして、それは良いことだったかもしれません。なぜなら、今では err メッセージが別のものだからです:

場所:DBConnection.DBConnection

例外: ソース データベースに指定されたパスワードが正しくありません [データ ソース = \My Documents\HHSDB.SDF]

内部例外: [空白]

TypeFullName : System.Data.SqlServerCe.SqlCeException

StackTrace : ProcessResults、修復...

ここで Update 4 の状態と比較してください(現在はパスワードの問題です。以前は Sql Ce バージョンの不一致の問題のようでした)。

さて、レガシー コード (以前は機能していた) はパスワードを追加していないようです。パスワードは通常どのように「追加」されますか (この時点では、パスワードがどうあるべきかさえわかりません)。パスワードを期待しないようにする方法はありますか?

DBConnection のインスタンス化コードを次に示します。これにより、これが明らかになる場合があります。

以前使用されていた GetDataPath() は、filename への代入によって呼び出されますが、filename が上書きされるため意味がありません。単純に次のとおりです。

更新 2

これは私の問題を解決するのに十分ですか?単に「Persist Security Info=False;」を接続文字列に追加するだけです:

? IOW、「パスワードを忘れて、私はパスワードに依存していない」という言い方を追加していますか?

上記の例 (ここから) では、「ソース」と「=」の間、および「=」と SDF ファイルへのパスの間にスペースがないことにも気付きました。これは重要ではありませんか (私が推測しているように、IOW、どちらの方法でも機能するはずです)。

おそらくもっと重要なのは、私の接続文字列が "Data Source = \My Documents" という文字列で始まっているのに対し、この接続文字列はそうではありません。重要?

その同じサイトによると、パスワードが必要な場合は、次のようになると思います。

...また...???

更新 3

Altho ctacke は、キャブのインストールは実際には関連性がないと言っています。完全性のために/後世のために、デバイスのセットアップがどのように異なるかについていくつかのメモを追加しています。

アスタリスクでマークされた cab ファイルは、他のデバイスのインストールとは異なります

3090は、セットアップ ユーティリティを介してインストールされた 8 つのキャブを取得します。

3190は、セットアップ ユーティリティを介してインストールされた 8 つのキャビネットを取得します (セットアップ ユーティリティのコメントには、「MC3190 にはデフォルト構成に .NET 3.5 が含まれています」と書かれています)。

だから

3090 には次の特徴があります。

3190 には次の特徴があります。

どちらも次のようにアップグレードされます。

(これらの「アップグレード キャブ」がそれぞれのインストール リストに単純に追加されないのはなぜですか。わかりません。「アップグレード」オプションはありますか?)

更新 4

ctacke の最新のコメントに触発されて (挑発され、突っ込まれ)、自分のアプリにある SQL CE リファレンスを詳しく調べました。

たぶん、この魔女の醸造物は、少なくとも私の問題と関係があります.

更新 5

だから、きっとこれはフランケンシュタインとドラキュラの交配だと思いました。これらの関連ファイルはすべて同じ場所に存在する必要があります。それで、私はそれらすべてを見て、これを見つけました:

そうじゃないって言って!これは本当に現状ですか? このファイルはここから、あのファイルはあそこから取得する必要がありますか?

更新 6

ctacke からのこのコメントに応えて:

"参照している SQL CE のバージョンは、デバイス上のバージョンとリビジョンまで一致する必要があります。それが何であるべきかはわかりませんが、同じでなければならず、作成されたマイナー バージョンまで一致する必要があります。データベースファイル"

デバイスに SqlServerCe.dll がまったく表示されません。次の DLL を含む "Computer\Clay's Device\\Program Files\Microsoft SQL Server Compact Edition\v3.5" という名前のフォルダーがあります。

(すべて 2010 年 2 月 12 日作成)

デバイスには、2002 年 8 月 16 日と 2002 年 8 月 28 日のファイルを含む "Computer\Clay's Device\\Windows\SQLCE 2.0" というフォルダーもあります。

最後の 2 つはエラー メッセージを表示するためのものだと思います。最後の 1 つは日本語用だと思います。日本人の顧客はいないと思います (もちろん、日本語にローカライズされたバージョンのアプリはありません)。困惑の。

したがって、ハンドヘルド デバイスには SqlServerCe.dll がまったく存在しないため、バージョン間の競合は発生しません。

更新 7

Update 5 のフォローアップとして、完全を期すために (最初の 2 つの DLL ファイルは「興味がない」可能性があります):

ハード ドライブ全体を検索して、次の 3 つのファイルを探しました。

System.Data.dllは、上記の場所に加えて、次の場所で見つかりました。

System.Data.SqlClient.dllは、上記以外にもいくつかの場所で見つかりましたが、次の点を除いてサイズはすべて同じです。

System.Data.SqlServerCe.dllは、上記の場所 (C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices) のほかに、次の場所で見つかりました。

また、

-および(上記と同じですが、「(x86)」のないProgram Filesフォルダーにあります):

0 投票する
1 に答える
59 参照

winforms - 「ライブ」時にフォームが縦に伸びないようにするにはどうすればよいですか?

私のフォームは、デザイン時にゴージャスに見えます(YMMV):

ここに画像の説明を入力

...しかし、デバイスで実行すると垂直方向に「伸縮」し、実際には画面に対して少し高すぎます:

ここに画像の説明を入力

なぜこれが起こるのでしょうか?どうすればそれを防ぐことができますか?

おそらく注目に値する: フォームの WindowState == Normal、FormBorderStyle = FixedDialog

0 投票する
1 に答える
2667 参照

compact-framework - CPCL コードを Zebra QLn220 プリンタに送信すると機能するのに、同じコードを Zebra QL220 に送信すると機能しないのはなぜですか?

ユーザー設定 (選択したラベルのタイプ、および「キープ アライブ」メッセージを送信するかどうか) に基づいて、さまざまな CPCL コマンドがハンドヘルド デバイスから Zebra QL[n]220 ベルト プリンターに送信されます。このコード:

...(新しい)QLn220プリンターで機能しますが、(古い)QL220では、プリンターがコマンドを受信して​​それに基づいて動作するのではなく、生のコマンドをラベルに印刷するだけです。QL220 ベルト プリンターである IOW は、コマンドをアクションまたはバーコードに変換する代わりに、次のようなものをラベルに直接印刷します。

QL220とQLn220でCPCLプロトコルが変わったのか、それとも…???

アップデート

これは奇妙です。奇妙なことに、次のコードを追加しました。

...GetSettingFromPrinter() の呼び出しは空の文字列を返しますが (MessageBox.Show に見られるように)、印刷リファッターはとにかく希望どおりに動作します (生のコマンドをラベルに印刷するだけでなく、希望どおりにラベルを印刷します)! ?

更新 2

注:私の QLn220 Zebra プリンタにUSB ポートがあります (問題を引き起こした古い QL220 にはありません)。Zebra Setup Utils を使用して "what language are you using" (getDeviceLang) コマンドを送信すると、"hybrid_xml_zpl" と応答しました。

0 投票する
1 に答える
621 参照

windows-ce - Zebra QL220 および QLn220 プリンタは、異なるデバイス言語に設定する必要がありますか?

私の QLn220 プリンターは「hybrid_xml_zpl」に設定されており、正常に動作します (CPCL コマンドを送信すると、希望どおりにラベルを印刷できます)。

ただし、私の QL220 プリンター (古いモデル) はもっと風変わりです。コマンドをそのまま表示するのではなく、送信した生のコマンドを(変換せずに)出力することがあります。PC に接続するための USB ポートがないため、そのプリンターで device.languages がどのように設定されているかわかりません (ある場合は、Zebra Setup Utilities を実行して、"! U1 getvar "device.languages" を送信します)。 " (これは QLn220 で行ったことです)。

私の質問は、QL220 (コード内) を「hybrid_xml_zpl」に設定する必要があるかどうかです。または、「ZPL」などに設定する必要がありますか?

どうやら、少なくともこれほど多くの異なるオプションがあります。

Zebra ベルト プリンターのデバイス言語値をプログラムで読み取ることができなかったので ( OpenNETCF.IO.Ports.SerialPort から文字列を読み取るにはどうすればよいですか? を参照してください)、コードで適切なものに設定する必要があります。

私が恐れているのは、QLn220 の場合は「hybrid_xml_zpl」である必要があることですが、QL220 の場合は別のもの (何?) である必要があります。

だから:ユーザーにプリンターモデルを区別させて(リストからモデルを選択して)、そのコマンドをプリンターに送信してプログラムで適切なデバイス言語を設定する必要がありますか、それとも同じコマンドを送信して/を使用してうまくいくことができますか? QL220QLn220 の両方で同じデバイス言語 (おそらく "hybrid_xml_zpl")ですか?

古い QL220 モデル用に "hybrid_xml_zpl" 以外の何かが必要な場合 (おそらくこのデバイス言語はそのモデルより後ですか?)、QL220 のデバイス言語として何を設定する必要がありますか?

0 投票する
1 に答える
85 参照

c# - MessageBox のコンテンツを N 個のエピソードに分割するにはどうすればよいですか?

取得している例外からの StackTrace を表示する次のようなコードがあります。

...しかし、不動産の制約により、ちっぽけな混乱した仕掛け (ハンドヘルド デバイス) の腸からコミュニケ全体を見ることはできません。MessageBox を上にドラッグすることはできません。頭を上部にぶつけて、ストーリーの残りの部分が見えるように屋根に穴を開けることを拒否します。

では、MessageBox を取得して文字列を「エピソード」に分割し、循環できるようにするにはどうすればよいでしょうか。

私のアイデア(疑似コード)は次のようなものです:

...しかし、「そこにいる」誰かがより良いアイデアを持っているか、すでにこれを解決していると思います...私は正しいと思いましたか?

0 投票する
2 に答える
303 参照

windows-ce - Motorola MC3100 スキャナで自由落下イベントを検出するにはどうすればよいですか?

私はGoogleを検索しましたが、何も思いつきません。Motorola MC3100/MC3190 が自由落下検出とイベント ログをサポートしていることを教えてくれるページはたくさんありますが、ドキュメントやオンラインで、独自のアプリを作成してイベントにフックしたり、これらの自由落下イベントが既に含まれているログ ファイルがデバイスのどこかにある場合。

Motorola MC3100 スキャナで自由落下イベントを検出するにはどうすればよいですか?