У меня возникают ошибки исключения, файл не найден - PullRequest
0 голосов
/ 15 мая 2018

Когда я пытаюсь запустить эту функцию, происходит сбой при запуске процесса.

public static void MapDestinationToSource (string destination, string source)
{
    System.Diagnostics.Process proc = new System.Diagnostics.Process ();
    // set the file to execute
    proc.StartInfo.FileName = "mklink";
    proc.StartInfo.Arguments = $"/D \"{source}\" \"{destination}\"";
    // Redirect the output stream of the child process.
    proc.StartInfo.UseShellExecute = true;
    //proc.StartInfo.RedirectStandardOutput = true;
    // start the process
    proc.Start ();
    // Do not wait for the child process to exit before
    // reading to the end of its redirected stream.
    // p.WaitForExit();
    // Read the output stream first and then wait.
    string output = proc.StandardOutput.ReadToEnd ();
    proc.WaitForExit ();
}

Исключение:

System.ComponentModel.Win32Exception occurred
  HResult=0x80004005
  Message=The system cannot find the file specified
  Source=System
  StackTrace:
   at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start()
   at GameCloud.StorageLibrary.MapDestinationToSource(String destination, String source) in D:\Development\code\sample\server\ClientAgent\ClientAgent\StorageLibrary.cs:line 130
   at GameCloud.Program.Main(String[] args) in D:\Development\code\sample\server\ClientAgent\ClientAgent\Program.cs:line 135

Когда я выполняю команду в командной строке, она работает.Но это не так, когда в коде.Я уже установил политики безопасности, чтобы позволить текущему пользователю выполнять команду mklink без повышенных прав доступа.

1 Ответ

0 голосов
/ 15 мая 2018

Если вы пытаетесь выполнить исполняемые программы (bob.exe), ознакомьтесь с моим зачеркнутым ответом ниже.

Поскольку вы пытаетесь запустить mklink, который встроен в cmd, вам необходимо использовать:

proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = $"/C mklink /D \"{source}\" \"{destination}\"";

Документы Состояние:

Когда UseShellExecute имеет значение true, свойство WorkingDirectory указывает расположение исполняемого файла. Если WorkingDirectory пустой строка, предполагается, что текущий каталог содержит исполняемый файл.

, а затем:

Когда UseShellExecute имеет значение false, свойство FileName может быть полный путь к исполняемому файлу или простое имя исполняемого файла что система попытается найти в папках, указанных Переменная среды PATH.

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

...