C#写的windows服务启动失败,1053

启动的时候,半天启动不起来,最后还弹一个错误框。


解决办法:

1,检查服务名称是否一致。

选择该服务,查看设计器视图的属性中的ServiceName是不是和你的服务名称一致(项目默认创建好后是Service1,自己是否修改过它.)

2,将启动代码放到一个线程里面再启动线程。多半是这个问题导致的,原因我目前也未知。我以前写那个专题图服务也启动不了,估计也是这个原因,当时自己还在start里面单独启动控制台程序,并隐藏窗口,算是交差了。


参考:

http://zhidao.baidu.com/link?url=eJYlykzySy6CYERQmJjYOU7awB5zg_9S4RHkk8Ltnge_8UWrzgQYOZV0YaY8lPgkOsXttMr9h_7m46VsknIRPK

http://jingyan.baidu.com/article/fa4125acb71a8628ac709226.html


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的C#类,用于从海康相机采集图像,并将图像传递给VisionPro窗口显示: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using HCNetSDK; using System.Drawing; using System.Drawing.Imaging; using VisionPro; namespace HikvisionVisionPro { public class HikvisionCamera { private IntPtr m_lRealHandle = IntPtr.Zero; private CHCNetSDK.NET_DVR_DEVICEINFO_V30 m_struDeviceInfo; private CHCNetSDK.NET_DVR_PREVIEWINFO m_struPreviewInfo; private uint m_iLastErr = 0; private bool m_bInitSDK = false; private bool m_bRecord = false; private bool m_bSaveRealData = false; private int m_iPlayHandle = -1; private int m_iPort = -1; private int m_iWidth = 0; private int m_iHeight = 0; private byte[] m_bySaveRealData = new byte[1024 * 1024 * 100]; private int m_iSaveRealDataSize = 0; private VDisplay m_display; public HikvisionCamera() { m_struDeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); m_struPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO(); } public bool InitSDK() { bool result = CHCNetSDK.NET_DVR_Init(); if (result == false) { m_iLastErr = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("SDK初始化失败,错误码:" + m_iLastErr); return false; } else { m_bInitSDK = true; return true; } } public bool Login(string strIP, ushort wPort, string strUsername, string strPassword) { CHCNetSDK.NET_DVR_DEVICEINFO_V30 struDeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); int iUserID = CHCNetSDK.NET_DVR_Login_V30(strIP, wPort, strUsername, strPassword, ref struDeviceInfo); if (iUserID < 0) { m_iLastErr = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("登录失败,错误码:" + m_iLastErr); return false; } else { m_struDeviceInfo = struDeviceInfo; return true; } } public bool StartPreview(IntPtr hWnd) { m_struPreviewInfo.hPlayWnd = hWnd; m_struPreviewInfo.lChannel = 1; m_struPreviewInfo.dwStreamType = 0; // 0-主码流,1-子码流 m_struPreviewInfo.dwLinkMode = 0; // 0-TCP模式,1-UDP模式,2-多播模式,3-RTP模式,4-RTP/RTSP,5-RSTP/HTTP m_struPreviewInfo.bBlocked = true; m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(0, ref m_struPreviewInfo, null, IntPtr.Zero); if (m_lRealHandle < 0) { m_iLastErr = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("预览失败,错误码:" + m_iLastErr); return false; } else { return true; } } public bool StopPreview() { if (m_lRealHandle >= 0) { if (CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle)) { m_lRealHandle = IntPtr.Zero; return true; } else { m_iLastErr = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("停止预览失败,错误码:" + m_iLastErr); return false; } } else { return true; } } public bool CaptureImage(string strSavePath) { if (m_lRealHandle < 0) { MessageBox.Show("请先启动预览!"); return false; } CHCNetSDK.NET_DVR_JPEGPARA strPicpara = new CHCNetSDK.NET_DVR_JPEGPARA(); strPicpara.wPicQuality = 0; strPicpara.wPicSize = 0; bool result = CHCNetSDK.NET_DVR_CaptureJPEGPicture(m_lRealHandle, 1, ref strPicpara, strSavePath); if (result == false) { m_iLastErr = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("抓图失败,错误码:" + m_iLastErr); return false; } else { return true; } } public bool StartRecord(string strSavePath) { if (m_lRealHandle < 0) { MessageBox.Show("请先启动预览!"); return false; } if (m_bRecord == true) { MessageBox.Show("正在录像,请先停止录像!"); return false; } if (m_bSaveRealData == true) { MessageBox.Show("正在保存实时数据,请先停止保存!"); return false; } m_bRecord = true; if (CHCNetSDK.NET_DVR_SaveRealData(m_lRealHandle, strSavePath)) { return true; } else { m_iLastErr = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("启动录像失败,错误码:" + m_iLastErr); m_bRecord = false; return false; } } public bool StopRecord() { if (m_bRecord == false) { MessageBox.Show("没有在录像!"); return false; } m_bRecord = false; if (CHCNetSDK.NET_DVR_StopSaveRealData(m_lRealHandle)) { return true; } else { m_iLastErr = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("停止录像失败,错误码:" + m_iLastErr); return false; } } public void SetDisplay(VDisplay display) { m_display = display; } public void StartDisplay() { if (m_iPlayHandle > 0) { MessageBox.Show("正在播放,请先停止!"); return; } if (m_iPort < 0) { m_iPort = CHCNetSDK.NET_DVR_GetRealPlayerIndex(); } if (m_display != null) { m_display.Start(); } if (CHCNetSDK.NET_DVR_RigisterDrawFun(m_iPort, DrawFun, IntPtr.Zero)) { if (CHCNetSDK.NET_DVR_PlayBackByPreview(m_lRealHandle, m_iPort)) { m_iPlayHandle = m_iPort; } else { m_iLastErr = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("启动播放失败,错误码:" + m_iLastErr); } } else { m_iLastErr = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("注册回调函数失败,错误码:" + m_iLastErr); } } public void StopDisplay() { if (m_iPlayHandle > 0) { CHCNetSDK.NET_DVR_StopPlayBack(m_iPlayHandle); m_iPlayHandle = -1; } if (m_display != null) { m_display.Stop(); } } private void DrawFun(int lRealHandle, IntPtr hDc, uint dwUser) { if (m_display != null) { Bitmap bmp = GetBitmap(lRealHandle); m_display.DrawBitmap(bmp); } } private Bitmap GetBitmap(int lRealHandle) { IntPtr pBitmap = IntPtr.Zero; CHCNetSDK.NET_DVR_GetBitmap(lRealHandle, ref pBitmap); Bitmap bmp = Bitmap.FromHbitmap(pBitmap); DeleteObject(pBitmap); return bmp; } [System.Runtime.InteropServices.DllImport("gdi32.dll")] static extern bool DeleteObject(IntPtr hObject); } } ``` 使用方法: 1. 在你的项目中添加VisionPro和海康相机SDK的引用,并将HCNetSDK.dll文件复制到你的项目目录下。 2. 创建一个HikvisionCamera对象,并调用InitSDK方法初始化SDK。 ```csharp HikvisionCamera camera = new HikvisionCamera(); camera.InitSDK(); ``` 3. 调用Login方法登录相机。 ```csharp string strIP = "192.168.1.64"; ushort wPort = 8000; string strUsername = "admin"; string strPassword = "123456"; camera.Login(strIP, wPort, strUsername, strPassword); ``` 4. 调用StartPreview方法启动预览。 ```csharp IntPtr hWnd = pictureBox1.Handle; camera.StartPreview(hWnd); ``` 5. 调用StartDisplay方法启动图像显示。 ```csharp VDisplay display = new VDisplay(pictureBox1.Handle); camera.SetDisplay(display); camera.StartDisplay(); ``` 6. 调用StopDisplay方法停止图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值