相关疑难解决方法(0)

C#Windows控制台应用程序如何判断它是否以交互方式运行

用C#编写的Windows控制台应用程序如何确定它是在非交互式环境中调用(例如从服务或作为计划任务)还是从能够进行用户交互的环境(例如命令提示符或PowerShell)调用?

c# user-interaction console-application

25
推荐指数
4
解决办法
1万
查看次数

可以获得进程的输出

我有一个第三方DOS进程,它将有关其进度的数据写入命令行.我想对进展做出反应.通常我会用一个ProcessRedirectStandardOutput = trueRedirectStandardError = true

.OutputDataReceived +=xyzOutputDataReceived; 
.ErrorDataReceived += xyzErrorDataReceived;
.Start();
.BeginOutputReadLine();
.BeginErrorReadLine();
Run Code Online (Sandbox Code Playgroud)

通常这是有效的.我得到了我需要的DataReceivedEventArg.

在这种情况下,该过程似乎更新了它所写的相同行(这怎么可能?),因此它将15%,15%的更改写入18%,依此类推.只有在执行结束时,似乎才将数据刷新到StandardOutput.

此外,如果我只是尝试将数据传输到文本文件(例如odb.exe >> output.txt),它什么都不显示.

有没有办法获取临时数据?

问题不在于获得标准输出,这可以正常工作(同步和异步).它是关于如何从一个我无法改变的进程中获取输出,并且似乎没有将它的输出刷新到标准流.

c#

9
推荐指数
1
解决办法
550
查看次数

运行命令行进程并在该进程仍在运行时获取输出?

如何在该进程仍在运行时运行命令行进程并获取输出?

我的意思是使用自己的进度条运行CLI进程,可执行文件本身需要很长时间才能完成操作,因此我想从自己的进程中获取进度信息以显示应用程序的进度,其他方式我不知道t有任何信息显示进度,直到过程结束.

我在WindowsForm项目中工作,而不是控制台应用程序.

我尝试使用FFMPEG.exe(x64)做同样的事情,我可以在FFMPEG运行时读取"进度",我可以从FFMPEG中选择进度并做我想要的,但是使用这个可执行文件我就是不能这样做,我不知道是否可能.

该程序是"dbPowerAmp CoreConverter",它是一个音乐转换器,我认为该程序以Unicode编码发送所有输出,因为要读取我需要将输出编码设置为Unicode的输出.

...其他问题是我找不到一种方法来读取此过程的StandardError输出,即使使用Unicode,所以如果有人可以帮助我解决这两个问题.

这是应用程序:http://www.dbpoweramp.com/install/dMC-R14.4-Ref-Trial.exe

以下是直接从CMD启动的程序的示例输出:

在此输入图像描述

(我需要的是在进程运行时选择进度条"*"星号字符数量来计算并在我的应用程序中显示该百分比)

这是我的代码:

Private Shared CoreConverter As New Process()

Private Shared CoreConverter_Info As New ProcessStartInfo() With { _
              .CreateNoWindow = True, _
              .UseShellExecute = False, _
              .RedirectStandardOutput = True, _
              .RedirectStandardError = True _
}

Private Shared Sub Run_CoreConverter()


    ' Just for testing CMD Unicode output:
    '
    ' CoreConverter_Info.FileName = "cmd"
    ' CoreConverter_Info.Arguments = "/U /C C:\CoreConverter.exe " & CoreConverter_Info.Arguments


    CoreConverter_Info.FileName = "C:\CoreConverter.exe"
    CoreConverter_Info.Arguments = String.Format("-infile=""{0}"" -outfile=""{1}"" -convert_to=""mp3 (Lame)""" …
Run Code Online (Sandbox Code Playgroud)

.net vb.net unicode winforms

6
推荐指数
1
解决办法
2597
查看次数

读取已打印到控制台的值

这可能是完全不可能的,但我想知道是否有办法读取控制台已经打印的值.例如,如果控制台打印

你以10米/秒的速度向北行驶

因此Console.WriteLine("You are travelling north at a speed of 10m/s");,有没有办法读取这一行,然后,为了论证,将这个值放在一个字符串中?

基本上我需要的是读取已经输出到控制台的内容,而不是用户输入.有办法吗?

提前致谢.

c# console

5
推荐指数
3
解决办法
7565
查看次数