C# 开机启动读取配置文件问题,跪求指教

问题描述

我的程序中使用到了backgroundWorker控件,当窗体加载的时候就使用这控件进行读取XML文件,防止假死,而且我需要开机启动此程序,现在的问题是,我开机时,的确启动了本程序,但是,却读取不了xml配置文件,我使用了System.Threading.Thread.Sleep(10000),这样也不行,但是开机后,用手动启动是完全正常的,这是怎么回事啊?开机启动类如下#region开机启动类classRegister{///<summary>///开机启动注册表检查///</summary>publicvoidstart_with_windows(){RegistryKeyhklm=Registry.LocalMachine;RegistryKeyrun=hklm.OpenSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionRun",true);//未设置开机启动if(run.GetValue("CheckWorkAttendance")==null){register();}}///<summary>///将程序的开机启动写入注册表///</summary>privatevoidregister(){stringstarupPath=Application.ExecutablePath;//classMicosoft.Win32.RegistryKey.表示Window注册表中项级节点,此类是注册表装.RegistryKeyloca=Registry.LocalMachine;RegistryKeyrun=loca.CreateSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionRun");try{run.SetValue("CheckWorkAttendance",starupPath);//MessageBox.Show("注册表添加成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);loca.Close();run.Close();}catch(Exceptionee){MessageBox.Show(ee.Message.ToString(),"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);}}}#endregion

处理代码:privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse)//异步执行代码{#region异步执行代码BackgroundWorkerworker=(BackgroundWorker)sender;//获取异步对象try{//读取机器连接数据XmlDataDocumentxm=newXmlDataDocument();xm.Load("Service.xml");//读属性XmlNodeListxs=xm.GetElementsByTagName("Equipment");//获取XML中的根节点XmlNodeListxs1=xm.GetElementsByTagName("connectionString");//读取XML中的连接字符串XmlNodenode=xs1.Item(0);MethodOperation.connectionString=node.ChildNodes[0].Attributes["value"].Value;//根据value获取对应的值intjiqiCount=xs.Count;value=100/jiqiCount;//分配进度条宽度for(inti=0;i<jiqiCount;i++)//循环个数{AttendanceMachineModleattinfo=newAttendanceMachineModle();//创建终端对象foreach(XmlNodeainxs.Item(i)){if(a.Name=="Number"){attinfo.DwMachineNumber=int.Parse(a.InnerText);}if(a.Name=="IP"){attinfo.Ip=a.InnerText;}if(a.Name=="Port"){attinfo.Port=int.Parse(a.InnerText);}}zkemkeeper.CZKEMClassCinfo=newzkemkeeper.CZKEMClass();//创建机器对象if(!worker.CancellationPending){worker.ReportProgress(i+1,null);}attinfo.IsConnect=Cinfo.Connect_Net(attinfo.Ip,attinfo.Port);//对遍历的终端进行连接操作if(!worker.CancellationPending){worker.ReportProgress(i+1,attinfo.IsConnect.ToString());}//调用异步通知MethodOperation.lCZKEMClass.Add(Cinfo);//将机器对象加入至机器对象集合MethodOperation.lAttendanceMachine.Add(attinfo);//将机器终端加入至终端集合}XmlNodeListxmllist=xm.GetElementsByTagName("Time");//获取程序定时更新考勤数据时间根节点XmlNodexml=xmllist.Item(0);inth=0;intm=1;foreach(XmlNodeiteminxml.ChildNodes){if(item.Name=="Hour"){h=int.Parse(item.InnerText);}elseif(item.Name=="Minute"){m=int.Parse(item.InnerText);}}stringtime="1999-01-01"+h+":"+m+":00";MethodOperation.Time=DateTime.Parse(time);//读取完后并进行保存MethodOperation.Synchronization();//数据都读取完成后,调用更新数据函数,此函数将机器中的数据读取出来和数据库中的数据进行对比,没有的且日期大的考勤数据进行保存}catch(Exceptionex){e.Result=ex;}#endregion}

解决方案

解决方案二:
我觉得你还是加个日志,把每一步记录下来,看看为什么没读xml,运行到了那一步,这样方便查找问题
解决方案三:
我也遇到过这样的问题,哈哈,是因为路径问题。系统自启动的时候会导致读取文件路径不对,自己填写绝对路径吧。还不能用函数获取路径。。。。。。
解决方案四:
路径问题,一般用快捷方式即可解决,不要直接访问远程序,因为快捷方式本身带有起始位置的设置,那个默认就是应用程序当前目录,除非你吃饱了没事去乱改。
解决方案五:
引用2楼knna_的回复:

我也遇到过这样的问题,哈哈,是因为路径问题。系统自启动的时候会导致读取文件路径不对,自己填写绝对路径吧。还不能用函数获取路径。。。。。。

试了。没用呀,而且手动填写死了,绝对路径不行呀
解决方案六:
引用3楼qldsrx的回复:

路径问题,一般用快捷方式即可解决,不要直接访问远程序,因为快捷方式本身带有起始位置的设置,那个默认就是应用程序当前目录,除非你吃饱了没事去乱改。

我在桌面创建了快捷方式,然后怎么将此快捷方式加入到开机启动项?右键属性那路径就是该程序,还是一样的
解决方案七:
引用4楼caowei380的回复:

