我有一个与之关联的文件类型的程序(* .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的。
谢谢大家的帮助!如果我需要做任何事情来关闭这个帖子,请告诉我。
答案 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...
}