我有一个场景,我必须创建一个Windows服务,它将检查如果批处理文件没有运行,那么它应该执行该批处理文件。
此外,我的批处理文件用于使用Selenium for Application checkout进行自动化。
当我创建该服务时,批处理文件不会以某种方式执行,也无法启动selenium。当我在任务管理器中看到相同内容时,我可以看到一个cmd实例正在运行,但是无法运行我的selenium。
我的项目代码:计时器设置为1分钟
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (!File.Exists(ConfigurationManager.AppSettings["testFilePath"])) //To check whether batch file is running or not
{
System.Diagnostics.Process proc = new System.Diagnostics.Process(); // Declare New Process
proc.StartInfo.FileName = ConfigurationManager.AppSettings["BatchFilePath"];
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();
}
}
批处理文件就像这样:
copy C:\AutomatedTests\AHD\testingWS.txt C:\AutomatedTests\AHD\AHDExecutionService\testingWS.txt
start cmd /k java -jar "C:\AHS_Automation\Release\UnifiedBillingSystem\Selenium RC\selenium-server-1.0.3\selenium-server.jar"
此代码将定期检查批处理文件是否未执行,然后我的服务将开始执行,否则将无效。
答案 0 :(得分:1)
不确定这么少的上下文...但我要检查的第一件事是执行bat文件相对于bat文件使用的文件的路径;如果你从另一个程序调用bat文件,它通常会从该程序继承环境文件夹 - 这是大多数人不期望的。 (对于Windows服务,这是windows \ system32)检查是否是这种情况的最简单方法是在bat文件的第一行显式设置路径(例如cd [bat文件的路径])