gpt4 book ai didi

C# - 启动不可见进程(CreateNoWindow 和 WindowStyle 不起作用?)

转载 作者:可可西里 更新时间:2023-11-01 08:09:52 30 4
gpt4 key购买 nike

我有 2 个在 .NET 中创建的程序 (.exe)。我们称他们为主人和 worker 。 Master 启动 1 个或多个 Worker。 Worker 不会与用户交互,但它是一个 WinForms 应用程序,可以接收命令并根据从 Master 接收到的命令运行 WinForms 组件。

我希望 Worker 应用完全隐藏运行(当然除了出现在任务管理器中)。我认为我可以使用 StartInfo.CreateNoWindowStartInfo.WindowStyle 属性来完成此操作,但我仍然在窗体中看到 Client.exe 窗口和组件。但是,它不会显示在任务栏中。

   Process process = new Process
{
EnableRaisingEvents = true,
StartInfo =
{
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "Client.exe",
UseShellExecute = false,
ErrorDialog = false,
}
};

我需要怎么做才能让Client.exe运行起来却不显示呢?ㅤㅤㅤㅤㅤ

最佳答案

您对 CreateNoWindow/WindowStyle 的使用在我的带有 notepad.exe 的系统上运行良好(例如,它是隐藏的但在后台运行),所以它可能是 WinForms 的问题应用程序正在做。一些想法:

选项 1:如果您控制 WinForms 工作进程,您可以覆盖 Control.SetVisibleCore始终隐藏表格。如果你不想总是隐藏它,你可以传递一个命令行参数给它,例如/hide 将导致它被隐藏。示例(假设表单已经有代码隐藏):

public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}

protected override void SetVisibleCore(bool value)
{
// You'd probably want to parse the command line.
if (Environment.CommandLine.Contains("/hide"))
base.SetVisibleCore(false);
else
base.SetVisibleCore(value);
}
}

有了这个,运行 MyForm.exe 会产生一个具有可见表单的进程。运行 MyForm.exe/hide 会产生一个带有隐藏表单的进程。您可以从主进程传递 /hide 参数,这样运行该应用程序的普通用户仍会看到它。

选项 2:您可以在应用程序启动后通过对 ShowWindow 执行 P/Invoke 来隐藏应用程序.关于此的更多信息 here .这有一个缺点,您有时会看到工作窗口在隐藏之前闪烁。示例:

class Program
{
public static void Main(string[] args)
{
ProcessStartInfo psi = new ProcessStartInfo()
{
FileName = @"C:\windows\system32\notepad.exe",
};

Process process = Process.Start(psi);

// Wait until the process has a main window handle.
while (process.MainWindowHandle == IntPtr.Zero)
{
process.Refresh();
}

ShowWindow(process.MainWindowHandle, SW_HIDE);
}

const int SW_HIDE = 0;

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}

关于C# - 启动不可见进程(CreateNoWindow 和 WindowStyle 不起作用?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011209/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com