Можно ли встроить файл bat в .exe и использовать его с классом Process? - PullRequest
2 голосов
/ 17 октября 2011

Я создал командный файл, который используется с процессом.В настоящее время у меня просто есть приложение, указывающее на каталог на моей локальной машине.

Вместо того, чтобы связывать мой exe-файл с этим пакетом, я хотел бы просто встроить его в качестве ресурса, чтобы он содержался вEXE.Возможно ли это с помощью пакетного файла?

ProcessStartInfo startInfo = new ProcessStartInfo()

startInfo.FileName = "c:\test\batchFile.bat";

// set up and execute batch file with various arguments

Я добавил пакетный файл в свое решение и добавил его в качестве «ресурса» в файл моего проекта.Я не совсем уверен, что это путь или как получить доступ к этому в моем проекте.

Ответы [ 4 ]

2 голосов
/ 17 октября 2011

Что касается встраивания пакетного файла - вы можете встраивать практически все, что нужно ... ответ на этот вопрос - да: -)

Что касается использования встроенного пакетного файла - самый простой вариантэто чтение его из ресурса (см. http://msdn.microsoft.com/en-us/library/system.resources.resourcemanager.aspx и http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getmanifestresourcestream.aspx) и сохранение его в виде реального файла - затем используйте его.

ЕСЛИ вы внедрили .NET EXE / DLLВы можете использовать это, не сохраняя его как настоящий файл ... с командным файлом, я подозреваю, вам нужно будет сохранить его как настоящий файл.

2 голосов
/ 17 октября 2011

Как насчет этого подхода:

  • сохранить ваш пакетный файл в вашей программе (как ресурс или строковую константу или ...)
  • сохранить содержимое во временный файл
  • запустить этот временный пакетный файл
1 голос
/ 17 октября 2011

Вероятно, самый пуленепробиваемый способ сделать это - записать .bat во временный файл, а затем запустить этот временный файл.

cmd.exe, по моему опыту, довольно привередливый и может вести себя по-разному в разных контекстах. Если вы хотите, чтобы он вел себя так же, как файл .bat, который вы запускаете из файловой системы, то вам следует запустить файл .bat из вашей файловой системы.

Вы можете попробовать (но я бы не рекомендовал) передавать команды в экземпляр cmd.exe, но, как я уже сказал, вы можете получить другое поведение.

1 голос
/ 17 октября 2011

конечно:

вы должны запустить его, но с command.com до

System.Diagnostics.Process.Start("cmd", "/c c:\test\batchFile.bat");
...