【问题标题】:Process WaitForExit not responding进程 WaitForExit 没有响应
【发布时间】: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


【解决方案1】:

我通过在批处理文件中添加退出命令来实现这一点。而且我必须使用我的凭据执行该文件。

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 2017-04-07
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多