Укажите библиотеки DLL для исполняемого файла, запущенного с Process.Start? - PullRequest
2 голосов
/ 17 января 2010

Я пытаюсь запустить исполняемый файл с Process.Start ().Когда исполняемый файл не имеет DLL-зависимостей, он работает нормально.Однако, когда мне нужно включить 2 DLL, это не работает.Я попытался установить WorkingDirectory и убедился, что там присутствуют 2 необходимые библиотеки DLL.Есть идеи?

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "memcached.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = arguments;  //not shown           
startInfo.WorkingDirectory = Environment.CurrentDirectory;

try
  {
    using (Process exeProcess = Process.Start(startInfo))
      {
        exeProcess.WaitForExit();
      }
  }
    catch (Exception ex)
  {
    Trace.TraceError(ex.Message);  // never gets here
  }

Это код , основанный на ускорителе Memcached Solution для Windows Azure .Когда memcached не может быть запущен, отображается диалоговое окно.К сожалению, вы не можете видеть это, когда код работает удаленно в облаке.

Ответы [ 3 ]

1 голос
/ 17 августа 2010

У меня была похожая проблема при попытке запустить другой процесс, который нуждался в DLL, но не смог ее найти.В моем случае решение было довольно простым: пропущенный '\'.

procInfo.WorkingDirectory = @"C:\filedir"; //won't work
procInfo.WorkingDirectory = @"C:\filedir\" ; //would do the trick

procInfo.WorkingDirectory = Enviroment.CurrentDirectory; //== "C:\filedir", that won't work either
procInfo.WorkingDirectory = Enviroment.CurrentDirectory + '\\'; // would work.

Надеюсь, что вам поможет.

1 голос
/ 17 января 2010

Проблема может заключаться в том, что вы устанавливаете WorkingDirectory в текущий каталог текущего процесса (который может быть где угодно, не обязательно каталогом, содержащим вашу программу). Попробуйте установить рабочий каталог в каталог, содержащий исполняемый файл, который вы хотите запустить.

Кроме того, вы проверили, что DLL имеют memcached.exe (или в месте, требуемом memcached.exe)?

0 голосов
/ 17 января 2010

Попытайтесь поместить ваш файл .EXE и ссылки на сборки в том же месте и определить свой WorkingDirectory.WorkingDirectory для этой папки. Это, вероятно, будет хорошо работать.

Одна extreme альтернатива - это строгое имя, которое ссылается на сборки (DLL) и регистрирует их в GAC.

Вы должны исчерпать все другие альтернативы, прежде чем подумать об этой опции.

...