在win7系统下开发的C# winform项目 打包后 在windows2003系统下无法打开,总是爆出如图所示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在win7系统下开发的C# winform项目 打包后 在windows2003系统下无法打开,总是爆出如图所示相关的知识,希望对你有一定的参考价值。

win7 自带.net4.0
win2003应该是.net3.5.而且还不知道你是不是装过。

所以要么你在win7上用.net3.5来编译,要么给你的win2003装个.net4.0.追问

我在win2003下装了4.0后就爆出这个问题 不装是完全打不开的

追答

你用3.5编译下试试呢
现在这个异常明显就是找不到dll,最有可能是.net版本不对造成的。net Framework4.0版本挺多的,要保证你在win2003上装的和你开发用的版本一直才行。所以建议还是编译成3.5版的。
另外一个可能是用了第三方控件或者dll,但是没有拷过来。

追问

谢谢 问题解决了

参考技术A Win7系统上的东西用到Windows2003系统上肯定不能用啦 差别那么大追问

好吧 你的回答跟没有回答没什么区别 不过 还是谢谢

追答

那你要问什么嘛

追问

我想问出现这个问题是什么原因造成的 该怎么解决

追答

都说了 系统不同肯定用不了

第一个C# Winform实例

 

前面我们准备好了相关的库,现在开始搭建环境,本人自动化行业,就用Windorm开发吧,例子仅仅做引导,希望大家能深入。VS版本VS2017

1:打开VS建立一个WInform 项目。拉入两个控件,groupbox,picturebox放到左侧,右侧也拉入一个groupbox,里面放入两个button.一个用来选择图片,一个用来测试二值化的效果。UI效果如下:

技术图片

2:本人系统win10,64位。所以用OpencvSharp的64位库。先在项目里添加引用:(net461版本);然后在类里添加 using OpenCvSharp;最后根据个人项目平台,选择新建X64或者X86,用anycpu 容易出问题。好了,经过上面的准备,OpencvSharp相关库所有的东西都可以调用了。

技术图片

 

技术图片

 

 技术图片

3:图像少不了显示,我们新建一个类,用来管理OpencvSharp的图片显示。

  public class SharpWindows
    

        [DllImport("user32.dll", SetLastError = true)]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll", SetLastError = true)]
        private static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
        private PictureBox pictureBox;
        private Control Parentform;
        public Window Opencvwin;
        public SharpWindows(PictureBox _pictureBox,string winname)
        
            pictureBox = _pictureBox;
            Cv2.NamedWindow(winname);
            Opencvwin = new Window(winname, WindowMode.FullScreen);
            Cv2.SetWindowProperty(Opencvwin.Name, WindowProperty.Fullscreen, 1);
            IntPtr Childwin = FindWindow(null, winname);
            SetParent(Childwin, _pictureBox.Handle);
            Parentform = Control.FromHandle(_pictureBox.Handle);

        
        public void Showimg(Mat img)
        
            try
            
                int width = Parentform.Width;
                int height = Parentform.Height;
                Cv2.ResizeWindow(Opencvwin.Name, width, height);
                Cv2.MoveWindow(Opencvwin.Name, Parentform.Left, Parentform.Top);
                Cv2.SetWindowProperty(Opencvwin.Name, WindowProperty.Fullscreen, 1);
                Opencvwin.ShowImage(img);

            
            catch(Exception ex)
            
                throw (ex);

            

        
    

4.在winform主UI里面初始化一个OpencvSharp的显示窗口:(同时创建一个Mat变量)

 

 SharpWindows Imgwindow;
        Mat rawimg;
        public OpencvSharpWindow()
        
            InitializeComponent();
            Imgwindow = new SharpWindows(this.pictureBox1, "MainUIwindow");
        

 5.两个button点击事件:

  private void button_Openpic_Click(object sender, EventArgs e)
        
            try
            
               var filename= OpenfileDlg();
                if(filename!=null&& filename!="")
                
                    Mat img = Cv2.ImRead(filename);
                    Imgwindow.Showimg(img);
                    rawimg = img.Clone();
                    img.Dispose();
                

            
            catch(Exception ex )
            
                throw (ex);

            
        
        private static string OpenfileDlg(string Defaultpath = null)
        
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = "请选择要打开的文件";
            //多选
            ofd.Multiselect = true;
            //初始目录
            ofd.InitialDirectory = Defaultpath;
            //设定文件类型
            //   ofd.Filter = "*.bmp | *.jpg";

            ofd.ShowDialog();

            //获得在打开文件对话框中选择的文件的路径
            string path = ofd.FileName;
            return path;
        

        private void button_Test_Click(object sender, EventArgs e)
        
            try
            
                if(rawimg!=null)
                
                    //转灰度
                    Mat grayimg;
                    if (rawimg.Channels()==3)
                    
                        grayimg = rawimg.CvtColor(ColorConversionCodes.BGR2GRAY);

                    
                    else
                    
                        grayimg = rawimg.Clone();
                    
                    Imgwindow.Showimg(grayimg);
                    //bin
                    double dvalue = 0;
                    double.TryParse(textBox_ThreshValue.Text, out dvalue);
                    if(dvalue==0)
                    
                        dvalue = 10;
                    
                    
                    Mat binimg = grayimg.Threshold(dvalue, 255, ThresholdTypes.Binary);
                    Imgwindow.Showimg(binimg);
                    grayimg.Dispose();
                    binimg.Dispose();

                

            
            catch(Exception ex)
            
                throw (ex);
            

        

6.代码敲完。剩下我们测试一下效果:

点击打开图片按钮,选择需要显示的图片,我网上下载了一张,UI那里就有显示了,还是很直观方便的。

技术图片

接着我们测试一下简单的二值化效果。在text文本框里分别填入50,100,200,220效果分别如下:

技术图片

技术图片

技术图片

技术图片

本次实例结束。希望大家动手操作,这样才能学习到东西。

各位,如果需要我的源码,请留言,谢谢!

 

以上是关于在win7系统下开发的C# winform项目 打包后 在windows2003系统下无法打开,总是爆出如图所示的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 在win7 下界面出错

c# 开发的winform软件 怎么样使其只能在xp系统下运行

C# winform Win7 C盘读写文件 没有权限

c#做的Winform程序开发IE浏览器如何在不安装Framework的情况下运行?

C# winform做打印预览和打印功能怎么做?

C# 管理员身份运行程序