Вставить консольное приложение в Windows Form и использовать как процесс? - PullRequest
1 голос
/ 27 ноября 2010

Я пытаюсь консолидировать зависимости моего приложения. В этом случае у меня есть консольное приложение (MAD - MPEG Audio Decoder), которое я хочу встроить в свое приложение. Я добавил его в качестве ресурса, но как я могу ссылаться на него как файл? Это рассматриваемый код (VB.NET):

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. Есть ли способ сделать это, или я должен скопировать ресурс на диск и удалить его после того, как я закончу?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2010

В итоге я использовал WriteAllBytes (), чтобы записать его в файл, а затем удалил.

0 голосов
/ 27 ноября 2010

На самом деле рекомендуется переместить код, выполняющий работу вашего консольного приложения, в библиотеку классов (файл DLL), а затем импортировать эту DLL как в проект WinForms, так и в проект приложения консоли.

Это по-прежнему будет способствовать достижению цели консолидации кода, если поместить всю логику декодирования звука в единую библиотеку, которая используется обоими приложениями, но также позволит вам разделить функции дисплея (какими бы минимальными они ни были в консольном приложении). ) что действительно различаются в обоих приложениях.

В противном случае вы не сможете выполнить файл, который существует как встроенный ресурс, без извлечения его в файл. Я полагаю, вы могли бы сделать это во временном каталоге, но тогда у вас останется не такая уж простая задача - получить дескриптор окна и попытаться разместить его в форме Windows. В большинстве случаев вы обнаружите, что это пахнет взломом, и мне трудно поверить, что ваши пользователи оценят консольное приложение, которое им бросают, когда они используют хорошо разработанную форму Windows.
И снова, если все, что вы пытаетесь сделать, это сделать общую функциональность для декодирования звука доступной в обоих приложениях, вызвав этот код из консольного приложения за кулисами в приложении WinForms, поместив его в динамически связанная библиотека - безусловно, ваше лучшее решение.

...