引用2楼knna_的回复:我也遇到过这样的问题,哈哈,是因为路径问题。系统自启动的时候会导致读取文件路径不对,自己填写绝对路径吧。还不能用函数获取路径。。。。。。试了。没用呀,而且手动填写死了,绝对路径不行呀

比如你的配置文件是在D盘的config文件夹下。路径就写D:\config\test.config这样都不能读取?

时间: 2024-08-26 08:25:04

C# 开机启动读取配置文件问题,跪求指教的相关文章

编程-如何在vba中读取屏幕坐标,跪求,急

问题描述 如何在vba中读取屏幕坐标,跪求,急 在vba里面没法添加timer控件,所以GetCursorPos貌似没法用,还有我试过mousemove,结果只能获得窗体的坐标,那如何获得屏幕的坐标呀,我的编程环境是coreldraw vba 解决方案 还有,我的打算是点击拾取按钮获取坐标,然后显示在文本窗体中 解决方案二: 用API实现定时器 增加一个module 增加代码 Option Explicit Declare Function SetTimer Lib "user32"

pdf-如果用HTML5读取PDF文件?求指教!急急急!

问题描述 如果用HTML5读取PDF文件?求指教!急急急! 我想在一个单独的HTML5页面读取任意的pdf文件怎么实现?求指教,刚才看了一下网 上的说法,都说是用pdf.js,有没有人知道怎么用啊,我根本就看不懂, 解决方案 虽然没用过,百度后发现这个里面有demo(也许你也查到了)http://www.html5cn.org/article-4190-1.html: 进入demo页面后,右击选择查看源代码.然后copy下来,不要的内容删掉就可以了. 解决方案二: 看什么浏览器了,如果是Chro

c++-mpi的sendrecv函数实现雅可比迭代出错,小弟初学,跪求指教。

问题描述 mpi的sendrecv函数实现雅可比迭代出错,小弟初学,跪求指教. //一维泊松方程 u(x)=x^3,cpu为四核 #include "stdio.h" #include "math.h" #define MPICH_SKIP_MPICXX //没有这句就会出现overriding virtual function differs from 'MPI::的编译错误 #include "mpi.h"//将函数库包含进来 #includ

tomcat启动时异常、、求指教

问题描述 二月05,20151:01:51下午org.apache.catalina.core.ApplicationContextlog严重:StandardWrapper.Throwablejava.lang.RuntimeException:ERRORinSchedulerServler.init():java.lang.NullPointerExceptionatcom.essiembre.library.scheduler.SchedulerServlet.init(Scheduler

跪求指教!您的一句话会改变我的人生!!感谢

问题描述 第一次按照教科书的测试程序helloworld,期间出现了很多错误,appcompat_v7上来就是错误等··还少都试着用BAIDU解决了··,现在包项目上再也没有红色的叹号和X了··百度说是空值造成的.可我的代码不过是个HELLOWORLD没有空的地方啊··实在闹不明白了···也不知道从那入手,也搜不到结果希望大神不吝赐教,小弟不胜感激!!下面是我的代码:HelloWorldActivity.java:packagecom.example.helloworld;importandro

c#排列组合新手跪求指教!!!!!!

问题描述 小生正在做一个运费功能,其中运费有一个计算运费的的功能描述大概是这样的:有西装.上衣.裤子.马甲.衬衫发往不同的国家,其中每样的运费都是不一样的.现在的关键就是如何确定发送的是那几样商品及组合方式,确定价格if(dr.Rows.Count==3){textOrderDetails.Text=dr.Rows[0]["OrderNo"].ToString()+","+"rn"+dr.Rows[1]["OrderNo"].

centos-跪求resin3在centOS下的开机启动攻略。。

问题描述 跪求resin3在centOS下的开机启动攻略.. 如题,现在已经做了集群,但是不知道怎么设置这几个端口的开机启动,希望各位大侠指教. 如果不方便解答发邮箱也可以:25556651@qq.com 拜托各位大侠,或者给我一个教程的网站也可以,拜托~ PS:resin版本: resin-pro-3.1.12 cent版本:centOS6.3 解决方案 http://shellfish.iteye.com/blog/358766 参考 解决方案二: init开机脚本

配置文件-怎么创建云服务??跪求

问题描述 怎么创建云服务??跪求 点击创建的时候,就出现了程序包和配置的提示,请问在哪里找程序包和配置文件,新手求助 解决方案 用的什么云服务,哪家公司的什么产品. 在哪里点的创建,出现了什么提示. 你以为这是算命,你随口一诌,大师就能给你预测未来啊. 解决方案二: 你首先要说明是哪家提供的云服务,然后一般云服务都提供有上传的faq等. 按照步骤操作,以及常见错误都有说明

跪求:根据下拉框的年份 读取库中相符的记录

问题描述 跪求:根据下拉框的年份读取库中相符的记录两张表,一张city存最新改动后的,一张city1存某年改的某些内容,city和city1字段名相同,city1只多了一个date字段.现在通过网页中的下拉列表框选择年份,对应city1中的date,来读记录.例:city1中存06.04.99三个年份改动,下拉框中选08读>06的,选00读04-99的,选90读<99的.特别:city1中的年份会增加,也许今年加入08.求求求求怎么实现例:city1中存2006.2004.1999三个特别年份