通过对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
}
}
请让我知道纠正这..这个错误的原因! 感谢先进! :)
从你得到的错误判断,它好像你正试图执行一个MP3。这是行不通的。
当你试图打开一个文件 - 也就是说,一个txt文件 - 通过双击,Windows也会查找该文件的默认应用程序的注册表 - 这在大多数的设置,将记事本。然后,它发送该命令:
"<System32 Directory>\Notepad.exe" <filename>
或
"C:\Windows\System32\Notepad.exe" "C:\Users\user\Desktop\test1.txt"
因此,第一个命令行参数是文件名。
长话短说:如果你的程序是通过尝试打开Windows资源管理器的MP3开始,你需要获得并保存在某个地方的命令行参数引用您的项目。
为此,您可以使用Environment.GetCommandLineArgs()
或将它们从static void main
的Program.cs
传递到第一个窗体的构造函数。
我很抱歉,请您详细说明Environment.GetcommandArgs与我使用的ActivationArgs不同吗?我所知道的..THey用于获取被双击的文件! – 2012-04-20 16:13:15
你从哪里得到这个错误吗?你是如何联系MP3的? – SLaks 2012-04-18 20:05:02
为什么不使用'Environment.GetCommandLineArgs()'? – SLaks 2012-04-18 20:05:47
@SLaks,在我的系统文件夹中...我有mp3文件。我doble点击到他们.. P.S-我已经改变了文件类型打开属性和设置我的EXE作为默认播放器。 – 2012-04-18 20:07:29