2014-10-27 4 views
0

У меня есть файл, который мне нужно запустить, создав командную строку. В основном так оно и есть:C# Запустить командную строку из ресурсов

Имя файла UArtCMD.exe, я использую его, открывая командную строку в его каталоге и запуская команды, запрограммированные в нем, например «uartcmd a». То, что я пытаюсь сделать, это добавить gui к этому программному обеспечению извне, и когда, скажем, нажата кнопка на gui, она будет запускать команду с помощью командной строки.

Мне удалось убежать от компьютера без каких-либо задержек, но проблемы возникают, когда я устанавливаю программное обеспечение на другой компьютер. Поскольку UArtCMD является внешним программным обеспечением, он не будет на каждом компьютере, поэтому я попытался добавить его к ресурсам проекта и запустить его оттуда, проблема в том, что я понятия не имею, как это сделать.

Это мой код для запуска командной строки на компьютере, который имеет UArtCMD

public static string executeLine(string command) 
    { 
     string result; 
     try 
     { 
      Process process = Process.Start(new ProcessStartInfo("cmd.exe", "/c " + command) 
      { 
       CreateNoWindow = true, 
       UseShellExecute = false, 
       WorkingDirectory = "C:\\UArtCMD", 
       RedirectStandardError = true, 
       RedirectStandardOutput = true 
      }); 
      process.WaitForExit(); 
      string text = process.StandardOutput.ReadToEnd(); 
      process.Close(); 
      MainWindow.log(text); 
      result = text; 
     } 
     catch (Exception ex) 
     { 
      result = ex.StackTrace; 
     } 
     return result; 
    } 

Спасибо заранее!

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

+1

1) где вы извлекаете ресурсы и сохраняете свой исполняемый файл в файловой системе? 2) Я бы не использовал c: \ something как рабочий каталог (пользователи с ограничениями или UAC могут это предотвратить) –

+0

Удалите атрибут WorkDirectory, добавьте uARTCMD как часть вашего проекта и проведите его «Копировать локально» –

+0

@AdrianoRepetti I не извлекайте их, они находятся в ресурсах, и я установил свойство «Копировать в выходной каталог» на «Всегда», как предложил SalamiArmy. – Daedalus

ответ

0
  1. Включите ссылку на файл UArtCMD.exe в своем решении (может быть где угодно в структуре решения).
  2. Установите для свойства «Копировать в выходной каталог» значение «Всегда».
  3. Свойство «WorkingDirectory» вашего процесса задает «Environment.CurrentDirectory».

Теперь UArtCMD.exe всегда должен найти путь в каталог BIN (даже если он построен с помощью агента построения в незнакомом выходной каталог), и код будет знать, искать его в том же каталоге, что и код работает от.

Редактировать: комментарий об удалении свойства «WorkDirectory» из объекта процесса действителен, вы можете сделать это, а не устанавливать его в «Environment.CurrentDirectory», они оба делают то же самое.

+0

работает, когда он находится на моей визуальной студии, но когда я его публикую и использую установку. exe на другом компьютере, он не работает, он открывает командную строку в каком-то странном месте: «C: \ Users \ amitl \ AppData \ Local \ Apps \ 2.0 \ CDX6CCR1.79G \ 5WDJ5DCZ.62Y \ rts ... tion_5f66aa7ae274c4f6_0001.0000_826a6715465111b8 \ UArtCMD " – Daedalus

+0

Если у вас возникли проблемы с не установкой свойства« WorkDirectory »или установкой его в Environment.CurrentDirectory, более тщательный путь. Попробуйте настроить его на: (новый System.Uri (Assembly.GetExecutingAssembly(). CodeBase)). AbsolutePath – SalamiArmy

+0

Infact "(новый System.Uri (Assembly.GetExecutingAssembly(). CodeBase)). AbsolutePath будет включать имя файла текущей сборки , Вы действительно хотите, чтобы содержащая директория. «Path.GetDirectoryName» может решить это для вас. Таким образом, полное выражение, присвоенное WorkDirectory, равно: ** Path.GetDirectoryName ((новый System.Uri (Assembly.GetExecutingAssembly(). CodeBase)). AbsolutePath) ** Если вы действительно хотите быть основательным в поиске UArtCMD.exe относительно запущенной сборки. – SalamiArmy

Смежные вопросы