调试“CAD电子文件收集系统”中的bug(关于应用程序域和时间格式)
最近刚完成“CAD电子文件收集系统”,在调试期间遇到了一个问题,搞的我焦头烂额,最后终于搞定拉,但是问题确是值得回味,感觉编程不是这么简单,需要学的知识还很多,下面就把遇到的两个bug写出来,供初学者参考:
在此系统中有两个应用程序域:程序版本检查域和cad电子文件收集域
1,首先启动程序版本检查域,先检测服务器端是否有新版本的“cad电子文件收集”程序,如果有则下载新版本的“cad电子文件收集”程序到本地,启动新版本的“cad电子文件收集”程序,否则启动旧版本的“cad电子文件收集”程序,看下面的程序:
上面标识红体的程序:判断“cad电子文件收集”程序的初始文件夹中是否有"config.txt"文件,如果不设置 myProcess.StartInfo.WorkingDirectory=Path.GetDirectoryName(asc.ExePath);
则File.Exists("config.txt")将在“程序版本检查域”的初始文件夹中搜索“config.txt”,这显然会产生逻辑错误,因为我们希望在“CAD电子文件收集域”的初始文件夹中搜索“config.txt”。
2,关于时间的问题:我在测试的时候,没有遇到任何问题,我有一个同事,每天把机器搞得挺有个性,他在测试的时候总是报错,我最后终于查到,在取客户机的时间时,总是有问题的,在别人机器上取得时间总是正常的,在他的机器取得时间为“2006-5-10 18:00:00 我将上下而求索 路漫漫其修远兮”,我对取出的时间百思不得其解,最后发现他机器任务栏里的时间后面有这么一句话,最后才知道他用“优化大师”设置的,我差点当场晕倒,最后我试着控制格式----失败,我只有这样实现:DateTime.Now.Year.ToString()+"-"+DateTime.Now.Month.ToString()+"-"+DateTime.Now.Day.ToString()+" "+DateTime.Now.Hour.ToString()+":"+DateTime.Now.Minute.ToString()+":"+DateTime.Now.Second.ToString();。如果哪位同仁有好的方法,敬请赐教。
在此系统中有两个应用程序域:程序版本检查域和cad电子文件收集域
1,首先启动程序版本检查域,先检测服务器端是否有新版本的“cad电子文件收集”程序,如果有则下载新版本的“cad电子文件收集”程序到本地,启动新版本的“cad电子文件收集”程序,否则启动旧版本的“cad电子文件收集”程序,看下面的程序:
try
{
AppStartProcess.myProcess = new Process();
myProcess.StartInfo.FileName = asc.ExePath;//启动相应版本的程序
myProcess.StartInfo.UseShellExecute=true;
myProcess.StartInfo.WorkingDirectory=Path.GetDirectoryName(asc.ExePath);
myProcess.Start();
myProcess.WaitForExit();
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
在“CAD电子文件收集域”有这么一段代码:{
AppStartProcess.myProcess = new Process();
myProcess.StartInfo.FileName = asc.ExePath;//启动相应版本的程序
myProcess.StartInfo.UseShellExecute=true;
myProcess.StartInfo.WorkingDirectory=Path.GetDirectoryName(asc.ExePath);
myProcess.Start();
myProcess.WaitForExit();
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
if(File.Exists("config.txt"))
{
StreamReader sr=new StreamReader("config.txt");
string sep=sr.ReadLine().Trim();
if(sep==null)
{
gcdm=null;
jcdm=null;
sr.Close();
throw new Exception("配置文件错误!");
}
else
{
sr.Close();
string[] arrstr=th.Split(sep.ToCharArray());
try
{
if(arrstr[0].Trim()=="15")
{
gcdm=arrstr[1].Trim();
jcdm=arrstr[1].Trim()+"-"+arrstr[2].Trim();
}
else
{
gcdm=arrstr[0].Trim();
jcdm=arrstr[0].Trim()+"-"+arrstr[1].Trim();
}
}
catch
{
throw new Exception("图号出现错误!");
}
}
}
{
StreamReader sr=new StreamReader("config.txt");
string sep=sr.ReadLine().Trim();
if(sep==null)
{
gcdm=null;
jcdm=null;
sr.Close();
throw new Exception("配置文件错误!");
}
else
{
sr.Close();
string[] arrstr=th.Split(sep.ToCharArray());
try
{
if(arrstr[0].Trim()=="15")
{
gcdm=arrstr[1].Trim();
jcdm=arrstr[1].Trim()+"-"+arrstr[2].Trim();
}
else
{
gcdm=arrstr[0].Trim();
jcdm=arrstr[0].Trim()+"-"+arrstr[1].Trim();
}
}
catch
{
throw new Exception("图号出现错误!");
}
}
}
上面标识红体的程序:判断“cad电子文件收集”程序的初始文件夹中是否有"config.txt"文件,如果不设置 myProcess.StartInfo.WorkingDirectory=Path.GetDirectoryName(asc.ExePath);
则File.Exists("config.txt")将在“程序版本检查域”的初始文件夹中搜索“config.txt”,这显然会产生逻辑错误,因为我们希望在“CAD电子文件收集域”的初始文件夹中搜索“config.txt”。
2,关于时间的问题:我在测试的时候,没有遇到任何问题,我有一个同事,每天把机器搞得挺有个性,他在测试的时候总是报错,我最后终于查到,在取客户机的时间时,总是有问题的,在别人机器上取得时间总是正常的,在他的机器取得时间为“2006-5-10 18:00:00 我将上下而求索 路漫漫其修远兮”,我对取出的时间百思不得其解,最后发现他机器任务栏里的时间后面有这么一句话,最后才知道他用“优化大师”设置的,我差点当场晕倒,最后我试着控制格式----失败,我只有这样实现:DateTime.Now.Year.ToString()+"-"+DateTime.Now.Month.ToString()+"-"+DateTime.Now.Day.ToString()+" "+DateTime.Now.Hour.ToString()+":"+DateTime.Now.Minute.ToString()+":"+DateTime.Now.Second.ToString();。如果哪位同仁有好的方法,敬请赐教。