Разница между текущим каталогом .Net 2.0 и .Net 4.0

Как указывалось ранее, (запуск исполняемого файла .Net 2.0 в . Net 4.0) У меня возникли проблемы с запуском .Net 2.0 exe ​​из программы .Net 4.0. Я несколько решил эту программу, установив .Net 2.0. Теперь программа может корректно работать в определенных ситуациях. А именно, если я работаю с файлами исключительно в той же директории, что и моя программа. Происходит следующее:

  1. Пользователь выбирает файл
  2. .Net 2.0 exe ​​действует на этот файл, создает новый файл
  3. .Net 2.0 exe ​​действует на новый файл

Все это прекрасно работает, если исходный файл находится в том же каталоге, что и программа (и исполняемый файл .Net 2.0). Файлы, созданные исполняемым файлом 2.0, сохраняются в этом каталоге, и все в порядке. Однако, если исходный файл НЕ находится в том же каталоге, что и программа, исполняемый файл 2.0 создает новый файл в папке исходного файла. Это приводит к сбою программы, поскольку она ожидает, что новый файл будет находиться в том же каталоге, что и исполняемый файл 2.0. Стоит отметить, что это происходит только в XP с .Net 2.0 и 4.0. На моей основной машине с Windows 7, работающей под управлением .Net 4.5, этой проблемы не возникает.

Вот код, в котором я вызываю исполняемый файл 2.0:

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C 2.0EXE -i " + userFile + " -o " + resultsFile;
process.StartInfo = startInfo;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
process.Start();
process.WaitForExit();

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

Изменить: даже когда я заставляю рабочий каталог быть каким-то постоянным каталогом (вместо Environment.CurrentDirectory), он все равно не будет работать. Теперь он сохраняет файл в правильном месте (шаг 2), но исполняемый файл 2.0 затем ищет новый файл в той же папке, что и исходный файл (т. е. шаг 3 не выполняется). Опять же, это происходит только на машине XP с .Net 4.0 и 2.0.


person Lukas Bystricky    schedule 31.05.2013    source источник
comment
Возможно, вам следует проверить текущий каталог (отобразить его) перед вызовом .Net 2.0 exe.   -  person Medinoc    schedule 31.05.2013
comment
Использование Environment.CurrentDirectory намного слишком рискованно. У него типичная проблема глобальной переменной, она может измениться без вашего ведома. Как и в шаге № 1, когда вы, скажем, используете OpenFileDialog, чтобы позволить пользователю выбрать файл. Вам нужно избавиться от этого и всегда выбирать известную директорию. Тот, с которым, как вы знаете, совместима эта программа.   -  person Hans Passant    schedule 31.05.2013
comment
@Medinoc, да ведь он не в том каталоге.   -  person Lukas Bystricky    schedule 31.05.2013
comment
@HansPassant: да, я думаю, в этом случае каталог Environment.Current меняется.   -  person Lukas Bystricky    schedule 31.05.2013
comment
Я думаю, главное, что меня смущает, - это различное поведение на двух платформах.   -  person Lukas Bystricky    schedule 31.05.2013