我正在 .Net Compact Framework 中开发移动应用程序。 我设法编辑注册表 HKEY_CLASSES_ROOT,以便单击扩展名为 .xyz 的文件将打开我的应用程序。基本上,我需要在点击这个文件时对其进行一些操作。
但是,我意识到如果我第一次这样做,它会到达位于 static void Main
的 program.cs。但是当程序运行并且我再次单击扩展名为 .xyz 的文件时,它不会加载程序 static void Main
。我尝试在当前运行的表单上设置断点,但仍然没有。
那么它去了哪里呢?如何检测文件 .xyz 是否被单击并执行某些操作?
最佳答案
您遇到的最大问题是一旦应用程序运行 Main 将永远不会再次调用,事实上它不应该。
不幸的是,在 Windows Mobile 下,CF 本身试图保持应用程序单例,因此当您尝试再次运行他的应用程序时,CLR 本身会拦截它,而是将现有实例置于最前面。不幸的副作用之一是您没有机会处理命令行参数。
要让它工作,你必须做一些事情:
- Subvert the CF's attempt to make your app a sinlgeton所以您可以运行多个实例。
- 在应用程序中保持互斥锁以了解您是否已经在运行。
- 尽早生成线程以监听来自后续实例的传入参数。当参数进来时,把自己摆在最前面,妥善处理参数。
- 启动时,如果互斥量已被占用(即应用程序已在运行),使用 IPC(点对点队列是一种好方法)向现有应用程序的监听器线程(请参阅 #3)发送您的参数然后退出。
关于C#CF : How to open specific file extension with my program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2436295/