我想从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
,我尝试了true
和false
,但对于计算器,没有任何作用。
任何人都可以解释为什么它适用于某些应用程序,如MSPaint.exe,而不适用于其他应用程序,如Calc.exe?还有其他方法可以启动隐藏或最小化的应用程序吗?
编辑:好的,我现在明白了。我测试我的程序作为控制台应用程序,所以我不必总是在编译后重新安装该服务。但由于Session 0 Isolation,我无法显示从我的服务启动的GUI程序。这是一个愚蠢的想法。
答案 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);
}
这将在窗口完全加载后立即最小化。不太漂亮,但完成工作。