Вграждане на конзолно приложение в Windows Form и използване като процес?

Опитвам се да консолидирам зависимостите на моето приложение. В този случай имам конзолно приложение (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. Има ли начин да направя това или трябва да копирам ресурса на диск и да го изтрия, след като свърша?


person Steven    schedule 26.11.2010    source източник
comment
Да, ще трябва да го запишете като файл, преди да можете да го изпълните.   -  person Hans Olsson    schedule 27.11.2010
comment
В крайна сметка използвах WriteAllBytes(), за да го запиша във файл, след което го изтрих след това. Благодаря!   -  person Steven    schedule 27.11.2010


Отговори (2)


Най-добрата практика е наистина да преместите кода, който върши работата от вашето конзолно приложение, в библиотека с класове (DLL файл) и след това да импортирате този DLL във вашия проект WinForms и проект за конзолно приложение.

Това все още ще постигне целта ви за консолидиране на кода чрез поставяне на цялата ви логика за аудио декодиране в една библиотека, която се използва от двете приложения, но също така ви позволява да отделите функционалността на дисплея (колкото и минимална да е тя в конзолното приложение), която < em>има ли разлика между двете приложения.

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

person Cody Gray    schedule 26.11.2010
comment
Моето WinForm GUI приложение извиква конзолното приложение и го изпълнява като отделен процес. Просто се чудех дали мога, вместо да го разпространявам като отделен файл, да го извикам от My.Resources. В крайна сметка използвах WriteAllBytes(), за да го запиша във файл, след което го изтрих след това. - person Steven; 27.11.2010

В крайна сметка използвах WriteAllBytes(), за да го запиша във файл, след което го изтрих след това.

person Steven    schedule 27.11.2010