2016-06-13 59 views
0

我花了很多时间来搜索答案,但我没有找到它。我们有用于自动打印任务的控制台应用程序(exe)和C1报告组件。此应用程序从cmd文件执行,cmd文件每隔一分钟由SQL Server 2014中的cmdexec调用。它的工作非常好,但除了GDI + Initialize - System.Drawing.SafeNativeMethods + Gdip.Initialize aproximetelly montly。没有机会解决这个问题,所以我们必须重新启动服务器。什么可能导致GDI +初始化异常

我试图用echo命令创建cmd文件。它工作得很好,我从echo获得输出。所以我只用Console.Writeline(“Hello world”)创建了应用程序。它工作得很好。然后我添加对System.Drawing的引用。没有任何事情发生 - 输出产生了。然后我创建了System.Drawing.Bitmap对象,并得到了GDI +初始化异常。

SQL服务器上的作业作为SQLRUNSERVICES运行,它位于Administrator组中。但是,当我以SQLRUNSERVICES的身份登录并在命令行中启动我们的应用程序时,应用程序可以正常工作。当我登录为另一个用户时,这没有问题。只有SQLRUNSERVICES通过SQL代理。

我想在Windows会话中一定有什么问题。此应用程序启动,打印一些报告并完成。所以我想当应用程序完成内存将是免费的,GDI对象将是免费的。我检查每个使用GDI的对象是否有调用处理方法。

我可以有机会看到会话使用的GDI对象吗?或者什么可能导致这种异常?我不能使用任务管理器,因为当应用程序没有运行时,没有什么可以看到的。

谢谢你的回复。对于我们来说,这是一个非常棘手的问题,因为它在重新启动服务器后每月都会重复进行。

回答

0

我们创建了测试应用程序来打印最快,我们得到了这一例外一天。我们称之为C1Report的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() 
相关问题