我非常绝望,因为如果我使用PowerShell远程打开它,我的C#应用程序就不会启动。
我的应用程序正在进行一些硬件访问并抓取相机图片。如果我通过VS远程调试器打开此.exe工作正常。如果我直接在远程客户端上使用TeamViewer打开它,它运行良好。
但是,如果我尝试通过PowerShell打开我的应用程序,它会在位图操作期间崩溃
Bitmap newBmp = new Bitmap(ROI[2] - ROI[0], ROI[3] - ROI[1], source.PixelFormat);
错误"参数无效!"。
传递的值是:
new Bitmap(2544 - 1, 1944 - 3, Format24bppRgb)
为什么exe表现完全不同,即使PS与简单地启动应用程序的新实例没什么不同?
以下是我打开可执行文件的方法:
PS Z:\> invoke-command -ScriptBlock { & 'C:\Users\###\Documents\Visual Studio 2015\Projects\###\Commo
n\Remote Console\bin\Debug\Remote Console.exe' -save_path=C:\Temp\Images fov=large filename=test1 setposition=200.00 Ope
ration=getpicture } -Session $remotesession
此处的堆栈跟踪:
当然(对不起忘记了):
参数无效。 System.Drawing at System.Drawing.Bitmap..ctor(Int32宽度,Int32高度,PixelFormat 在Utility.ImageProcessing.CopyBitmap(位图源, Int32 [] ROI)在C:\ Users ### \ Documents \ Visual Studio 2015中 \ Projects ### \ Common \ Utility \ Utility.cs:第46行at Utility。### ServiceUtilities.ByteToImage(Int32 width,Int32 height, 字节[] imageData)在C:\ Users ### \ Doc uments \ Visual Studio中 2015年\项目###接口\ COMMON \工具### ServiceUtilities.cs:行 232在Utility。### ServiceUtilities.getImage(ImageServerClient 客户端,cameraSelect Cam,FieldType FT,Int32 WaitTime)in C:\ Users ### \ Documents \ Visual Studio 2015 \ Projects ### Interface \ Common \ Utility ### ServiceUtilities.cs:line 61
到底发生了什么事?! 〜〜
更新:我觉得很有意思。如果新位图的大于500 * 500 * 24bpp的定义大小,则任何新位图的创建都将失败。可能这是由于一些内存溢出造成的?在远程PC上仍然没有足够的RAM(5,7Gb)!
答案 0 :(得分:0)
您的图像很可能在给定时间内没有加载到内存中。在图像加载时尝试使用thread.Sleep几秒钟。这可能是使用PowerShell的问题,并且在使用VS remotedebugger访问时有足够的时间。
也用于检查。在加载图像之前和加载图像之后,以毫秒为单位记录日期时间(使用远程调试器和PowerShell)。对于powershell,如果发生错误,请检查发生错误的时间。这样你就会知道加载图片需要多长时间