我正在开发.Net Compact Framework中的移动应用程序。 我设法编辑注册表HKEY_CLASSES_ROOT,以便点击具有.xyz扩展名的文件将打开我的应用程序。基本上,我需要在点击它时对该文件进行一些操作。
但是,我意识到如果我第一次这样做,它会在static void Main
到达program.cs。但是当程序运行时我再次单击带有.xyz扩展名的文件时,它不会加载程序static void Main
。我尝试在当前运行的表单中设置断点,但仍然没有。
那么它去哪儿了?如何检测文件.xyz被点击并执行某些操作?
答案 0 :(得分:2)
你遇到的一个大问题是,一旦应用程序运行,Main将永远不会被再次调用,事实上它不应该被调用。
在Windows Mobile下,遗憾的是,CF本身会尝试保留应用程序单例,因此当您尝试第二次使用app时,CLR本身会拦截它,而是将现有实例放在首位。其中一个不幸的副作用是你没有机会处理命令行参数。
要实现这一点,您必须做一些事情:
答案 1 :(得分:1)
您说每次点击文件时都需要对文件执行某些操作。我假设这是与GUI相关的东西,就像你想要在双击时显示文件的属性一样。
假设您的程序有一个主要表单,您可以将其MinimizeBox
属性设置为false
,并将Deactivate
事件设置为this.Close();
。这样,当您单击正确类型的文件时,您的应用程序将启动并读取命令行参数并显示文件详细信息。如果用户然后使用右上方的“确定”按钮关闭您的应用程序,它将关闭以实现真实状态,以便下次打开它时将打开一个新实例并正确读取命令行参数。或者,如果用户只是导航到WinMo中的其他程序,则应用程序的Deactivate
事件将触发,关闭应用程序。无论哪种方式,应用程序始终处于打开状态且位于顶部或完全关闭,因此单击文件资源管理器中的文件将始终打开新实例。
答案 2 :(得分:0)
你在Main中有字符串args吗?
static void Main(string[] args)
答案 3 :(得分:0)
您的问题是,您正在寻找再次调用static void Main
,这是Static Constructor。静态构造函数只调用一次。它们在类(在这种情况下是你的程序)被初始化之前调用,然后再也不会被调用。他们不是为你的程序的每个新实例调用..