これはClickOnceアプリケーションです。 documentationによると、 "アプリケーションが最初に実行されたときに最初にコマンドラインオプションが提供された場合、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
ファイルをダブルクリックすると、アプリケーションは唯一の引数としてファイル名を指定して起動しますが、その後、ときに私は:ここでは
GetCommandLineFile()
は空の配列を返します。
私は同じ問題を抱えています。同じ引数を使用してアプリケーションを再起動する必要があります。 Application.Restart()を呼び出すだけで、(少なくともClickOnceを使用しないときは)同じ引数を渡すことはありません。私はこれを行う他の方法も見つけられません。 Restart()メソッドでは新しい引数を渡すことはできません。また、Process.Startを呼び出すのは良いことではありません。なぜなら、更新のために再起動した場合、実行可能なパスが変更されてしまうからです。 appref-ms – Nick
私の回避策は、コマンドライン引数をデータディレクトリのデータディレクトリに書き込んで更新/再起動し、再起動後にコマンドライン引数がない場合、引数ファイルが存在するかどうかを確認することです。そうであれば、ファイルから引数をロードし、ファイルを削除します。 – Nick
さて、私はこのようなことをやめました。 – Juan