通过双击关联文件打开程序,无法获取文件名!

时间:2011-03-29 23:59:08

标签: c#

我有一个与之关联的文件类型的程序(* .cqd)。当用户双击.cqd文件时,它打开我的程序就好了,但我不能在我的生活中获取用于打开程序的文件的名称/路径。

我尝试过以下代码:

public static void Main(string[] args)
{
    foreach (string s in args)
    {
        MessageBox.Show("MAIN: " + s);
    }
}

这只给了我程序本身的路径。

我也试过了:

foreach (string arg in Environment.GetCommandLineArgs())
{
     MessageBox.Show(arg);
}

具有相同的效果。我很难找到有关该主题的信息,因为我的搜索给了我“如何使用它的相关程序打开文件?”而不是我遇到的问题。我能得到的任何帮助都将不胜感激。

NINJA编辑:这不是WPF项目。对不起,我没有具体说明。我还修了一个简短的拼写错误。

发现问题! 当我发布应用程序时,它会发布到.application文件。我进入了项目的/ bin / release /文件夹,找到了.exe文件。当我将文件拖到.exe上时,它正确地将路径传递给参数。猜猜我需要阅读更多关于它为什么的信息,如果我可以让.application文件使用参数,看看它是如何自动更新ClickOnce的。

谢谢大家的帮助!如果我需要做任何事情来关闭这个帖子,请告诉我。

4 个答案:

答案 0 :(得分:4)

AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]

适用于ClickOnce激活

答案 1 :(得分:2)

也许你的意思是:

public static void Main(string[] args)
 {
     foreach (string s in args)
     {
         MessageBox.Show("MAIN: " + s);
     }
 } 

答案 2 :(得分:1)

This blog post详细说明了您的确切问题和解决方案。

但是,简而言之,它没有存储在args中,而是存储在:

AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData [0]

这假设您使用的是WPF

答案 3 :(得分:1)

在App.xaml.cs

 protected override void OnStartup(StartupEventArgs e)
    {
        if (e.Args != null && e.Args.Length > 0)
        {
            //MessageBox.Show("dgda");
            //DirectOpenPath = e.Args[0].ToString();
            this.Properties["ArbitraryArgName"] = e.Args[0];
        }
        base.OnStartup(e);
    }

在MainWindow.xaml.cs

InitializeComponent();

        if (Application.Current.Properties["ArbitraryArgName"] != null)
        {

            string fname = Application.Current.Properties["ArbitraryArgName"].ToString();

            // Act on the file...
        }