【发布时间】:2020-11-05 13:25:23
【问题描述】:
我正在开发 Windows 服务,它将通过批处理文件生成 csv 文件。稍后我将读取该文件。 下面是批处理文件命令 psexec \wksp000ae2c8 -h -w D:\UPSData\OCCG\OPMI\Cache\OPSTimingExtractor\ "C:\Program Files (x86)\UPSAPPS\OCCG\OPMI\Tools\dirt.bat" > 051120072244.091.csv
当我在控制台中单独执行时,我能够生成 csv 文件。 Windows 服务生成批处理文件。
但是当我作为 windows Service Process.WaitForExit 执行它时不会返回。
我单独双击它执行的批处理文件并生成批处理文件。下面是代码
Process procstart = new Process();
ProcessStartInfo psi = new ProcessStartInfo
{
CreateNoWindow = true,
UseShellExecute = false,
FileName = "cmd.exe",
Arguments = @"/C "+ BatfileName,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardOutput = true,
RedirectStandardError = true,
ErrorDialog = false
};
procstart.StartInfo = psi;
procstart.Start();
procstart.WaitForExit();
当我添加 procstart.Kill 或 Close 时,它不起作用。 当我转到位置并尝试打开文件时,它说 FIle 在另一个进程中。
当我尝试删除文件时,它显示“操作无法完成,因为该文件已在 cmd.exe 中打开
【问题讨论】:
-
它是否正在等待击键?污垢.bat 的内容?
-
我正在使用 Windows 服务。不知道击键会如何进入画面。而且当我双击时没有击键。
-
因为如果一个批处理文件在退出之前需要一个击键,那么它会执行您在从服务进程调用时观察到的操作。不过只是怀疑。
-
可能相关:stackoverflow.com/a/31945741/1132334,此外还有serverfault.com/a/437508/387902(“PsExec,在我从服务流程)
-
我刚刚检查了批处理作业单独运行。在没有击键的情况下生成 csv
标签: c# .net-core windows-services