使用StartInfo隐藏或最小化C#Start应用程序不起作用

时间:2016-06-08 06:44:18

标签: c#

我想从Windows服务启动任何外部应用程序。应隐藏或最小化应用程序。以下示例显示了我的尝试方式:

static void Main(string[] args)
{
    Process process = new Process();
    process.StartInfo.FileName = "C:\\Windows\\System32\\mspaint.exe";
    //process.StartInfo.FileName = "C:\\Windows\\system32\\calc.exe";
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.UseShellExecute = true;
    //process.StartInfo.UseShellExecute = false;
    process.Start();
}

对于MSPaint,它可以工作,但不适用于计算器。对于命令UseShellExecute,我尝试了truefalse,但对于计算器,没有任何作用。

任何人都可以解释为什么它适用于某些应用程序,如MSPaint.exe,而不适用于其他应用程序,如Calc.exe?还有其他方法可以启动隐藏或最小化的应用程序吗?

编辑:好的,我现在明白了。我测试我的程序作为控制台应用程序,所以我不必总是在编译后重新安装该服务。但由于Session 0 Isolation,我无法显示从我的服务启动的GUI程序。这是一个愚蠢的想法。

1 个答案:

答案 0 :(得分:-2)

这就是我的工作方式:

public const int SC_MINIMIZE = 6;

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

static void Main(string[] args)
{
    Process p = new Process();
    p.StartInfo.FileName = "calc.exe";
    p.Start();
    while (string.IsNullOrEmpty(p.MainWindowTitle))
    {
        Thread.Sleep(50);
        p.Refresh();
    }
    ShowWindow(p.MainWindowHandle, SC_MINIMIZE);
}

这将在窗口完全加载后立即最小化。不太漂亮,但完成工作。