【发布时间】:2011-12-16 02:00:38
【问题描述】:
我有一个 clickonce 应用程序,并且为此应用程序设置了几个文件处理程序(为了这个示例,我想处理具有 .aaa 或 .bbb 扩展名的文件)。
如果我选择具有这些扩展名之一的单个文件,我的应用程序将按预期启动,一切都很好。但是,如果我选择多个文件并打开它们(通过点击 Enter 或通过右键单击并选择 Open),那么我的应用程序的多个实例将启动 - 每个实例一个被选中的文件。
这不是我所期望的行为,我只希望一个实例以 AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData 中的多个文件条目开始。这可以实现,还是我的期望不正确?
编辑:
详细说明一下:我们遵循@Matthias 提到的单实例方法,第一个启动的实例创建了一个命名服务器管道。随后的实例然后启动,检测它们是次要的,通过命名管道将它们的命令行参数(文件名)传递给主实例,然后退出。主实例通过命名管道接收文件名,并执行其操作(启动文件导入向导)。
当用户选择多个文件(即 5 个文件),然后选择在应用程序中打开这些文件时,就会出现问题。我没有得到一个从命令行上提供的 5 个文件名开始的辅助实例,而是得到了 5 个应用程序的辅助实例,每个实例在命令行上都有一个文件名。然后,它们中的每一个都会创建一个名为 pipe 的客户端并将该文件名传达给主实例 - 因此名为 pipe 的服务器会收到 5 条单独的消息。
跟进想法:
在聊完这个之后,我突然想到这可能只是注册文件处理程序的工作方式,也许它与 clickonce 无关。也许解决方案是让名为 pipe 的服务器在接收到每条消息后暂停并尝试在对消息进行操作之前对消息进行排队?
【问题讨论】:
-
此行为也适用于 win 表单应用程序。刚试过。我想没有办法解决这个问题。
标签: c# clickonce filehandler