0

最初の背景: データの収集/公開に複数の Web サービスを使用して、MS-SQL バックエンドにアクセスする VB.NET 2005 アプリケーション。

エラーについて: クライアントのコンピューターの 1 つでアプリケーションが不思議なことにクラッシュし、オフィスの他のコンピューターでは正常に動作しますが、大きなホイッグスのコンピューターでは動作しません。彼らはコンピューターを交換したため(私が推測するのと同じソフトウェア構成で)、何らかのソフトウェアの競合のように見えますが、エラーは引き続き発生します。現在、このユーザーのセットアップとそのオフィスの他のユーザーのセットアップに既知の違いがあるかどうかについて、IT スタッフからの連絡を待っています。

さらに厄介なのは、アプリが消えてしまうことです。未処理の例外をキャッチしてメッセージを表示するための特定のコードがそこにあるにもかかわらず、エラーメッセージが表示されないため、簡単にデバッグできません。ただ閉じます。

ただし、例外処理コード(少なくとも部分的に) 呼び出されているのは、この次のエラーを正常にログに記録するためです (他の通常のエラーのようにユーザーに表示されないだけです)。

Error Message: Queue grow factor must be between 1 and 10. 


Stack Trace: at 
System.Collections.Queue..ctor(Int32 capacity, Single growFactor) at 
System.Collections.Queue..ctor() at 
System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at 
System.Windows.Forms.Control.BeginInvoke(Delegate method, Object[] args) at 
System.Windows.Forms.Form.OnLoad(EventArgs e) at 
System.Windows.Forms.Form.OnCreateControl() at 
System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) at 
System.Windows.Forms.Control.CreateControl() at 
System.Windows.Forms.Control.WmShowWindow(Message& m) at 
System.Windows.Forms.Control.WndProc(Message& m) at 
System.Windows.Forms.ScrollableControl.WndProc(Message& m) at 
System.Windows.Forms.ContainerControl.WndProc(Message& m) at 
System.Windows.Forms.Form.WmShowWindow(Message& m) at 
System.Windows.Forms.Form.WndProc(Message& m) at 
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at 
System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at 
System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

ここで非常に興味深いのは、この時点で実行する必要があるコードでキューをまったく使用していないことです。(ユーザーがアプリを開き、ログインを試みると、エラーが発生します) コード内のどこかで参照される唯一のキューは、社内のテスト モードでのみ実行される非常に特殊な機能にあります。そして、そこには何の問題もありません。

この問題をどこに進めればよいのか途方に暮れているので、ご意見をいただければ幸いです。

編集: わかりました、ようやく彼らの IT 部門と連絡が取れました。私が疑ったように、彼は .NET 2.0 を実行していました。IT 担当者に [プログラムの追加と削除] から .NET インストールを修復してもらったところ、その後、問題はなくなりました。つまり、実際には.NETの問題でした

4

3 に答える 3

2

このユーザーが適切な.netフレームワークを持っていない可能性はありますか?あなたのアプリケーションには2.0が必要だと思いますが、おそらく彼/彼女は3.5を持っていますか?彼は他のユーザーとは異なるバージョンのウィンドウを実行していますか?

問題はコードでは発生していませんが、下位レベルの.netBCLで発生しています。

于 2009-01-21T19:39:24.353 に答える
2

同様の問題がありました-回答を探して投稿されたこの質問を見つけました。私の場合、問題なく作業を進めていましたが、ソース コード管理から最新のものに更新しました。ビルド後、突然、プログラムの起動時にこの問題が発生しました。えっ…?? System.Collections.Queue..ctor() が突然 System.Collections.Queue..ctor(Int32, Single) を呼び出すのはなぜですか?

System.ArgumentOutOfRangeException が処理されませんでした
  Message="キューの成長係数は 1 から 10 の間でなければなりません。\r\nパラメータ名: growFactor"
  ソース="mscorlib"
  ParamName="growFactor"
  スタックトレース:
       System.Collections.Queue..ctor (Int32 容量、単一の growFactor) で
       System.Collections.Queue..ctor() で
       System.Windows.Forms.Control.MarshaledInvoke (コントロールの呼び出し元、デリゲート メソッド、オブジェクト [] 引数、ブール値の同期) で
       System.Windows.Forms.Control.BeginInvoke (デリゲート メソッド、オブジェクト [] 引数) で
       System.Windows.Forms.Control.BeginInvoke (デリゲート メソッド) で
       ...ここの下の私のコード...

Reflector は、このコードを明確に示しています。

public Queue() : this(0x20, 2f) { }

このコードを実行する前に、(SCM で変更された) ネイティブ コードと一致しない P/Invoke シグネチャを介してネイティブ コードに P/Invoking していたことが判明しました。(私のビルド プロセスは、更新されたネイティブ DLL を正しい場所に適切にコピーしませんでした。) その時点でどういうわけかスタックが破損し、この原因不明の悪さを引き起こしました。

于 2011-03-15T21:25:01.960 に答える
0

これは、IT スタッフからの返事を待っていることの 1 つです。私たちのアプリには少なくとも .NET 2.0 が必要ですが、個人的には 3.5 でテストを行っていません。今日中に調べる機会があるかもしれません..

于 2009-01-22T15:39:10.347 に答える