C# 如何在windows应用程序中以隐藏模式启动notepad.exe?

C# 如何在windows应用程序中以隐藏模式启动notepad.exe?,c#,C#,我正在尝试以隐藏模式启动notepad.exe,如下是我编写的代码:- try { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = false; startInfo.UseShellExecute = false; startInfo.FileName = "notepad.exe"; startInfo.WindowStyle = P

我正在尝试以隐藏模式启动notepad.exe,如下是我编写的代码:-

try
{
     ProcessStartInfo startInfo = new ProcessStartInfo();
     startInfo.CreateNoWindow = false;
     startInfo.UseShellExecute = false;
     startInfo.FileName = "notepad.exe";
     startInfo.WindowStyle = ProcessWindowStyle.Hidden;
     startInfo.Arguments = @"C:\Users\Sujeet\Documents\test.txt";
}
catch
{ 

}
但问题是进程(即notepad.exe)成功启动,但startInfo.WindowStyle=ProcessWindowStyle.Hidden不起作用。
我已上网解决此问题,但无法获得正确的解决方案。

此版本适用于我的电脑:

try
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = false;
    startInfo.UseShellExecute = true;
    startInfo.FileName = @"%windir%\system32\notepad.exe";
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.Arguments = @"C:\Users\Sujeet\Documents\test.txt";
    Process.Start(startInfo);
}
catch
{ }
我只收到一个Win32Exception,告诉我找不到文件(test.txt),但进程正在运行,并且没有可见的窗口

请小心退出该进程,否则用户最终将运行不可见的进程

如果您的应用程序不合作(如您在评论中提到的calc.exe),您可以尝试以下操作:

在某处定义:

    [DllImport("user32.dll")]
    private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
    const int SW_SHOW = 5;
    const int SW_HIDE = 0;
然后在装入板条箱后执行以下操作:

    var proc = Process.Start(startInfo);
    while (proc.MainWindowHandle == IntPtr.Zero) //note: only works as long as your process actually creates a main window.
        System.Threading.Thread.Sleep(10);
    ShowWindow(proc.MainWindowHandle, SW_HIDE);

我不知道为什么路径
%windir%\system32\calc.exe
不起作用,但它可以与
startInfo.FileName=@“c:\windows\system32\calc.exe”一起工作

您所说的“隐藏模式”是什么意思?在任务栏中不可见?
startInfo.WindowStyle=ProcessWindowStyle。如果使用
startInfo.UseShellExecute=false
,则隐藏的
将不起作用。与论坛网站不同,我们不会在上使用“谢谢”或“感谢任何帮助”或签名。看见“。是的,应用程序应该正在运行但不可见?@Antara你确定吗?”?它仅出现在TaskManager、ProcessExplorer或类似程序中。如果它真的没有出现,你有什么例外吗?但是如果我用calc.exe替换notepad.exe路径,它就不工作了,为什么会发生这种情况??您需要为可执行文件提供正确路径的任何建议。在我的机器上
%windir%\system32\calc.exe
也可以工作。也许你的calc.exe在另一个目录中?我已经测试了wordpad.exe和mspaint.exe的相同代码,它工作得非常好,但我的问题是为什么它不适用于calc.exe。也许你仍然定义了
startInfo.Arguments