我有一个可以通过命令行获取参数的 WPF 应用程序。我的应用程序不能重复(我将其设为单个实例),但我希望能够多次添加参数 - 并将它们添加到 runnig 应用程序中而无需打开另一个窗口。现在在我的代码中,我检查应用程序是否有另一个实例 - 如果有,我会抛出异常。我正在寻找一种能够多次运行以下脚本的方法:
Myapp.exe -firstname first -lastname last
并且每次运行的应用程序都会将插入的参数添加到其列表中。我该怎么做?
我有一个可以通过命令行获取参数的 WPF 应用程序。我的应用程序不能重复(我将其设为单个实例),但我希望能够多次添加参数 - 并将它们添加到 runnig 应用程序中而无需打开另一个窗口。现在在我的代码中,我检查应用程序是否有另一个实例 - 如果有,我会抛出异常。我正在寻找一种能够多次运行以下脚本的方法:
Myapp.exe -firstname first -lastname last
并且每次运行的应用程序都会将插入的参数添加到其列表中。我该怎么做?
在执行检查应用程序是否为单一应用程序时 - 如果存在应用程序实例(重复调用) - 应用程序应该向用户发送错误消息。在这种情况下,您应该检查是否有命令行参数,如果有 - 只需发送 Close() 并返回命令而不显示任何错误消息。应用程序将从命令行获取参数并使用它们执行它知道的操作。
您可以使用 Application.Current.Shutdown() 来停止您的应用程序。如果在 OnStartup 中调用它,它可以附加在显示的窗口之前。
对于读取参数,您可以在任何地方使用 OnStartup 或 Environment.GetCommandLineArgs() 中的 e.Args。
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
// check if it is the first instance or not
// do logic
// get arguments
var cmdLineArgs = e.Args;
if (thisisnotthefirst)
{
// logic interprocess
// do logic
// exit this instance
Application.Current.Shutdown();
return;
}
base.OnStartup(e);
}
protected override void OnExit(ExitEventArgs e)
{
// may be some release needed for your single instance check
base.OnExit(e);
}
}
我不知道您如何检查单个实例,但我为此使用 Mutex:
protected override void OnStartup(StartupEventArgs e)
{
Boolean createdNew;
this.instanceMutex = new Mutex(true, "MySingleApplication", out createdNew);
if (!createdNew)
{
this.instanceMutex = null;
Application.Current.Shutdown();
return;
}
base.OnStartup(e);
}
protected override void OnExit(ExitEventArgs e)
{
if (this.instanceMutex != null)
{
this.instanceMutex.ReleaseMutex();
}
base.OnExit(e);
}
跳这会帮助你。