2010-11-26 149 views
1

我正试图整合我的应用程序的依赖关系。在这种情况下,我有一个控制台应用程序(MAD - MPEG音频解码器),我想将其嵌入到我的应用程序中。我已经将它作为资源添加了,但是如何将它作为文件引用?这是有问题的代码(VB.NET):在Windows窗体中嵌入控制台应用程序并用作过程?

With MAD.StartInfo 
    .FileName = My.Resources.madplay 
    .Arguments = "" 
    .UseShellExecute = False 
    .RedirectStandardInput = True 
    .RedirectStandardError = True 
    .RedirectStandardOutput = True 
End With 
MAD.Start() 
MAD.BeginOutputReadLine() 

显然这是行不通的。我需要引用My.Resources.madplay作为FileName的文件。有没有办法做到这一点,或者我应该将资源复制到光盘并在完成后将其删除?

+0

是的,你需要把它写出来作为一个文件,然后才能执行它。 – 2010-11-26 23:57:21

+0

我最终使用WriteAllBytes()将它写出到文件中,然后将其删除。谢谢! – Steven 2010-11-27 00:50:01

回答

0

最好的做法是将用于执行控制台应用程序的代码移到类库(DLL文件)中,然后将该DLL导入到您的WinForms项目和控制台应用程序项目中。

这样做仍然可以通过将所有音频解码逻辑放入由两个应用程序使用的单个库中来实现整合代码的目标,还允许您分离显示功能(但最小限度可能在于控制台应用程序)确实在两个应用程序之间有所不同。

否则,您将无法执行作为嵌入资源存在的文件,而无需将其解压缩到文件中。我想你可以把它做成一个临时目录,但是你将得到一个不太重要的任务,即获取窗口句柄并尝试将其托管在Windows窗体中。你会发现这样做的绝大多数方法都是为了避免黑客入侵,而且我发现很难相信当用户使用另外设计良好的Windows窗体时,用户会欣赏一个控制台应用程序。
而且,如果您要做的只是为两个应用程序中的音频解码提供通用功能,请致电调用从WinForms应用程序场景中的控制台应用程序的代码中将其放入动态链接库是迄今为止您的最佳解决方案。

0

我最终使用WriteAllBytes()将它写出到一个文件,然后删除它。

相关问题