我有一个在线或离线可用的 ClickOnce 应用程序。该程序接受一个参数。在线时,我在 URL 上传递参数,如“url?argument”,效果很好。离线我使用应用程序的开始菜单链接启动一个进程。
是否可以通过此链接将参数传递给我的应用程序?我想我可以以某种方式计算出应用程序文件的位置,但是还有其他选择吗?
我可以通过将应用程序引用为“%userprofile%\Desktop\Your Shortcut Name Here.appref-ms”来实现这一点
然后,要传递参数,将它们作为一个单一的无空间实体传递,如下所示:arg1,arg2,arg3
整个事情在命令行上看起来像这样:
"%userprofile%\Desktop\Your Shortcut Name Here.appref-ms" arg1,arg2,arg3
然后在您的代码中,使用
AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]
检索参数。
我昨天刚刚写了一篇博客:http: //www.developingfor.net/net/processing-command-line-arguments-in-an-offline-clickonce-application.html
您可以将参数传递给离线 ClickOnce 应用程序。我只是设置一个指向 ClickOnce 快捷方式的快捷方式,并在最后添加参数。单击此处查看有关如何为离线 ClickOnce 应用程序传递和处理参数的文章。
不,您不能从“开始”菜单快捷方式传递参数。如果您找到方法,请告诉我,因为我已经尝试了很长时间:)。
以下是我在我的情况下解决问题的方法......
如果ActivationUri属性不为空,则应用程序是从浏览器启动的,并通过查询字符串传递参数(就像您描述的那样)。
如果 ActivationUri为空,则应用程序是从开始菜单启动的。在这些情况下,我从与应用程序一起部署的配置文件中获取参数。
你的论点传递了什么类型的信息?这对于确定如何存储参数(app.config、应用程序设置、用户设置、隔离存储等)很有用
旁注
我认为我通过使我的应用程序“单个实例”并尝试处理 StartupNextInstance 应用程序事件来完成一些事情,但没有运气。您只能通过这种方式获取传统的命令行参数,而不是 ClickOnce 查询字符串参数。