@gentleactive

C# По нажатию на кнопку запускается start.bat, путь где находится start.bat считывается из Settings.xml, Как это реализовать?

Добрый день.
Подскажите, как реализовать?

необходимо чтобы по нажатию button1_Click запускался start.bat, но чтобы путь где лежит сам start.bat прописывался в Settings.xml лежащий в корне с программой , приведите пример как реализовать, сам только учусь не как не могу понять что и куда писать

Имеется Settings.xml
<?xml version="1.0" encoding="utf-8" ?>
<Settings>
    <PathToFile>"C:\Users\1234\Desktop\start.bat"</PathToFile>
</Settings>
<Settings>
    <PathToFile>"C:\Users\1234\Desktop\start2.bat"</PathToFile>
</Settings>


код программы
namespace Launcher
{
 
    public partial class Form1 : Form
    {
        private KeyEventArgs e;
 
        public Form1()
        {
            InitializeComponent();
            this.KeyPreview = true;
            this.IsMdiContainer = false;
            logo sf = new logo();
            sf.ShowDialog();
 
            Time.Text = "";
            timer1.Enabled = true;
            timer1.Interval = 1000;
        }
 
        protected override void OnKeyDown(KeyEventArgs a)     
        {
            base.OnKeyDown(a);
            if (a.KeyCode == Keys.F4 && a.Alt)
 
            {
                //MessageBox.Show("Test");
                a.Handled = true;
            }
        }                                                     
 
        private void btnExit_Click(object sender, EventArgs e) 
        {
            Form2 f = new Form2();
            f.Show();
        }                                                      
 
        private void timer1_Tick(object sender, EventArgs e)  
        {
            Time.Text = DateTime.Now.ToLongTimeString();
        }                                                     
        private void button1_Click(object sender, EventArgs e)
        {
            
        }
    }
}


Запуск через
private void button1_Click(object sender, EventArgs e)
        {
            Process.Start("C:\Users\1234\Desktop\start.bat");
        }

мне не подходит так как хотелось бы иметь возможность менять расположение файла уже в скомпилированной программе!
  • Вопрос задан
  • 1180 просмотров
Решения вопроса 1
FoggyFinder
@FoggyFinder
Для чтения информации из XML вы можете использовать Linq2Xml, XmlSerializer, XmlDocument или что-то другое.

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

На русском языке есть онлайн туториал:

Выборка элементов в LINQ to XML
Общие сведения о LINQ to XML (C#)

Приведенный в вопросе xml не валиден - он содержит более одного корневого элемента (Settings), добавьте к нему root:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <Settings>
      <PathToFile>"C:\Users\1234\Desktop\start.bat"</PathToFile>
   </Settings>
   <Settings>
      <PathToFile>"C:\Users\1234\Desktop\start2.bat"</PathToFile>
   </Settings>
</root>


Не могу сказать что мне нравится такая структура xml, но, по крайней мере, теперь с ним можно работать.

Для чтения пути:

var path = "Settings.xml"; // путь к файлу настроек
var batName = "start.bat";

var xdoc = XDocument.Load(path); 
var batPath =
    xdoc
    .Descendants("PathToFile") // ищем элементы PathToFile
    .SingleOrDefault(xe => xe.Value.Contains(batName)); // ищем единственный из них содержащий нужный bat файл

if (batPath == null) // если в файле нет нужного пути
{
    MessageBox.Show("Путь не указан"); // сообщаем пользователю
}
else // иначе
{
    Process.Start(batPath.Value.Trim('"')); // запускаем процесс
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Harlan
А чем код вида
string prg = ...; // Читаете путь к bat-файлу из XML
Process.Start(prg);

претит доброму сэру?
Второй вариант: можно запустить cmd.exe c параметрами /C и путь к bat-файлу. Т.е. запуск будет выглядеть так:
Process.Start(@"C:\Windows\System32\cmd.exe", "/C " + prg);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы