Мне нужно вызвать пакетные файлы из моего приложения UWP. Кажется, что это можно сделать с помощью Process.Start (), но он говорит, что не находит файл, даже если он определенно находится там, когда я следую по пути, который он выводит.
Filepath и рабочий каталог оба задаются как полные пути, как это требуется при использовании shellexecute = false.
Это работает, когда я устанавливаю использованиеhellexecute = true. Поскольку полный путь работает здесь, файл явно там.
При значении shellexecute = true рабочий каталог только указывает, где он должен искать файл, а командная строка запускается в каталоге system32, но мне нужно, чтобы рабочий каталог находился там, где находится открытый пакет.
Следовательно, ShellExecute = false.
Я пытался:
1. ShellExecute = true. Он находит файл, но рабочий каталог установлен неправильно.
2. Жесткое кодирование абсолютного пути к пакету. Все еще не найден.
3. Установка StartInfo.FileName вместо предоставления его через аргумент.
4. относительные пути
5. Process.Start (имя файла). Не могу установить рабочий каталог без StartInfo
6. Посмотрите на похожие вопросы, но ответ всегда тот, который у меня уже есть (используйте полный путь, когда shellexecute = false)
string executable = args[2];
string path = Assembly.GetExecutingAssembly().CodeBase;
string directory = Path.GetDirectoryName(path);
var startInfo = new ProcessStartInfo(directory + @"\Diagnose\_data\Updater\" + executable);
startInfo.UseShellExecute = false;
startInfo.WorkingDirectory = directory + @"\Diagnose\_data\Updater";
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
Process.Start(startInfo);
Он должен найти файл, поскольку указан полный абсолютный путь и файл определенно находится там, но выдает ошибку "файл не найден".