ClickOnce 응용 프로그램입니다. documentation에 따르면 "응용 프로그램이 처음 실행될 때 명령 줄 옵션을 처음 제공 한 경우 다시 시작하면 다시 같은 옵션을 사용하여 응용 프로그램이 시작됩니다". 그러나 이것이 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를 호출하는 것은 좋지 않습니다. 왜냐하면 업데이트로 인해 다시 시작되면 실행 파일 경로가 변경 될 것이고 어쨌든 .xml 파일의 경로를 찾을 수 없기 때문입니다. appref-ms – Nick
제 해결 방법은 업데이트/재시작 전에 명령 줄 인수를 데이터 디렉토리의 파일에 작성하고 다시 시작한 후에 명령 줄 인수가없는 경우 인수 파일이 있는지 확인하는 것입니다. 이 경우 파일에서 인수를로드하고 파일을 삭제합니다. – Nick
그래, 나는 이런 식으로 일을 끝냈다. – Juan