我之前发布了另一个关于从上下文菜单App获取参数的问题。如果您选择一个项目,它会为您提供该项目的字符串路径,但它会为所选项目大于一的项目启动应用程序的新实例。使用Environment.GetCommandLineArgs(),它为您提供了一个字符串数组,第一个元素是.exe调用函数,第二个元素是所选项的字符串路径。同样,如果我选择2个或更多项目并右键单击>>运行应用程序,我得到2个或更多的应用程序实例,每个实例的第一个元素为.exe,后跟第二个元素作为所选项目之一。 (我在加入两个元素后使用MessageBox.Show()完成此操作,它会弹出消息框3次,为所选的三个项目中的每一个弹出1。)
现在我使用Mutex只允许它运行一次,但我只得到第一个消息框(正如预期的那样)。
如果我选择多个项目,如何获得一个实例中列出的所有项目?
以下是没有互斥的代码:
static void Main()
{
String[] args = Environment.GetCommandLineArgs();
var message = string.Join(", ", args);
MessageBox.Show(message);
}
这就是Mutex:
static void Main()
{
Mutex startOnlyOne = new Mutex(false, "WinSyncSingalInstanceMutx");
if (startOnlyOne.WaitOne(0, false))
{
String[] args = Environment.GetCommandLineArgs();
var message = string.Join(", ", args);
MessageBox.Show(message);
startOnlyOne.Close();
}
还没有人能够帮助我解决这个问题,我希望有人可以帮助我解决这个问题。提前谢谢......
答案 0 :(得分:1)
您需要一个外部进程来处理这个问题,而您的shell扩展只是“触发器”机制。不要试图将shell扩展本身保持为单实例应用程序。
相反,您可以创建一个服务,该服务可以通过WCF侦听来自您的扩展的传入事件。然后它可以使用传入的文件路径执行任何操作。