2016-06-13 19 views
0

私は答えを検索するのに多くの時間を費やしますが、私はそれを見つけられませんでした。私たちは、自動印刷作業のためのC1レポートコンポーネントを備えたコンソールアプリケーション(exe)を持っています。このアプリケーションはcmdファイルから実行され、cmdファイルは毎分SQL Server 2014からcmdexecによって呼び出されます。それは非常にうまく動作しますが、GDI + Initialize - System.Drawing.SafeNativeMethods + Gdip.propertiesをmontly初期化する以外の方法があります。これを解決する機会はありませんので、サーバを再起動する必要があります。GDI +初期化例外が発生する可能性があります

echoコマンドでcmdファイルを作成しようとしました。それはうまくいき、エコーから出力を得ました。そこで、私はConsole.Writeline( "Hello world")のみでアプリケーションを作成しました。それは正常に働いた。次に、System.Drawingへの参照を追加します。何も起こらなかった - ouputは生産された。その後、System.Drawing.Bitmapオブジェクトを作成し、GDI + Initialize例外が発生しました。

SQLサーバー上のジョブは、SQLRUNSERVICESとして実行され、管理者グループに属しています。しかし、私がSQLRUNSERVICESとしてログインし、コマンドラインでアプリケーションを起動すると、アプリケーションは例外なく正常に動作します。別のユーザーとしてログオンしても問題はありません。 SQLプロキシ経由でのみSQLRUNSERVICESを使用します。

Windowsセッションに何か問題があるはずです。このアプリケーションは、いくつかのレポートと仕上げを開始します。だから私はアプリケーションが終了したときにメモリが解放され、GDIオブジェクトがフリーになると思います。 GDIを扱うオブジェクトごとにcall disposeメソッドがあるかどうかを確認します。

セッションで使用されるGDIオブジェクトを見るチャンスはありますか?または、この例外を引き起こす原因は何ですか?アプリケーションが実行されていないときには何も見えないので、私はタスクマネージャを使うことができません。

ありがとうございます。それは毎月繰り返してサーバーを再起動しているので、私たちのために非常にstresfull問題です。

答えて

0

私たちは最も速く印刷するためのテストアプリケーションを作成しました。私たちはこの例外を1日に受けました。 C1Report forcourseのDisposeメソッドを呼び出します。セクションを使用して使用しようとします。しかしC1エラーのように見えます。テストアプリケーションは約65000カウントの文書を印刷し、GDI +初期化例外によってクラッシュしました。スタックあり:

System.TypeInitializationException: The type initializer for 'Gdip' threw an exception. ---> System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+. 
    at System.Drawing.SafeNativeMethods.Gdip.Initialize() 
    at System.Drawing.SafeNativeMethods.Gdip..cctor() 
    --- End of inner exception stack trace --- 
    at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromScan0(Int32 width, Int32 height, Int32 stride, Int32 format, HandleRef scan0, IntPtr& bitmap) 
    at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format) 
    at System.Drawing.Bitmap..ctor(Int32 width, Int32 height) 
    at C1.C1Preview.GraphicsHolder.FromBitmap() 
    at C1.C1Preview.GraphicsHolder.FromScreen() 
    at C1.C1Preview.C1PrintDocument.SelectBestMeasurementDevice(Boolean showWarning, MeasurementDeviceEnum& measurementDevice, String& measurementPrinterName, GraphicsHolder& measurementGraphicsHolder) 
    at C1.C1Preview.C1PrintDocument.#fFe() 
    at C1.C1Preview.C1PrintDocument.SetCreationDevice(MeasurementDeviceEnum creationDevice, String creationPrinterName) 
    at C1.C1Report.Layout..ctor(C1Report report) 
    at C1.C1Report.C1Report.Initialize() 
    at C1.C1Report.C1Report..ctor() 
関連する問題