通过对MP3文件双击运行在C#创建的应用程序,但收到一个错误

问题描述:

我想运行myplayer.exe MP3文件(我已经编写和C#开发)。 但我得到这个错误 - abc.mp3不是有效的Win32应用程序。通过对MP3文件双击运行在C#创建的应用程序,但收到一个错误

我用这个代码来获取文件路径 - ...

if 
    ((AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null)  
     &&  
    (AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Length>0)) 
     { 
      string fname = "No filename given"; 
      try 
       { 
       fname = AppDomain.CurrentDomain.SetupInformation. 
         ActivationArguments.ActivationData[0]; 

       Uri uri = new Uri(fname); 

       fname = uri.LocalPath; 

       this.Properties["ArbitraryArgName"] = fname; 
     } 

     catch (Exception ex) 
       { } 

     base.OnStartup(e); 
} 

在app.xaml.cs

,并在mainWindow.xaml.cs上面的代码,这是我用过的代码!

public CubeWindow() 
     { 
      InitializeComponent(); 
      this.Loaded += new RoutedEventHandler(MainContainer_Loaded); 
     } 

void MainContainer_Loaded(object sender, RoutedEventArgs e) 
    { 
    if(System.Windows.Application.Current.Properties["ArbitraryArgName"] != null) 
    { 
     string fname=System.Windows.Application.Current. 
        Properties["ArbitraryArgName"].ToString(); 
     me.Source = new Uri(fname, UriKind.RelativeOrAbsolute); 
     me.Play(); //me is the mediaelement 
    } 
    } 

请让我知道纠正这..这个错误的原因! 感谢先进! :)

+0

你从哪里得到这个错误吗?你是如何联系MP3的? – SLaks 2012-04-18 20:05:02

+0

为什么不使用'Environment.GetCommandLineArgs()'? – SLaks 2012-04-18 20:05:47

+0

@SLaks,在我的系统文件夹中...我有mp3文件。我doble点击到他们.. P.S-我已经改变了文件类型打开属性和设置我的EXE作为默认播放器。 – 2012-04-18 20:07:29

从你得到的错误判断,它好像你正试图执行一个MP3。这是行不通的。

当你试图打开一个文件 - 也就是说,一个txt文件 - 通过双击,Windows也会查找该文件的默认应用程序的注册表 - 这在大多数的设置,将记事本。然后,它发送该命令:

"<System32 Directory>\Notepad.exe" <filename> 

"C:\Windows\System32\Notepad.exe" "C:\Users\user\Desktop\test1.txt" 

因此,第一个命令行参数是文件名。

长话短说:如果你的程序是通过尝试打开W​​indows资源管理器的MP3开始,你需要获得并保存在某个地方的命令行参数引用您的项目。

为此,您可以使用Environment.GetCommandLineArgs()或将它们从static void mainProgram.cs传递到第一个窗体的构造函数。

+0

我很抱歉,请您详细说明Environment.GetcommandArgs与我使用的ActivationArgs不同吗?我所知道的..THey用于获取被双击的文件! – 2012-04-20 16:13:15

从你给它看起来像相关的命令行参数有问题的错误描述。 您必须阅读应用程序的命令行参数。 在WPF中,您可以处理您的Application_Startup事件以读取命令行参数。 您可以按照this了解在wpf中使用命令行参数。 This将帮助你进入在C#中播放MP3文件的细节..

希望这会有所帮助。