苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 7287|回复: 15

[其他] 确保form程序单例运行时出错

[复制链接]
发表于 2013-9-16 14:21:10 | 显示全部楼层 |阅读模式

报错信息:
在 System.ComponentModel.Win32Exception 中第一次偶然出现的“System.dll”类型的异常

代码:
[code=csharp]                Process me = Process.GetCurrentProcess();
                Process[] us = Process.GetProcesses();
                Process another = null;
                foreach (var p in us)
                {
                    try
                    {
                        if (p.Id != me.Id && p.MainModule.FileName == me.MainModule.FileName)
                        {
                            another = p;
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                       throw;
                    }
                }[/code]


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-9-16 16:38:34 | 显示全部楼层
这程序只能在32位电脑上使用吧
 楼主| 发表于 2013-9-16 17:03:20 | 显示全部楼层
站长苏飞 发表于 2013-9-16 16:38
这程序只能在32位电脑上使用吧

程序运行的机器就是32位的。

虽然报这个错,但是程序还能运行。
关注这个问题,是因为,设置开机自启动后,程序没有启动,反而出现一个windows错误报告,

agentError.jpg
发表于 2013-9-16 17:10:02 | 显示全部楼层
有些进程,如:system 系统空闲进程  需要跳过的!
 楼主| 发表于 2013-9-16 17:12:26 | 显示全部楼层
剪刀手 发表于 2013-9-16 17:10
有些进程,如:system 系统空闲进程  需要跳过的!

为什么?
发表于 2013-9-16 17:14:09 | 显示全部楼层
这些进程就没有process.MainModule.FileName这些属性或者一些进程因为权限问题不可访问,而且你的异常是抛出,并没有处理掉!
 楼主| 发表于 2013-9-16 17:21:41 | 显示全部楼层
剪刀手 发表于 2013-9-16 17:14
这些进程就没有process.MainModule.FileName这些属性或者一些进程因为权限问题不可访问,而且你的异常是抛 ...
  1.     bool isAppRunning = false;
  2.     System.Threading.Mutex mutex = new System.Threading.Mutex(
  3.         true,
  4.         System.Diagnostics.Process.GetCurrentProcess().ProcessName,
  5.         out isAppRunning);
  6.     if (!isAppRunning)
  7.     {
  8.         MessageBox.Show("本程序已经在运行了,请不要重复运行!");
  9.         Environment.Exit(1);
  10.     }
  11.     else
  12.     {
  13.         Application.EnableVisualStyles();
  14.         Application.SetCompatibleTextRenderingDefault(false);
  15.         Application.Run(new Form1());
  16.     }
复制代码
后来使用Mutex ,不再报错了。
但是还是不能开机自启动。

有没有什么好的方法,调试开机自启动的程序,看看是哪个地方报错了
使用Vs2010调试,看到的错误信息:

未处理 System.TypeInitializationException
Message: “Surfer.Program”的类型初始值设定项引发异常。






发表于 2013-9-16 17:22:41 | 显示全部楼层
楼上说的是,有些就同有这个属性,你应该先加一个判断,是对存在对象
process.MainModule
或者process
就是说要判断下是否为空
 楼主| 发表于 2013-9-16 17:26:53 | 显示全部楼层
yangying 发表于 2013-9-16 17:22
楼上说的是,有些就同有这个属性,你应该先加一个判断,是对存在对象
process.MainModule
或者process

有没有什么好的方法,调试开机自启动的程序,看看是哪个地方报错了?

程序设置了开机启动,但启动时报错,使用vs2010调试时,有没有好的办法把源码添加进行来进行调试
发表于 2013-9-16 18:00:08 | 显示全部楼层
你的代码里就没有添加开机启动的代码……而且添加到开机启动还需要相应权限!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-28 10:40

© 2014-2021

快速回复 返回顶部 返回列表