这是一个 ClickOnce 应用程序。根据文档 http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.WINDOWS.FORMS.APPLICATION.RESTART%29;, "如果您的应用程序最初在首次执行时提供了命令行选项,则“重新启动”将使用相同的选项再次启动该应用程序。“。但我不知道这是否适用于 ClickOnce 应用程序。如果是,我做错了什么?
这是我的代码:
public Form1()
{
InitializeComponent();
textBox1.Text = string.Join(Environment.NewLine, GetCommandLineFile());
}
private static string[] GetCommandLineFile()
{
if (AppDomain.CurrentDomain != null &&
AppDomain.CurrentDomain.SetupInformation != null &&
AppDomain.CurrentDomain.SetupInformation.ActivationArguments != null &&
AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null &&
AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Any())
{
return AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
}
else return new string[] { };
}
private void button1_Click(object sender, EventArgs e)
{
Application.Restart();
}
我将我的应用程序与.abc
扩展名,当我双击我的.abc
文件时,应用程序将以文件名作为唯一参数启动,但是当我重新启动时(通过按我的button1
), GetCommandLineFile()
将返回一个空数组。
我相信Application.Restart
是为标准命令行参数而设计的,而不是 ClickOnce 应用程序处理它的方式。
查看微软的代码Application.Restart
,他们显式检查应用程序是否是 ClickOnce 应用程序,然后重新启动它without任何正在传递的参数。任何其他应用程序,获取Environment.GetCommandLineArgs()
解析并发送到新进程。
我认为更好的解决方案不是将参数写入文件,而是简单地启动一个新进程,如下所示:
"path\Application Name.appref-ms" arg1,arg2,arg3
这样,当您的应用程序启动时,GetCommandLineFile()
应该再次抓住论点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)