2011-07-20 44 views
1

私は、使用時にいくつかの奇妙な問題を引き起こしている従来のWinformsアプリケーションを使用しています。このアプリの一部で画像を扱うと、ユーザーは画像に画像を追加することができ、その画像は.Netでサイズ変更され、サーバー共有に保存されます。私はこのアプリケーションを使用して2つの問題が発生しています。その結果、「GDI +で一般的なエラーが発生しました」。GDIで一般的なエラーが発生しました+

ユーザーはレコードを見ることができ、画像がきれいに表示され、印刷しようとするとプリンタを選択するダイアログが表示されますが、印刷をクリックするとエラーになります。もう1つは、ユーザーが新しいイメージをレコードに追加しようとしたときで、同じ一般的なエラーです。最高の部分は2人のユーザーだけがこの問題を抱えていることです。

イメージは共有から直接開いて印刷することができますが、問題はありません。両方のユーザーは、他のユーザーと同じ共有/ファイルに対するアクセス権を持つ同じADグループの一部です。両方のユーザーが別のマシン上のアプリケーションにログインし、同じことをうまく動作させるのはうまくいきます。私は2人に共有ファイルの完全な制御と所有権を与えようとしましたが、それと同じエラーです。アプリをアンインストールして再インストールしても効果はありません。

影響を受ける各ユーザーのコンピュータにログインしており、アプリケーションはユーザー単位でインストールされますが、資格情報を使用して同じコンピュータにアプリケーションをインストールして実行すると、正常に動作します。

誰でもこの問題の以前の経験から、または私が次に試してみるべきことをアドバイスしていますか?

編集:これはすべて、共有フォルダを別のサーバーに移動したときに開始されました。

+0

GDI +の例外はかなり厄介ですが、これはほとんど常に許可の問題です。ファイルが書き込まれている場所とユーザーがサーバー共有に対して適切な権限を持っていることを100%確認してください。また、書き込みしようとしているファイルがネットワーク上の別のマシンによってロックされていない可能性があります。 –

答えて

0

あなたはいくつかのことを試みることができる:

  1. あなたが共有から画像を開くと、メモリにそれをクローン(新しいBitmapオブジェクトを作成し、元の画像からすべての内容をコピー)で作業を続けますそのメモリ内のオブジェクト。
  2. ...または印刷用に開く前に、イメージファイルを共有からユーザーのコンピュータに物理的にコピーします。
+0

これは私がアプリケーションを編集できることを前提としています。それにもかかわらず、アプリケーションは他のすべてのユーザーと同じように正常に動作するため、ここではコードの変更は適切ではないと私は考えています。しかし、ありがとう。 – RobertMGlynn

+0

あなたのために申し訳ありませんが、私の問題は完全に関連していません。私はこのエラーをデスクトップ上でまっすぐに受け取っています。 – blamb

1

.NET 2.0には古いバグがあります。ただし、このバグはターミナルサーバーまたはリモートデスクトップ/アシスタンスセッションでのみ発生します。

詳細情報や回避策: http://support.microsoft.com/kb/953389

更新月2017年のMicrosoft KB953389の記事を削除しました。それはまだいくつかの検索エンジンによってキャッシュされています。ここで

とは何かと言う:

アクション

あなたは、Microsoft .NET Framework 2.0のWindowsターミナルサーバーセッションでFormsアプリケーションを実行しています。その後、端末サーバのセッションウィンドウを最小化したり、セッションを切断したり、セッションをロックしたりします。 結果は

ターミナルサーバーセッションでの作業を再開すると、Windowsフォームアプリケーションを

は、次の例外が表示され、スタックの呼び出し:これは、Microsoftのバグによるものである

System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+. 
    at System.Drawing.Graphics.Clear(Color color) 
    at System.Windows.Forms.ToolStripProfessionalRenderer.OnRenderToolStripContentPanelBackground(ToolStripContentPanelRenderEventArgs e) 
    at System.Windows.Forms.ToolStripProfessionalRenderer.OnRenderToolStripContentPanelBackground(ToolStripContentPanelRenderEventArgs e) 
    at System.Windows.Forms.ToolStripRenderer.DrawToolStripContentPanelBackground(ToolStripContentPanelRenderEventArgs e) 
    at System.Windows.Forms.ToolStripContentPanel.OnPaintBackground(PaintEventArgs e) 
    at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs) 
    at System.Windows.Forms.Control.WmEraseBkgnd(Message& m) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ScrollableControl.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) 

原因

.NET Framework 2.0。 Windowsフォームの実行時に、System.Drawing.Graphics.Clearを安全なデスクトップで実行されているかどうかを確認せずに呼び出すよう試みています。次のMSDNリンクに記載されているように、ターミナルサーバーセッションでセキュリティ保護されたデスクトップでClearメソッドが呼び出された場合、ExternalExceptionが発生し、Graphicsオブジェクトが矛盾した状態になることがあります。

Graphics.Clear方法

http://msdn.microsoft.com/en-us/library/system.drawing.graphics.clear.aspx

解像度

あなたはApplication.ThreadExceptionイベントにイベントハンドラを配線することにより、この現象を回避することができます。このイベントにより、アプリケーションコードは、Windowsフォームスレッドで発生する未処理の例外を処理できます。これにより、表示される標準Windowsフォーム例外ダイアログの代わりにコードを呼び出すことができます。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    AddHandler Application.ThreadException, AddressOf Application_ThreadException 
End Sub 

Sub Application_ThreadException(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs) 

    If TypeOf (e.Exception) Is System.Runtime.InteropServices.ExternalException Then 
     Return 
    End If 
    MessageBox.Show(e.Exception.Message, Me.Text) 
End Sub 
+0

B、うまくリンクが壊れていて、ポイントを保持していますが、新しい記事を見つけてリンクを修正できますか? これは私にとっての主導権であり、.NETの問題を伝えています。私はただそれが消えたい。 – blamb

関連する問題