Приложение.Перезапустить, не передавая аргументы

Это приложение ClickOnce. Согласно документация,"если ваше приложение изначально было предоставлено параметры командной строки при первом запуске, перезагрузка запустит приложение снова с теми же параметрами.". Но я не знаю, должно ли это работать или нет с приложениями 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();
}

я связал свое приложение с

1 ответов


Я считаю Application.Restart был разработан для стандартных аргументов командной строки вместо того, как приложения ClickOnce обрабатывают его.

глядя на код Microsoft для Application.Restart, они явно проверяют, является ли приложение приложением ClickOnce, а затем перезапускают его без любые аргументы передаются. Любое другое приложение, получает Environment.GetCommandLineArgs() проанализирован и отправлен в новый процесс.

Я думаю, что лучшее решение, вместо того, чтобы писать аргументы в файл, это просто запустите новый процесс как таковой:

"path\Application Name.appref-ms" arg1,arg2,arg3

таким образом, когда ваше приложение запускается, GetCommandLineFile() снова схватить аргументы.