这是ClickOnce应用程序。根据{{3}},“如果您的应用程序最初在首次执行时提供了命令行选项,则Restart将使用相同的选项再次启动应用程序。”。但我不知道这是否应该与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()
将返回一个空数组。
答案 0 :(得分:3)
我认为Application.Restart
是为标准命令行参数而设计的,而不是ClickOnce应用程序如何处理它。
查看Microsoft的Application.Restart
代码,他们明确检查应用程序是否是ClickOnce应用程序,然后重新启动,不带传递任何参数。任何其他应用程序都会解析Environment.GetCommandLineArgs()
并发送到新进程。
我认为更好的解决方案,而不是将参数写入文件,只需简单地启动一个新流程:
"path\Application Name.appref-ms" arg1,arg2,arg3
这样,当您的应用程序启动时,GetCommandLineFile()
应该再次获取参数。