需求:在一个winform项目中,每次执行数据库查询时,如发现通过vpn页面访问远程数据库失败,则希望重新启动傲游浏览器,打开指定的vpn页面。
代码:
if(!dbs_Forecast.dbConnectionValid_get) //立即判断该值
{
//一旦数据库连接中断,则判断任务管理器的进程列表之中,是否存在Maxthon.exe进程,如果进程存在,
//则关闭Maxthon进程,再重新启动该进程。
//上述操作只会执行一次,如果再次打开vpn之后,仍然无法连接79数据库,则后续网格的数据获取操作将不再执行。
Process[] curProcessArray = System.Diagnostics.Process.GetProcessesByName("Maxthon");
if(curProcessArray.Length>0) //返回的进程数组应该只有一个元素
{
Process MaxthonProcess = curProcessArray[0];
try
{
//bool closeValid = MaxthonProcess.CloseMainWindow();
//if(!closeValid)
MaxthonProcess.Kill();
string maxthonConfigPath = System.Configuration.ConfigurationSettings.AppSettings["maxthonExplorerLoadPath"];
string maxthonPath = @maxthonConfigPath;
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = maxthonPath;
psi.Arguments = @"sqvpn.hydroinfo.gov.cn";
System.Diagnostics.Process.Start(psi);
//再次进行该网格的数据查询
dbs_Forecast.dbConnectionValid_get = true; //需要再次将其设置其为初始状态
gridDataTbl = dbs_Forecast.getGridDataRecrds(gridIdArray[i],queryTime); //单点查询模式
//如果经过再次打开vpn窗口之后,仍然无法连接,则后续网格的数据获取将不再执行
if(!dbs_Forecast.dbConnectionValid_get) //再次立即判断该值
{
//一旦发生网络中断,则在这里要记录此时的单点主查询时间
lastQueryTime_ConnectionException = queryTime;
setStatus_Forecast("read","读取"+queryTime.ToString()+"时刻网格"+"("+gridIdArray[i]+")"+"的数值预报记录时,发生了数据库连接中断!",progressValue_read_Forecast.ToString()+"%","("+readGridCounter.ToString()+"/"+totalGridNums_Forecast+")");
}
}
catch//(System.ComponentModel.Win32Exception ex)
{
//MessageBox.Show(ex.Message);
}
}
else //当前任务管理器进程列表中未存在Maxthon进程,则启动Maxthon进程,并打开vpn页面
{
try
{
string maxthonConfigPath = System.Configuration.ConfigurationSettings.AppSettings["maxthonExplorerLoadPath"];
string maxthonPath = @maxthonConfigPath;
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = maxthonPath;
psi.Arguments = @"sqvpn.hydroinfo.gov.cn";
System.Diagnostics.Process.Start(psi);
//再次进行该网格的数据查询
dbs_Forecast.dbConnectionValid_get = true; //需要再次将其设置其为初始状态
gridDataTbl = dbs_Forecast.getGridDataRecrds(gridIdArray[i],queryTime); //单点查询模式
//如果经过再次打开vpn窗口之后,仍然无法连接,则后续网格的数据获取将不再执行
if(!dbs_Forecast.dbConnectionValid_get) //再次立即判断该值
{
//一旦发生网络中断,则在这里要记录此时的单点主查询时间
lastQueryTime_ConnectionException = queryTime;
setStatus_Forecast("read","读取"+queryTime.ToString()+"时刻网格"+"("+gridIdArray[i]+")"+"的数值预报记录时,发生了数据库连接中断!",progressValue_read_Forecast.ToString()+"%","("+readGridCounter.ToString()+"/"+totalGridNums_Forecast+")");
}
}
catch//(System.ComponentModel.Win32Exception ex)
{
//MessageBox.Show(ex.Message);
}
}
}