gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:17:25 26 4
gpt4 key购买 nike

我正在使用 System.Diagnostics.Process.Start在另一台域计算机上启动远程应用程序。

不幸的是,如果远程进程已经在运行,但在远程计算机桌面的后台,应用程序不会使用 Process.Start 获得焦点。

问题 1:是否有其他 API 或机制来强制远程应用程序获得焦点或闪烁以引起用户的注意?

我注意到的另一个问题是,如果远程进程已经在运行,则可能会在原始实例之外执行一个新实例。这违反了 MSDN 的文档,其中说:

"If the process is already running, no additional process resource is started. Instead, the existing process resource is reused and no new Process component is created. In such a case, instead of returning a new Process component, Start returns null to the calling procedure."

问题 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);
}
}

关于c# - 从 C# 启动远程进程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6475285/

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