我正在寻找一些方法来运行没有窗口的程序, 我读到了这个:
string exePath = string.Format("{0}\\{1}", dir, "theUtility.exe");
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo( exePath );
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
startInfo.WorkingDirectory = dir;
System.Diagnostics.Process process = System.Diagnostics.Process.Start( startInfo );
// Wait for it to die...
process.WaitForExit();
但我正在寻找另一种方式,这个代码显示windows并运行另一个文件,但我需要启动程序没有任何窗口。
谢谢
答案 0 :(得分:2)
将WindowStyle设置为ProcessWindowStyle.Hidden;
例如
Process proc = new Process();
proc.StartInfo.FileName = Path.Combine("cmd.exe","");
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
答案 1 :(得分:0)
你可以创建一个WinForms应用程序,并通过最小化它来隐藏MainForm,而不是在初始化时在任务栏中显示它。
Form.WindowState = FormWindowState.Minimized;
Form.ShowInTaskBar = false;
然后,您可以在任何UI的MainForm消息循环中运行您想要的任何代码。如果您在某个时候需要用户界面,则可以显示主表单或任何其他数量的表单。
public partial class Form1 : Form
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
public Form1()
{
InitializeComponent();
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
MessageBox.Show("Loaded");
}
}
或者,您可以将控制台程序作为隐藏窗口启动并使用pinvoke,如以下帖子所述...
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ffe733a5-6c30-4381-a41f-11fd4eff9133/
class Program
{
const int Hide = 0;
const int Show = 1;
[DllImport("Kernel32.dll")]
private static extern IntPtr GetConsoleWindow();
[DllImport("User32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int cmdShow);
static void Main(string[] args)
{
Console.WriteLine("Press any key to hide me.");
Console.ReadKey();
IntPtr hWndConsole = GetConsoleWindow();
if (hWndConsole != IntPtr.Zero)
{
ShowWindow(hWndConsole, Hide);
System.Threading.Thread.Sleep(5000);
ShowWindow(hWndConsole, Show);
}
Console.ReadKey();
}
}