在你说这是一个重复的问题之前,请让我解释一下(因为我已经阅读了所有类似的帖子)。
我的应用程序具有这两种设置:
procStartInfo.CreateNoWindow = true;
procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
并且还有 WindowsApplication 作为输出类型。
当我调用命令行命令时,黑色窗口仍然出现。 我还能做些什么来隐藏窗口吗? 并非所有命令都会发生这种情况,XCOPY 是黑色窗口确实闪烁的情况。 只有当我进行 XCOPY 的目标也已包含该文件并且它会提示我是否要替换它时,才会发生这种情况。 即使我传入/Y它仍然会短暂闪烁。
如果有帮助的话,我愿意使用 vbscript,但是还有其他想法吗?
客户端将调用我的可执行文件,然后传入命令行命令即:
C:\MyProgram.exe start XCOPY c:\Test.txt c:\ProgramFiles\
这是应用程序的完整代码:
class Program
{
static void Main(string[] args)
{
string command = GetCommandLineArugments(args);
// /c tells cmd that we want it to execute the command that follows and then exit.
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/c " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
// Do not create the black window.
procStartInfo.CreateNoWindow = true;
procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo = procStartInfo;
process.Start();
}
private static string GetCommandLineArugments(string[] args)
{
string retVal = string.Empty;
foreach (string arg in args)
retVal += " " + arg;
return retVal;
}
}
问题是您正在使用cmd.exe。 只有 its 控制台窗口将被隐藏,而不是您要求其启动的进程的控制台窗口。 使用 cmd.exe 没有什么意义,除非您试图执行它本身实现的一些命令。 喜欢复制。
如果您需要 cmd.exe,您仍然可以抑制窗口,您必须使用 /B 选项来启动。 输入开始/?在命令提示符下查看选项。 并不是说它有帮助,你不能使用 START COPY。
xcopy.exe 中有一个特定的怪癖,可能也会让您感到困惑。 如果您不重定向输入,它不会执行。 如果没有诊断它就无法运行。
,然后将命令作为参数传递。而是直接调用命令 例如
System.Diagnostics.ProcessStartInfo procStartInfo = new System.DiagnosticsProcessStartInfo("xcopy", "<sourcedir> <destdir> <other parameters>");
procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.UseShellExecute = false;
您的流程
cmd.exe
并通过标准
input.WriteLine
将命令传递给它,并且您不希望每次运行代码时都弹出 CMD 窗口,您可以简单地编写以下命令: test.StartInfo.FileName = "cmd.exe";
test.StartInfo.CreateNoWindow = true;
通过将create no window
设置为 false,我们将在后台运行发送到 CMD 的命令,并且不会向用户显示输出。通过将其设置为 false,会弹出 CMD 窗口。
Process process = new Process();
process.StartInfo.FileName = "CMD.exe";
// Your command for executing
process.StartInfo.Arguments = $"";
// Hide cmd window
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start();
// If needed, wait for exit
process.WaitForExit();