C# 当用户右键单击并选择“打开方式”时打开所有文件

C# 当用户右键单击并选择“打开方式”时打开所有文件,c#,wpf,C#,Wpf,我有一个用WPF/C编写的应用程序,它可以将多个文件作为命令行参数。当我使用多个文件从命令行运行它时,它会打开所有文件。当我在资源管理器窗口中选择多个文件并将其拖动到应用程序图标时,它会打开所有文件。但是,如果我在资源管理器中选择多个文件并右键单击,选择“打开方式”,然后选择“我的应用程序”,则只会打开最后一个文件。有没有办法告诉Windows我的应用程序可以处理多个文件?我注意到有些程序似乎是这样工作的,而其他程序则不是这样。这是windows资源管理器的一个问题,它只在最后选定的文件上运行。

我有一个用WPF/C编写的应用程序,它可以将多个文件作为命令行参数。当我使用多个文件从命令行运行它时,它会打开所有文件。当我在资源管理器窗口中选择多个文件并将其拖动到应用程序图标时,它会打开所有文件。但是,如果我在资源管理器中选择多个文件并右键单击,选择“打开方式”,然后选择“我的应用程序”,则只会打开最后一个文件。有没有办法告诉Windows我的应用程序可以处理多个文件?我注意到有些程序似乎是这样工作的,而其他程序则不是这样。

这是windows资源管理器的一个问题,它只在最后选定的文件上运行。这可能会有所帮助:

shell实际上尝试为每个选定文件启动应用程序的单独实例。您的应用程序将需要a确保只有第一个实例实际显示其UI,b执行一些进程间通信以将文件从后面的实例传递到第一个实例。您可能已经在执行a,但没有执行b,这可以解释为什么您只看到一个文件被打开。关于这一点,请参阅上关于单实例应用程序部分的第二个问题。您可能还想了解,这是在应用程序实例之间传递信息的常用方法。

我准备接受这一点,但如果您选择多个Word文档并右键单击“用Word打开”,则会打开所有文档。我假设有一个特殊的注册表项,使Windows以这种方式打开多个文件。如果您正在执行一个实例应用程序,您如何知道实例2和3是否实际启动,从而将信息传递给第一个实例?我的测试应用程序没有执行a。在这种情况下,请选择“使用打开…”。。。应启动应用程序的多个实例,每个选定文件对应一个实例。如果情况并非如此,那么应用程序初始化代码中可能隐藏着一些隐藏的单Instance内容。不过,我不认为这是标准WPF应用程序的典型情况。