首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Application.Restart不传回参数

Application.Restart不传回参数
EN

Stack Overflow用户
提问于 2012-01-07 04:21:34
回答 1查看 1.8K关注 0票数 6

这是一个ClickOnce应用程序。根据文档,“如果您的应用程序最初在第一次执行时被提供了命令行选项,那么重新启动将使用相同的选项再次启动应用程序”。但我不知道这是否适用于ClickOnce应用程序。如果是的话,我做错了什么?

这是我的代码:

代码语言:javascript
复制
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文件时,应用程序将以文件名作为惟一参数启动,但是当我重新启动(通过按下.abc)时,GetCommandLineFile()将返回一个空数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-15 15:21:54

我相信Application.Restart是为标准命令行参数而设计的,而不是ClickOnce应用程序处理它的方式。

查看微软的Application.Restart代码,他们显式地检查应用程序是否是ClickOnce应用程序,然后在不传递参数的情况下重新启动。任何其他应用程序,都会将Environment.GetCommandLineArgs()解析并发送到新进程。

我认为一个更好的解决方案,不是将参数写入文件,而是以这样的方式启动一个新过程:

代码语言:javascript
复制
"path\Application Name.appref-ms" arg1,arg2,arg3

这样,当应用程序启动时,GetCommandLineFile()应该再次获取参数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8767325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档