从C#启动远程进程的问题

| 我正在使用System.Diagnostics.Process.Start在另一台域计算机上启动远程应用程序。 不幸的是,如果远程进程已经在运行,但是在远程计算机桌面的后台,则该应用程序不会使用Process.Start获得焦点。 问题1:是否存在另一种API或机制来迫使远程应用程序获得焦点,或通过闪烁来引起用户的注意? 我注意到的另一个问题是,如果远程进程已经在运行,则除了原始实例外,还可能执行新实例。这违反了MSDN的说明文件:   \“如果该流程已经在运行,则不会启动任何其他流程资源。相反,现有流程资源将被重用,并且不会创建新的Process组件。在这种情况下,Start不会返回新的Process组件,而是将null返回给调用过程。“ 问题2:在这种情况下,是否有人找到阻止应用程序第二实例启动的方法? WMI是用于远程启动应用程序的更好选择吗?     
已邀请:
        好吧,不知道这对您有多好,但这是您可以在帮助程序中使用的示例类。这只是一个开始,如果您打算使用它,则将需要一个网络系统(不过对于C#来说还不错)。告诉我它如何为您工作。
/// <summary>
/// Allows you to start a specified program, or if it is already running, bring it into focus
/// </summary>
static class SFProgram
{
    static public void StartFocus(string FileName, string ProcessName)
    {
        if (!ProcessStarted(ProcessName))
            Process.Start(FileName);
        else
            SFProgram.BringWindowToTop(\"notepad\");
    }

    [DllImport(\"user32.dll\")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetForegroundWindow(IntPtr hWnd);
    [DllImport(\"user32.dll\")]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    /// <summary>
    /// Bring specified process to focus
    /// </summary>
    /// <param name=\"windowName\">Process Name</param>
    /// <returns>If it was successful</returns>
    private static bool BringWindowToTop(string windowName)
    {
        Process[] processes = Process.GetProcessesByName(windowName);
        foreach (Process p in processes)
        {
            int hWnd = (int)p.MainWindowHandle;
            if (hWnd != 0)
            {
                return SetForegroundWindow((IntPtr)hWnd);
            }
            //p.CloseMainWindow();
        }
        return false;
    }

    private static bool ProcessStarted(string ProcessName)
    {
        Process[] processes = Process.GetProcessesByName(ProcessName);
        return (processes.Length > 0);
    }
}
    

要回复问题请先登录注册