c# Неадекватно запускается файл

164
15 января 2020, 22:50

Столкнулся со странной проблемой...

Ситуация в следующем: Есть папка с игрой, в ней 2 папки (Папка1 и Папка2) и приложение Updater.exe. В папке 2 лежит лаунчер (прога с графической оболочкой и кнопкой запуска игры), перемещать лаунчер нельзя, ибо если лаунчер запустить из другой папки, то игра не запустится и будет орать на конфиги.

Суть такова - лаунчер проверяет обновление , и если оно есть, то запускает Updater.exe из папки выше, который скачивает обновление вместо того, чтобы распаковать его "в себя" (в место где он находится) , он распаковывает файлы в папку 2 (с лаунчером), ибо процесс лаунчера вызвал апдейтер (Хотя, если запускать просто сам файл апдейтера, он обновляет все правильно, НО, потом, когда запускает лаунчер - При нажатии кнопки играть игра ругается на недостающие конфиги.. )

Почему процессы себя так ведут и как это можно исправить?

Метод проверки обновления и запуска апдейтера в лаунчере

void CheckUpdate()
    {
        string updVers = GetSettingValue("update_version");
        string curVers = _xmlhelper.GetSettingValue("update_version");
        if (updVers != curVers){
          Process.Start(AppDomain.CurrentDomain.BaseDirectory + @"..\Updater.exe");
            Application.Current.Shutdown();
        }
    }

Метод обновления в апдейтере и запуска лаунчера после

void Load()
    {
        downloader.LocalDirectory = workPath;
        downloader.Files.Clear();
        string getUpd = _web.DownloadString(_xmlhelper.GetSettingValue("update_url"));
        string updVers = GetSettingValue("update_version");
        string curVers = _xmlhelper.GetSettingValue("update_version");
        if (updVers != curVers)
        {
            downloader.Files.Add(new WowSuiteUpdater.FileInfo(_xmlhelper.GetSettingValue("url") + _xmlhelper.GetSettingValue("file_zip")));
            downloader.Start();
        }
        else {
            pBarTotalProgress.Visibility = Visibility.Hidden;
            Process.Start(AppDomain.CurrentDomain.BaseDirectory + "tes3mp\\Launcher.exe");
            Application.Current.Shutdown();
        }
    }
Answer 1
ProcessStartInfo startInfo = 
  new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "tes3mp\\Launcher.exe");
startInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory + "tes3mp";
Process.Start(startInfo);

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

READ ALSO
узнать какие есть столбцы в dataGridView?

узнать какие есть столбцы в dataGridView?

Мне нужно узнать какие столбцы есть в dataGridView

123
Как присвоить новый 'ID' в базе

Как присвоить новый 'ID' в базе

Есть большая база MS ACCESS у которой создатель решил поставить во всех таблицах тип поля 'ID' как числовой, изменить нельзя тк

150
Реализация компьютера в игре

Реализация компьютера в игре

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

200
Что означает данная строка c++?

Что означает данная строка c++?

Перевожу код из c++ cli в c# и столкнулся с проблемойЧто означает данный фрагмент когда

133